src/share/vm/classfile/javaClasses.cpp

changeset 2742
ed69575596ac
parent 2700
352622fd140a
child 2759
3449f5e02cc4
equal deleted inserted replaced
2741:55973726c600 2742:ed69575596ac
64 if (allow_super) 64 if (allow_super)
65 return ik->find_field(name_symbol, signature_symbol, fd) != NULL; 65 return ik->find_field(name_symbol, signature_symbol, fd) != NULL;
66 else 66 else
67 return ik->find_local_field(name_symbol, signature_symbol, fd); 67 return ik->find_local_field(name_symbol, signature_symbol, fd);
68 } 68 }
69
70 static bool find_hacked_field(instanceKlass* ik,
71 Symbol* name_symbol, Symbol* signature_symbol,
72 fieldDescriptor* fd,
73 bool allow_super = false) {
74 bool found = find_field(ik, name_symbol, signature_symbol, fd, allow_super);
75 if (!found && AllowTransitionalJSR292) {
76 Symbol* backup_sig = SystemDictionary::find_backup_signature(signature_symbol);
77 if (backup_sig != NULL) {
78 found = find_field(ik, name_symbol, backup_sig, fd, allow_super);
79 if (TraceMethodHandles) {
80 ResourceMark rm;
81 tty->print_cr("MethodHandles: %s.%s: backup for %s => %s%s",
82 ik->name()->as_C_string(), name_symbol->as_C_string(),
83 signature_symbol->as_C_string(), backup_sig->as_C_string(),
84 (found ? "" : " (NOT FOUND)"));
85 }
86 }
87 }
88 return found;
89 }
90 #define find_field find_hacked_field /* remove after AllowTransitionalJSR292 */
91 69
92 // Helpful routine for computing field offsets at run time rather than hardcoding them 70 // Helpful routine for computing field offsets at run time rather than hardcoding them
93 static void 71 static void
94 compute_offset(int &dest_offset, 72 compute_offset(int &dest_offset,
95 klassOop klass_oop, Symbol* name_symbol, Symbol* signature_symbol, 73 klassOop klass_oop, Symbol* name_symbol, Symbol* signature_symbol,
2331 2309
2332 void java_lang_invoke_MethodHandle::compute_offsets() { 2310 void java_lang_invoke_MethodHandle::compute_offsets() {
2333 klassOop k = SystemDictionary::MethodHandle_klass(); 2311 klassOop k = SystemDictionary::MethodHandle_klass();
2334 if (k != NULL && EnableInvokeDynamic) { 2312 if (k != NULL && EnableInvokeDynamic) {
2335 bool allow_super = false; 2313 bool allow_super = false;
2336 if (AllowTransitionalJSR292) allow_super = true; // temporary, to access java.dyn.MethodHandleImpl
2337 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super); 2314 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
2338 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super); 2315 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super);
2339 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super); 2316 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super);
2340 2317
2341 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots. 2318 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots.

mercurial