src/jdk/nashorn/api/scripting/NashornScriptEngine.java

Print this page

        

@@ -319,12 +319,13 @@
     }
 
     private ScriptObject getNashornGlobalFrom(final ScriptContext ctxt) {
         final Bindings bindings = ctxt.getBindings(ScriptContext.ENGINE_SCOPE);
         if (bindings instanceof ScriptObjectMirror) {
+            final ScriptObjectMirror mirror = (ScriptObjectMirror)bindings;
              ScriptObject sobj = ((ScriptObjectMirror)bindings).getScriptObject();
-             if (sobj instanceof GlobalObject) {
+            if (sobj instanceof GlobalObject && sobj.isOfContext(nashornContext)) {
                  return sobj;
              }
         }
 
         // didn't find global object from context given - return the engine-wide global

@@ -400,13 +401,15 @@
         Object args = ScriptObjectMirror.unwrap(ctxt.getAttribute("arguments"), ctxtGlobal);
         if (args == null || args == UNDEFINED) {
             args = ScriptRuntime.EMPTY_ARRAY;
         }
         // if no arguments passed, expose it
+        if (! (args instanceof ScriptObject)) {
         args = ((GlobalObject)ctxtGlobal).wrapAsObject(args);
         ctxtGlobal.set("arguments", args, false);
     }
+    }
 
     private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException {
         name.getClass(); // null check
 
         ScriptObjectMirror selfMirror = null;