Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/vm/interpreter/linkResolver.cpp
          +++ new/src/share/vm/interpreter/linkResolver.cpp
↓ open down ↓ 168 lines elided ↑ open up ↑
 169  169  }
 170  170  
 171  171  
 172  172  //------------------------------------------------------------------------------------------------------------------------
 173  173  // Method resolution
 174  174  //
 175  175  // According to JVM spec. $5.4.3c & $5.4.3d
 176  176  
 177  177  void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
 178  178    methodOop result_oop = klass->uncached_lookup_method(name, signature);
 179      -  if (EnableMethodHandles && result_oop != NULL) {
      179 +  if (EnableInvokeDynamic && result_oop != NULL) {
 180  180      switch (result_oop->intrinsic_id()) {
 181  181      case vmIntrinsics::_invokeExact:
 182  182      case vmIntrinsics::_invokeGeneric:
 183  183      case vmIntrinsics::_invokeDynamic:
 184  184        // Do not link directly to these.  The VM must produce a synthetic one using lookup_implicit_method.
 185  185        return;
 186  186      }
 187  187    }
 188  188    result = methodHandle(THREAD, result_oop);
 189  189  }
↓ open down ↓ 17 lines elided ↑ open up ↑
 207  207  
 208  208  void LinkResolver::lookup_method_in_interfaces(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
 209  209    instanceKlass *ik = instanceKlass::cast(klass());
 210  210    result = methodHandle(THREAD, ik->lookup_method_in_all_interfaces(name, signature));
 211  211  }
 212  212  
 213  213  void LinkResolver::lookup_implicit_method(methodHandle& result,
 214  214                                            KlassHandle klass, Symbol* name, Symbol* signature,
 215  215                                            KlassHandle current_klass,
 216  216                                            TRAPS) {
 217      -  if (EnableMethodHandles &&
      217 +  if (EnableInvokeDynamic &&
 218  218        klass() == SystemDictionary::MethodHandle_klass() &&
 219  219        methodOopDesc::is_method_handle_invoke_name(name)) {
 220  220      if (!THREAD->is_Compiler_thread() && !MethodHandles::enabled()) {
 221  221        // Make sure the Java part of the runtime has been booted up.
 222  222        klassOop natives = SystemDictionary::MethodHandleNatives_klass();
 223  223        if (natives == NULL || instanceKlass::cast(natives)->is_not_initialized()) {
 224  224          Symbol* natives_name = vmSymbols::java_lang_invoke_MethodHandleNatives();
 225  225          if (natives != NULL && AllowTransitionalJSR292)  natives_name = Klass::cast(natives)->name();
 226  226          SystemDictionary::resolve_or_fail(natives_name,
 227  227                                            Handle(),
↓ open down ↓ 902 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX