1.1 --- a/src/share/vm/classfile/vmSymbols.hpp Mon Jan 04 00:22:57 2010 -0800 1.2 +++ b/src/share/vm/classfile/vmSymbols.hpp Mon Jan 04 15:52:40 2010 +0100 1.3 @@ -346,9 +346,14 @@ 1.4 \ 1.5 /* common signatures names */ \ 1.6 template(void_method_signature, "()V") \ 1.7 + template(void_boolean_signature, "()Z") \ 1.8 + template(void_byte_signature, "()B") \ 1.9 + template(void_char_signature, "()C") \ 1.10 + template(void_short_signature, "()S") \ 1.11 template(void_int_signature, "()I") \ 1.12 template(void_long_signature, "()J") \ 1.13 - template(void_boolean_signature, "()Z") \ 1.14 + template(void_float_signature, "()F") \ 1.15 + template(void_double_signature, "()D") \ 1.16 template(int_void_signature, "(I)V") \ 1.17 template(int_int_signature, "(I)I") \ 1.18 template(int_bool_signature, "(I)Z") \ 1.19 @@ -853,6 +858,46 @@ 1.20 \ 1.21 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_array_object_object_signature, F_R) \ 1.22 /* (symbols invoke_name and invoke_signature defined above) */ \ 1.23 + do_intrinsic(_checkSpreadArgument, sun_dyn_MethodHandleImpl, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) \ 1.24 + do_name( checkSpreadArgument_name, "checkSpreadArgument") \ 1.25 + do_name( checkSpreadArgument_signature, "(Ljava/lang/Object;I)V") \ 1.26 + \ 1.27 + /* unboxing methods: */ \ 1.28 + do_intrinsic(_booleanValue, java_lang_Boolean, booleanValue_name, void_boolean_signature, F_R) \ 1.29 + do_name( booleanValue_name, "booleanValue") \ 1.30 + do_intrinsic(_byteValue, java_lang_Byte, byteValue_name, void_byte_signature, F_R) \ 1.31 + do_name( byteValue_name, "byteValue") \ 1.32 + do_intrinsic(_charValue, java_lang_Character, charValue_name, void_char_signature, F_R) \ 1.33 + do_name( charValue_name, "charValue") \ 1.34 + do_intrinsic(_shortValue, java_lang_Short, shortValue_name, void_short_signature, F_R) \ 1.35 + do_name( shortValue_name, "shortValue") \ 1.36 + do_intrinsic(_intValue, java_lang_Integer, intValue_name, void_int_signature, F_R) \ 1.37 + do_name( intValue_name, "intValue") \ 1.38 + do_intrinsic(_longValue, java_lang_Long, longValue_name, void_long_signature, F_R) \ 1.39 + do_name( longValue_name, "longValue") \ 1.40 + do_intrinsic(_floatValue, java_lang_Float, floatValue_name, void_float_signature, F_R) \ 1.41 + do_name( floatValue_name, "floatValue") \ 1.42 + do_intrinsic(_doubleValue, java_lang_Double, doubleValue_name, void_double_signature, F_R) \ 1.43 + do_name( doubleValue_name, "doubleValue") \ 1.44 + \ 1.45 + /* boxing methods: */ \ 1.46 + do_name( valueOf_name, "valueOf") \ 1.47 + do_intrinsic(_Boolean_valueOf, java_lang_Boolean, valueOf_name, Boolean_valueOf_signature, F_S) \ 1.48 + do_name( Boolean_valueOf_signature, "(Z)Ljava/lang/Boolean;") \ 1.49 + do_intrinsic(_Byte_valueOf, java_lang_Byte, valueOf_name, Byte_valueOf_signature, F_S) \ 1.50 + do_name( Byte_valueOf_signature, "(B)Ljava/lang/Byte;") \ 1.51 + do_intrinsic(_Character_valueOf, java_lang_Character, valueOf_name, Character_valueOf_signature, F_S) \ 1.52 + do_name( Character_valueOf_signature, "(C)Ljava/lang/Character;") \ 1.53 + do_intrinsic(_Short_valueOf, java_lang_Short, valueOf_name, Short_valueOf_signature, F_S) \ 1.54 + do_name( Short_valueOf_signature, "(S)Ljava/lang/Short;") \ 1.55 + do_intrinsic(_Integer_valueOf, java_lang_Integer, valueOf_name, Integer_valueOf_signature, F_S) \ 1.56 + do_name( Integer_valueOf_signature, "(I)Ljava/lang/Integer;") \ 1.57 + do_intrinsic(_Long_valueOf, java_lang_Long, valueOf_name, Long_valueOf_signature, F_S) \ 1.58 + do_name( Long_valueOf_signature, "(J)Ljava/lang/Long;") \ 1.59 + do_intrinsic(_Float_valueOf, java_lang_Float, valueOf_name, Float_valueOf_signature, F_S) \ 1.60 + do_name( Float_valueOf_signature, "(F)Ljava/lang/Float;") \ 1.61 + do_intrinsic(_Double_valueOf, java_lang_Double, valueOf_name, Double_valueOf_signature, F_S) \ 1.62 + do_name( Double_valueOf_signature, "(D)Ljava/lang/Double;") \ 1.63 \ 1.64 /*end*/ 1.65 1.66 @@ -983,7 +1028,12 @@ 1.67 F_Y, // !static ?native synchronized 1.68 F_RN, // !static native !synchronized 1.69 F_SN, // static native !synchronized 1.70 - F_RNY // !static native synchronized 1.71 + F_RNY, // !static native synchronized 1.72 + 1.73 + FLAG_LIMIT 1.74 + }; 1.75 + enum { 1.76 + log2_FLAG_LIMIT = 4 // checked by an assert at start-up 1.77 }; 1.78 1.79 public: 1.80 @@ -995,15 +1045,32 @@ 1.81 1.82 static const char* name_at(ID id); 1.83 1.84 +private: 1.85 + static ID find_id_impl(vmSymbols::SID holder, 1.86 + vmSymbols::SID name, 1.87 + vmSymbols::SID sig, 1.88 + jshort flags); 1.89 + 1.90 +public: 1.91 // Given a method's class, name, signature, and access flags, report its ID. 1.92 static ID find_id(vmSymbols::SID holder, 1.93 vmSymbols::SID name, 1.94 vmSymbols::SID sig, 1.95 - jshort flags); 1.96 + jshort flags) { 1.97 + ID id = find_id_impl(holder, name, sig, flags); 1.98 +#ifdef ASSERT 1.99 + // ID _none does not hold the following asserts. 1.100 + if (id == _none) return id; 1.101 +#endif 1.102 + assert( class_for(id) == holder, "correct id"); 1.103 + assert( name_for(id) == name, "correct id"); 1.104 + assert(signature_for(id) == sig, "correct id"); 1.105 + return id; 1.106 + } 1.107 1.108 static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN; 1.109 1.110 - // No need for these in the product: 1.111 + // Find out the symbols behind an intrinsic: 1.112 static vmSymbols::SID class_for(ID id); 1.113 static vmSymbols::SID name_for(ID id); 1.114 static vmSymbols::SID signature_for(ID id); 1.115 @@ -1013,4 +1080,8 @@ 1.116 1.117 // Access to intrinsic methods: 1.118 static methodOop method_for(ID id); 1.119 + 1.120 + // Wrapper object methods: 1.121 + static ID for_boxing(BasicType type); 1.122 + static ID for_unboxing(BasicType type); 1.123 };