Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 2416:38fea01eb669
6817525: turn on method handle functionality by default for JSR 292
Summary: After appropriate testing, we need to turn on EnableMethodHandles and EnableInvokeDynamic by default.
Reviewed-by: never, kvn, jrose, phh
author | twisti |
---|---|
date | Thu, 31 Mar 2011 02:31:57 -0700 |
parents | 8033953d67ff |
children | ed69575596ac |
comparison
equal
deleted
inserted
replaced
2415:09f96c3ff1ad | 2416:38fea01eb669 |
---|---|
1015 SystemDictionary_lock->notify_all(); | 1015 SystemDictionary_lock->notify_all(); |
1016 } | 1016 } |
1017 } | 1017 } |
1018 | 1018 |
1019 if (host_klass.not_null() && k.not_null()) { | 1019 if (host_klass.not_null() && k.not_null()) { |
1020 assert(AnonymousClasses, ""); | 1020 assert(EnableInvokeDynamic, ""); |
1021 // If it's anonymous, initialize it now, since nobody else will. | 1021 // If it's anonymous, initialize it now, since nobody else will. |
1022 k->set_host_klass(host_klass()); | 1022 k->set_host_klass(host_klass()); |
1023 | 1023 |
1024 { | 1024 { |
1025 MutexLocker mu_r(Compile_lock, THREAD); | 1025 MutexLocker mu_r(Compile_lock, THREAD); |
1938 try_load = false; | 1938 try_load = false; |
1939 #endif //KERNEL | 1939 #endif //KERNEL |
1940 } | 1940 } |
1941 Symbol* backup_symbol = NULL; // symbol to try if the current symbol fails | 1941 Symbol* backup_symbol = NULL; // symbol to try if the current symbol fails |
1942 if (init_opt == SystemDictionary::Pre_JSR292) { | 1942 if (init_opt == SystemDictionary::Pre_JSR292) { |
1943 if (!EnableMethodHandles) try_load = false; // do not bother to load such classes | 1943 if (!EnableInvokeDynamic) try_load = false; // do not bother to load such classes |
1944 if (AllowTransitionalJSR292) { | 1944 if (AllowTransitionalJSR292) { |
1945 backup_symbol = find_backup_class_name(symbol); | 1945 backup_symbol = find_backup_class_name(symbol); |
1946 if (try_load && PreferTransitionalJSR292) { | 1946 if (try_load && PreferTransitionalJSR292) { |
1947 while (backup_symbol != NULL) { | 1947 while (backup_symbol != NULL) { |
1948 (*klassp) = resolve_or_null(backup_symbol, CHECK_0); // try backup early | 1948 (*klassp) = resolve_or_null(backup_symbol, CHECK_0); // try backup early |
2036 instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT); | 2036 instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT); |
2037 instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK); | 2037 instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK); |
2038 instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL); | 2038 instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL); |
2039 instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM); | 2039 instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM); |
2040 | 2040 |
2041 WKID meth_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass); | 2041 // JSR 292 classes |
2042 WKID meth_group_end = WK_KLASS_ENUM_NAME(WrongMethodTypeException_klass); | 2042 WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass); |
2043 initialize_wk_klasses_until(meth_group_start, scan, CHECK); | 2043 WKID jsr292_group_end = WK_KLASS_ENUM_NAME(CallSite_klass); |
2044 if (EnableMethodHandles) { | 2044 initialize_wk_klasses_until(jsr292_group_start, scan, CHECK); |
2045 initialize_wk_klasses_through(meth_group_end, scan, CHECK); | |
2046 } | |
2047 if (_well_known_klasses[meth_group_start] == NULL) { | |
2048 // Skip the rest of the method handle classes, if MethodHandle is not loaded. | |
2049 scan = WKID(meth_group_end+1); | |
2050 } | |
2051 WKID indy_group_start = WK_KLASS_ENUM_NAME(Linkage_klass); | |
2052 WKID indy_group_end = WK_KLASS_ENUM_NAME(CallSite_klass); | |
2053 initialize_wk_klasses_until(indy_group_start, scan, CHECK); | |
2054 if (EnableInvokeDynamic) { | 2045 if (EnableInvokeDynamic) { |
2055 initialize_wk_klasses_through(indy_group_end, scan, CHECK); | 2046 initialize_wk_klasses_through(jsr292_group_end, scan, CHECK); |
2056 } | 2047 } else { |
2057 if (_well_known_klasses[indy_group_start] == NULL) { | 2048 // Skip the JSR 292 classes, if not enabled. |
2058 // Skip the rest of the dynamic typing classes, if Linkage is not loaded. | 2049 scan = WKID(jsr292_group_end + 1); |
2059 scan = WKID(indy_group_end+1); | |
2060 } | 2050 } |
2061 | 2051 |
2062 initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK); | 2052 initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK); |
2063 | 2053 |
2064 _box_klasses[T_BOOLEAN] = WK_KLASS(Boolean_klass); | 2054 _box_klasses[T_BOOLEAN] = WK_KLASS(Boolean_klass); |
2405 | 2395 |
2406 methodOop SystemDictionary::find_method_handle_invoke(Symbol* name, | 2396 methodOop SystemDictionary::find_method_handle_invoke(Symbol* name, |
2407 Symbol* signature, | 2397 Symbol* signature, |
2408 KlassHandle accessing_klass, | 2398 KlassHandle accessing_klass, |
2409 TRAPS) { | 2399 TRAPS) { |
2410 if (!EnableMethodHandles) return NULL; | 2400 if (!EnableInvokeDynamic) return NULL; |
2411 vmSymbols::SID name_id = vmSymbols::find_sid(name); | 2401 vmSymbols::SID name_id = vmSymbols::find_sid(name); |
2412 assert(name_id != vmSymbols::NO_SID, "must be a known name"); | 2402 assert(name_id != vmSymbols::NO_SID, "must be a known name"); |
2413 unsigned int hash = invoke_method_table()->compute_hash(signature, name_id); | 2403 unsigned int hash = invoke_method_table()->compute_hash(signature, name_id); |
2414 int index = invoke_method_table()->hash_to_index(hash); | 2404 int index = invoke_method_table()->hash_to_index(hash); |
2415 SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id); | 2405 SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id); |