223 template(annotations_name, "annotations") \
224 template(parameter_annotations_name, "parameterAnnotations") \
225 template(annotation_default_name, "annotationDefault") \
226 template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \
227 template(constantPoolOop_name, "constantPoolOop") \
228 template(sun_reflect_UnsafeStaticFieldAccessorImpl, "sun/reflect/UnsafeStaticFieldAccessorImpl")\
229 template(base_name, "base") \
230 \
231 /* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
232 template(java_dyn_InvokeDynamic, "java/dyn/InvokeDynamic") \
233 template(java_dyn_Linkage, "java/dyn/Linkage") \
234 template(java_dyn_CallSite, "java/dyn/CallSite") \
235 template(java_dyn_MethodHandle, "java/dyn/MethodHandle") \
236 template(java_dyn_MethodType, "java/dyn/MethodType") \
237 template(java_dyn_WrongMethodTypeException, "java/dyn/WrongMethodTypeException") \
238 template(java_dyn_MethodType_signature, "Ljava/dyn/MethodType;") \
239 template(java_dyn_MethodHandle_signature, "Ljava/dyn/MethodHandle;") \
240 /* internal classes known only to the JVM: */ \
241 template(java_dyn_MethodTypeForm, "java/dyn/MethodTypeForm") \
242 template(java_dyn_MethodTypeForm_signature, "Ljava/dyn/MethodTypeForm;") \
243 template(sun_dyn_MemberName, "sun/dyn/MemberName") \
244 template(sun_dyn_MemberName_signature, "Lsun/dyn/MemberName;") \
245 template(sun_dyn_MethodHandleImpl, "sun/dyn/MethodHandleImpl") \
246 template(sun_dyn_MethodHandleNatives, "sun/dyn/MethodHandleNatives") \
247 template(sun_dyn_AdapterMethodHandle, "sun/dyn/AdapterMethodHandle") \
248 template(sun_dyn_BoundMethodHandle, "sun/dyn/BoundMethodHandle") \
249 template(sun_dyn_DirectMethodHandle, "sun/dyn/DirectMethodHandle") \
250 /* internal up-calls made only by the JVM, via class sun.dyn.MethodHandleNatives: */ \
251 template(findMethodHandleType_name, "findMethodHandleType") \
252 template(findMethodHandleType_signature, "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/dyn/MethodType;") \
253 template(notifyGenericMethodType_name, "notifyGenericMethodType") \
254 template(notifyGenericMethodType_signature, "(Ljava/dyn/MethodType;)V") \
255 template(linkMethodHandleConstant_name, "linkMethodHandleConstant") \
256 template(linkMethodHandleConstant_signature, "(Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/dyn/MethodHandle;") \
257 template(makeDynamicCallSite_name, "makeDynamicCallSite") \
258 template(makeDynamicCallSite_signature, "(Ljava/dyn/MethodHandle;Ljava/lang/String;Ljava/dyn/MethodType;Ljava/lang/Object;Lsun/dyn/MemberName;I)Ljava/dyn/CallSite;") \
259 NOT_LP64( do_alias(machine_word_signature, int_signature) ) \
260 LP64_ONLY( do_alias(machine_word_signature, long_signature) ) \
261 \
262 /* common method and field names */ \
263 template(object_initializer_name, "<init>") \
264 template(class_initializer_name, "<clinit>") \
265 template(println_name, "println") \
266 template(printStackTrace_name, "printStackTrace") \
267 template(main_name, "main") \
268 template(name_name, "name") \
269 template(priority_name, "priority") \
270 template(stillborn_name, "stillborn") \
271 template(group_name, "group") \
272 template(daemon_name, "daemon") \
273 template(eetop_name, "eetop") \
274 template(thread_status_name, "threadStatus") \
275 template(run_method_name, "run") \
276 template(exit_method_name, "exit") \
277 template(add_method_name, "add") \
278 template(parent_name, "parent") \
865 \
866 do_intrinsic(_StringBuffer_void, java_lang_StringBuffer, object_initializer_name, void_method_signature, F_R) \
867 do_intrinsic(_StringBuffer_int, java_lang_StringBuffer, object_initializer_name, int_void_signature, F_R) \
868 do_intrinsic(_StringBuffer_String, java_lang_StringBuffer, object_initializer_name, string_void_signature, F_R) \
869 \
870 do_intrinsic(_StringBuffer_append_char, java_lang_StringBuffer, append_name, char_StringBuffer_signature, F_Y) \
871 do_intrinsic(_StringBuffer_append_int, java_lang_StringBuffer, append_name, int_StringBuffer_signature, F_Y) \
872 do_intrinsic(_StringBuffer_append_String, java_lang_StringBuffer, append_name, String_StringBuffer_signature, F_Y) \
873 \
874 do_intrinsic(_StringBuffer_toString, java_lang_StringBuffer, toString_name, void_string_signature, F_Y) \
875 \
876 do_intrinsic(_Integer_toString, java_lang_Integer, toString_name, int_String_signature, F_S) \
877 \
878 do_intrinsic(_String_String, java_lang_String, object_initializer_name, string_void_signature, F_R) \
879 \
880 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \
881 /* (symbol object_initializer_name defined above) */ \
882 \
883 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_object_array_object_signature, F_R) \
884 /* (symbols invoke_name and invoke_signature defined above) */ \
885 do_intrinsic(_checkSpreadArgument, sun_dyn_MethodHandleImpl, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) \
886 do_name( checkSpreadArgument_name, "checkSpreadArgument") \
887 do_name( checkSpreadArgument_signature, "(Ljava/lang/Object;I)V") \
888 do_intrinsic(_invokeExact, java_dyn_MethodHandle, invokeExact_name, object_array_object_signature, F_RN) \
889 do_intrinsic(_invokeGeneric, java_dyn_MethodHandle, invokeGeneric_name, object_array_object_signature, F_RN) \
890 do_intrinsic(_invokeVarargs, java_dyn_MethodHandle, invokeVarargs_name, object_array_object_signature, F_R) \
891 do_intrinsic(_invokeDynamic, java_dyn_InvokeDynamic, star_name, object_array_object_signature, F_SN) \
892 \
893 /* unboxing methods: */ \
894 do_intrinsic(_booleanValue, java_lang_Boolean, booleanValue_name, void_boolean_signature, F_R) \
895 do_name( booleanValue_name, "booleanValue") \
896 do_intrinsic(_byteValue, java_lang_Byte, byteValue_name, void_byte_signature, F_R) \
897 do_name( byteValue_name, "byteValue") \
898 do_intrinsic(_charValue, java_lang_Character, charValue_name, void_char_signature, F_R) \
899 do_name( charValue_name, "charValue") \
900 do_intrinsic(_shortValue, java_lang_Short, shortValue_name, void_short_signature, F_R) \
901 do_name( shortValue_name, "shortValue") \
902 do_intrinsic(_intValue, java_lang_Integer, intValue_name, void_int_signature, F_R) \
903 do_name( intValue_name, "intValue") \
904 do_intrinsic(_longValue, java_lang_Long, longValue_name, void_long_signature, F_R) \
905 do_name( longValue_name, "longValue") \
978 // Sharing support
979 static void symbols_do(SymbolClosure* f);
980 static void serialize(SerializeOopClosure* soc);
981
982 static Symbol* type_signature(BasicType t) {
983 assert((uint)t < T_VOID+1, "range check");
984 assert(_type_signatures[t] != NULL, "domain check");
985 return _type_signatures[t];
986 }
987 // inverse of type_signature; returns T_OBJECT if s is not recognized
988 static BasicType signature_type(Symbol* s);
989
990 static Symbol* symbol_at(SID id) {
991 assert(id >= FIRST_SID && id < SID_LIMIT, "oob");
992 assert(_symbols[id] != NULL, "init");
993 return _symbols[id];
994 }
995
996 // Returns symbol's SID if one is assigned, else NO_SID.
997 static SID find_sid(Symbol* symbol);
998
999 #ifndef PRODUCT
1000 // No need for this in the product:
1001 static const char* name_for(SID sid);
1002 #endif //PRODUCT
1003 };
1004
1005 // VM Intrinsic ID's uniquely identify some very special methods
1006 class vmIntrinsics: AllStatic {
1007 friend class vmSymbols;
1008 friend class ciObjectFactory;
1009
1010 public:
1011 // Accessing
1012 enum ID {
1013 _none = 0, // not an intrinsic (default answer)
1014
1015 #define VM_INTRINSIC_ENUM(id, klass, name, sig, flags) id,
1016 VM_INTRINSICS_DO(VM_INTRINSIC_ENUM,
1017 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE)
|
223 template(annotations_name, "annotations") \
224 template(parameter_annotations_name, "parameterAnnotations") \
225 template(annotation_default_name, "annotationDefault") \
226 template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \
227 template(constantPoolOop_name, "constantPoolOop") \
228 template(sun_reflect_UnsafeStaticFieldAccessorImpl, "sun/reflect/UnsafeStaticFieldAccessorImpl")\
229 template(base_name, "base") \
230 \
231 /* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
232 template(java_dyn_InvokeDynamic, "java/dyn/InvokeDynamic") \
233 template(java_dyn_Linkage, "java/dyn/Linkage") \
234 template(java_dyn_CallSite, "java/dyn/CallSite") \
235 template(java_dyn_MethodHandle, "java/dyn/MethodHandle") \
236 template(java_dyn_MethodType, "java/dyn/MethodType") \
237 template(java_dyn_WrongMethodTypeException, "java/dyn/WrongMethodTypeException") \
238 template(java_dyn_MethodType_signature, "Ljava/dyn/MethodType;") \
239 template(java_dyn_MethodHandle_signature, "Ljava/dyn/MethodHandle;") \
240 /* internal classes known only to the JVM: */ \
241 template(java_dyn_MethodTypeForm, "java/dyn/MethodTypeForm") \
242 template(java_dyn_MethodTypeForm_signature, "Ljava/dyn/MethodTypeForm;") \
243 template(java_dyn_MemberName, "java/dyn/MemberName") \
244 template(java_dyn_MethodHandleImpl, "java/dyn/MethodHandleImpl") \
245 template(java_dyn_MethodHandleNatives, "java/dyn/MethodHandleNatives") \
246 template(java_dyn_AdapterMethodHandle, "java/dyn/AdapterMethodHandle") \
247 template(java_dyn_BoundMethodHandle, "java/dyn/BoundMethodHandle") \
248 template(java_dyn_DirectMethodHandle, "java/dyn/DirectMethodHandle") \
249 template(sun_dyn_MemberName, "sun/dyn/MemberName") /* AllowTransitionalJSR292 ONLY */ \
250 template(sun_dyn_MethodHandleImpl, "sun/dyn/MethodHandleImpl") /* AllowTransitionalJSR292 ONLY */ \
251 template(sun_dyn_MethodHandleNatives, "sun/dyn/MethodHandleNatives") /* AllowTransitionalJSR292 ONLY */ \
252 template(sun_dyn_AdapterMethodHandle, "sun/dyn/AdapterMethodHandle") /* AllowTransitionalJSR292 ONLY */ \
253 template(sun_dyn_BoundMethodHandle, "sun/dyn/BoundMethodHandle") /* AllowTransitionalJSR292 ONLY */ \
254 template(sun_dyn_DirectMethodHandle, "sun/dyn/DirectMethodHandle") /* AllowTransitionalJSR292 ONLY */ \
255 /* internal up-calls made only by the JVM, via class sun.dyn.MethodHandleNatives: */ \
256 template(findMethodHandleType_name, "findMethodHandleType") \
257 template(findMethodHandleType_signature, "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/dyn/MethodType;") \
258 template(notifyGenericMethodType_name, "notifyGenericMethodType") \
259 template(notifyGenericMethodType_signature, "(Ljava/dyn/MethodType;)V") \
260 template(linkMethodHandleConstant_name, "linkMethodHandleConstant") \
261 template(linkMethodHandleConstant_signature, "(Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/dyn/MethodHandle;") \
262 template(makeDynamicCallSite_name, "makeDynamicCallSite") \
263 template(makeDynamicCallSite_signature, "(Ljava/dyn/MethodHandle;Ljava/lang/String;Ljava/dyn/MethodType;Ljava/lang/Object;Ljava/dyn/MemberName;I)Ljava/dyn/CallSite;") \
264 template(makeDynamicCallSite_TRANS_signature, "(Ljava/dyn/MethodHandle;Ljava/lang/String;Ljava/dyn/MethodType;Ljava/lang/Object;Lsun/dyn/MemberName;I)Ljava/dyn/CallSite;") /* AllowTransitionalJSR292 ONLY */ \
265 NOT_LP64( do_alias(machine_word_signature, int_signature) ) \
266 LP64_ONLY( do_alias(machine_word_signature, long_signature) ) \
267 \
268 /* common method and field names */ \
269 template(object_initializer_name, "<init>") \
270 template(class_initializer_name, "<clinit>") \
271 template(println_name, "println") \
272 template(printStackTrace_name, "printStackTrace") \
273 template(main_name, "main") \
274 template(name_name, "name") \
275 template(priority_name, "priority") \
276 template(stillborn_name, "stillborn") \
277 template(group_name, "group") \
278 template(daemon_name, "daemon") \
279 template(eetop_name, "eetop") \
280 template(thread_status_name, "threadStatus") \
281 template(run_method_name, "run") \
282 template(exit_method_name, "exit") \
283 template(add_method_name, "add") \
284 template(parent_name, "parent") \
871 \
872 do_intrinsic(_StringBuffer_void, java_lang_StringBuffer, object_initializer_name, void_method_signature, F_R) \
873 do_intrinsic(_StringBuffer_int, java_lang_StringBuffer, object_initializer_name, int_void_signature, F_R) \
874 do_intrinsic(_StringBuffer_String, java_lang_StringBuffer, object_initializer_name, string_void_signature, F_R) \
875 \
876 do_intrinsic(_StringBuffer_append_char, java_lang_StringBuffer, append_name, char_StringBuffer_signature, F_Y) \
877 do_intrinsic(_StringBuffer_append_int, java_lang_StringBuffer, append_name, int_StringBuffer_signature, F_Y) \
878 do_intrinsic(_StringBuffer_append_String, java_lang_StringBuffer, append_name, String_StringBuffer_signature, F_Y) \
879 \
880 do_intrinsic(_StringBuffer_toString, java_lang_StringBuffer, toString_name, void_string_signature, F_Y) \
881 \
882 do_intrinsic(_Integer_toString, java_lang_Integer, toString_name, int_String_signature, F_S) \
883 \
884 do_intrinsic(_String_String, java_lang_String, object_initializer_name, string_void_signature, F_R) \
885 \
886 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \
887 /* (symbol object_initializer_name defined above) */ \
888 \
889 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_object_array_object_signature, F_R) \
890 /* (symbols invoke_name and invoke_signature defined above) */ \
891 do_intrinsic(_checkSpreadArgument, java_dyn_MethodHandleNatives, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) \
892 do_intrinsic(_checkSpreadArgument_TRANS, sun_dyn_MethodHandleImpl, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) /* AllowTransitionalJSR292 ONLY */ \
893 do_name( checkSpreadArgument_name, "checkSpreadArgument") \
894 do_name( checkSpreadArgument_signature, "(Ljava/lang/Object;I)V") \
895 do_intrinsic(_invokeExact, java_dyn_MethodHandle, invokeExact_name, object_array_object_signature, F_RN) \
896 do_intrinsic(_invokeGeneric, java_dyn_MethodHandle, invokeGeneric_name, object_array_object_signature, F_RN) \
897 do_intrinsic(_invokeVarargs, java_dyn_MethodHandle, invokeVarargs_name, object_array_object_signature, F_R) \
898 do_intrinsic(_invokeDynamic, java_dyn_InvokeDynamic, star_name, object_array_object_signature, F_SN) \
899 \
900 /* unboxing methods: */ \
901 do_intrinsic(_booleanValue, java_lang_Boolean, booleanValue_name, void_boolean_signature, F_R) \
902 do_name( booleanValue_name, "booleanValue") \
903 do_intrinsic(_byteValue, java_lang_Byte, byteValue_name, void_byte_signature, F_R) \
904 do_name( byteValue_name, "byteValue") \
905 do_intrinsic(_charValue, java_lang_Character, charValue_name, void_char_signature, F_R) \
906 do_name( charValue_name, "charValue") \
907 do_intrinsic(_shortValue, java_lang_Short, shortValue_name, void_short_signature, F_R) \
908 do_name( shortValue_name, "shortValue") \
909 do_intrinsic(_intValue, java_lang_Integer, intValue_name, void_int_signature, F_R) \
910 do_name( intValue_name, "intValue") \
911 do_intrinsic(_longValue, java_lang_Long, longValue_name, void_long_signature, F_R) \
912 do_name( longValue_name, "longValue") \
985 // Sharing support
986 static void symbols_do(SymbolClosure* f);
987 static void serialize(SerializeOopClosure* soc);
988
989 static Symbol* type_signature(BasicType t) {
990 assert((uint)t < T_VOID+1, "range check");
991 assert(_type_signatures[t] != NULL, "domain check");
992 return _type_signatures[t];
993 }
994 // inverse of type_signature; returns T_OBJECT if s is not recognized
995 static BasicType signature_type(Symbol* s);
996
997 static Symbol* symbol_at(SID id) {
998 assert(id >= FIRST_SID && id < SID_LIMIT, "oob");
999 assert(_symbols[id] != NULL, "init");
1000 return _symbols[id];
1001 }
1002
1003 // Returns symbol's SID if one is assigned, else NO_SID.
1004 static SID find_sid(Symbol* symbol);
1005 static SID find_sid(const char* symbol_name);
1006
1007 #ifndef PRODUCT
1008 // No need for this in the product:
1009 static const char* name_for(SID sid);
1010 #endif //PRODUCT
1011 };
1012
1013 // VM Intrinsic ID's uniquely identify some very special methods
1014 class vmIntrinsics: AllStatic {
1015 friend class vmSymbols;
1016 friend class ciObjectFactory;
1017
1018 public:
1019 // Accessing
1020 enum ID {
1021 _none = 0, // not an intrinsic (default answer)
1022
1023 #define VM_INTRINSIC_ENUM(id, klass, name, sig, flags) id,
1024 VM_INTRINSICS_DO(VM_INTRINSIC_ENUM,
1025 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE)
|