< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java

Print this page

        

@@ -664,11 +664,10 @@
         // Set our local variable index
         final int globalRestoringRunnableVar = nextLocalVar++;
 
         // Load the creatingGlobal object
         loadField(mv, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
-
         // stack: [creatingGlobal]
         SET_GLOBAL.invoke(mv);
         // stack: [runnable]
         mv.visitVarInsn(ASTORE, globalRestoringRunnableVar);
         // stack: []

@@ -725,10 +724,15 @@
             // stack: [hasOwnToString]
             mv.ifeq(defaultBehavior);
         }
 
         loadField(mv, DELEGATE_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
+        //For the cases like scripted overridden methods invoked from super constructors get adapter global/delegate fields as null, since we
+        //cannot set these fields before invoking super constructor better solution is opt out of scripted overridden method if global/delegate fields
+        //are null and invoke super method instead 
+        mv.ifnull(defaultBehavior);
+        loadField(mv, DELEGATE_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR);
         mv.dup();
         // stack: [delegate, delegate]
         final String encodedName = NameCodec.encode(name);
         mv.visitInvokeDynamicInsn(encodedName,
                 GET_METHOD_PROPERTY_METHOD_DESCRIPTOR, BOOTSTRAP_HANDLE,
< prev index next >