comparison agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java @ 1602:136b78722a08

6939203: JSR 292 needs method handle constants Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode. Reviewed-by: twisti, never
author jrose
date Wed, 09 Jun 2010 18:50:45 -0700
parents c18cbe5936b8
children 083fde3b838e
comparison
equal deleted inserted replaced
1585:49fac4acd688 1602:136b78722a08
36 private static int JVM_CONSTANT_String = 8; 36 private static int JVM_CONSTANT_String = 8;
37 private static int JVM_CONSTANT_Fieldref = 9; 37 private static int JVM_CONSTANT_Fieldref = 9;
38 private static int JVM_CONSTANT_Methodref = 10; 38 private static int JVM_CONSTANT_Methodref = 10;
39 private static int JVM_CONSTANT_InterfaceMethodref = 11; 39 private static int JVM_CONSTANT_InterfaceMethodref = 11;
40 private static int JVM_CONSTANT_NameAndType = 12; 40 private static int JVM_CONSTANT_NameAndType = 12;
41 private static int JVM_CONSTANT_MethodHandle = 15; // JSR 292
42 private static int JVM_CONSTANT_MethodType = 16; // JSR 292
41 private static int JVM_CONSTANT_Invalid = 0; // For bad value initialization 43 private static int JVM_CONSTANT_Invalid = 0; // For bad value initialization
42 private static int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use 44 private static int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use
43 private static int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool 45 private static int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool
44 private static int JVM_CONSTANT_UnresolvedString = 102; // Temporary tag until actual use 46 private static int JVM_CONSTANT_UnresolvedString = 102; // Temporary tag until actual use
45 private static int JVM_CONSTANT_StringIndex = 103; // Temporary tag while constructing constant pool 47 private static int JVM_CONSTANT_StringIndex = 103; // Temporary tag while constructing constant pool
46 private static int JVM_CONSTANT_UnresolvedClassInError = 104; // Resolution failed 48 private static int JVM_CONSTANT_UnresolvedClassInError = 104; // Resolution failed
49 private static int JVM_CONSTANT_Object = 105; // Required for BoundMethodHandle arguments.
50
51 // JVM_CONSTANT_MethodHandle subtypes //FIXME: connect these to data structure
52 private static int JVM_REF_getField = 1;
53 private static int JVM_REF_getStatic = 2;
54 private static int JVM_REF_putField = 3;
55 private static int JVM_REF_putStatic = 4;
56 private static int JVM_REF_invokeVirtual = 5;
57 private static int JVM_REF_invokeStatic = 6;
58 private static int JVM_REF_invokeSpecial = 7;
59 private static int JVM_REF_newInvokeSpecial = 8;
60 private static int JVM_REF_invokeInterface = 9;
47 61
48 private byte tag; 62 private byte tag;
49 63
50 public ConstantTag(byte tag) { 64 public ConstantTag(byte tag) {
51 this.tag = tag; 65 this.tag = tag;
60 public boolean isFloat() { return tag == JVM_CONSTANT_Float; } 74 public boolean isFloat() { return tag == JVM_CONSTANT_Float; }
61 public boolean isLong() { return tag == JVM_CONSTANT_Long; } 75 public boolean isLong() { return tag == JVM_CONSTANT_Long; }
62 public boolean isDouble() { return tag == JVM_CONSTANT_Double; } 76 public boolean isDouble() { return tag == JVM_CONSTANT_Double; }
63 public boolean isNameAndType() { return tag == JVM_CONSTANT_NameAndType; } 77 public boolean isNameAndType() { return tag == JVM_CONSTANT_NameAndType; }
64 public boolean isUtf8() { return tag == JVM_CONSTANT_Utf8; } 78 public boolean isUtf8() { return tag == JVM_CONSTANT_Utf8; }
79 public boolean isMethodHandle() { return tag == JVM_CONSTANT_MethodHandle; }
80 public boolean isMethodType() { return tag == JVM_CONSTANT_MethodType; }
65 81
66 public boolean isInvalid() { return tag == JVM_CONSTANT_Invalid; } 82 public boolean isInvalid() { return tag == JVM_CONSTANT_Invalid; }
67 83
68 public boolean isUnresolvedKlass() { 84 public boolean isUnresolvedKlass() {
69 return tag == JVM_CONSTANT_UnresolvedClass || tag == JVM_CONSTANT_UnresolvedClassInError; 85 return tag == JVM_CONSTANT_UnresolvedClass || tag == JVM_CONSTANT_UnresolvedClassInError;
71 public boolean isUnresolveKlassInError() { return tag == JVM_CONSTANT_UnresolvedClassInError; } 87 public boolean isUnresolveKlassInError() { return tag == JVM_CONSTANT_UnresolvedClassInError; }
72 public boolean isKlassIndex() { return tag == JVM_CONSTANT_ClassIndex; } 88 public boolean isKlassIndex() { return tag == JVM_CONSTANT_ClassIndex; }
73 public boolean isUnresolvedString() { return tag == JVM_CONSTANT_UnresolvedString; } 89 public boolean isUnresolvedString() { return tag == JVM_CONSTANT_UnresolvedString; }
74 public boolean isStringIndex() { return tag == JVM_CONSTANT_StringIndex; } 90 public boolean isStringIndex() { return tag == JVM_CONSTANT_StringIndex; }
75 91
92 public boolean isObject() { return tag == JVM_CONSTANT_Object; }
93
76 public boolean isKlassReference() { return isKlassIndex() || isUnresolvedKlass(); } 94 public boolean isKlassReference() { return isKlassIndex() || isUnresolvedKlass(); }
77 public boolean isFieldOrMethod() { return isField() || isMethod() || isInterfaceMethod(); } 95 public boolean isFieldOrMethod() { return isField() || isMethod() || isInterfaceMethod(); }
78 public boolean isSymbol() { return isUtf8(); } 96 public boolean isSymbol() { return isUtf8(); }
79 } 97 }