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

Print this page

        

*** 313,334 **** realSelf = realGlobal = getNashornGlobalFrom(context); } else if (thiz instanceof ScriptObjectMirror) { final ScriptObjectMirror mirror = (ScriptObjectMirror)thiz; realSelf = mirror.getScriptObject(); realGlobal = mirror.getHomeGlobal(); ! if (! realGlobal.isOfContext(nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } else if (thiz instanceof ScriptObject) { // called from script code. realSelf = (ScriptObject)thiz; realGlobal = Context.getGlobal(); if (realGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); } ! if (! realGlobal.isOfContext(nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } if (realSelf == null) { --- 313,334 ---- realSelf = realGlobal = getNashornGlobalFrom(context); } else if (thiz instanceof ScriptObjectMirror) { final ScriptObjectMirror mirror = (ScriptObjectMirror)thiz; realSelf = mirror.getScriptObject(); realGlobal = mirror.getHomeGlobal(); ! if (! isOfContext(realGlobal, nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } else if (thiz instanceof ScriptObject) { // called from script code. realSelf = (ScriptObject)thiz; realGlobal = Context.getGlobal(); if (realGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); } ! if (! isOfContext(realGlobal, nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } if (realSelf == null) {
*** 392,402 **** } // Retrieve nashorn Global object from a given ScriptObjectMirror private ScriptObject globalFromMirror(final ScriptObjectMirror mirror) { ScriptObject sobj = mirror.getScriptObject(); ! if (sobj instanceof GlobalObject && sobj.isOfContext(nashornContext)) { return sobj; } return null; } --- 392,402 ---- } // Retrieve nashorn Global object from a given ScriptObjectMirror private ScriptObject globalFromMirror(final ScriptObjectMirror mirror) { ScriptObject sobj = mirror.getScriptObject(); ! if (sobj instanceof GlobalObject && isOfContext(sobj, nashornContext)) { return sobj; } return null; }
*** 468,489 **** name.getClass(); // null check ScriptObjectMirror selfMirror = null; if (selfObject instanceof ScriptObjectMirror) { selfMirror = (ScriptObjectMirror)selfObject; ! if (! selfMirror.getHomeGlobal().isOfContext(nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } else if (selfObject instanceof ScriptObject) { // invokeMethod called from script code - in which case we may get 'naked' ScriptObject // Wrap it with oldGlobal to make a ScriptObjectMirror for the same. final ScriptObject oldGlobal = Context.getGlobal(); if (oldGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); } ! if (! oldGlobal.isOfContext(nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(selfObject, oldGlobal); } else if (selfObject == null) { --- 468,489 ---- name.getClass(); // null check ScriptObjectMirror selfMirror = null; if (selfObject instanceof ScriptObjectMirror) { selfMirror = (ScriptObjectMirror)selfObject; ! if (! isOfContext(selfMirror.getHomeGlobal(), nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } } else if (selfObject instanceof ScriptObject) { // invokeMethod called from script code - in which case we may get 'naked' ScriptObject // Wrap it with oldGlobal to make a ScriptObjectMirror for the same. final ScriptObject oldGlobal = Context.getGlobal(); if (oldGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); } ! if (! isOfContext(oldGlobal, nashornContext)) { throw new IllegalArgumentException(getMessage("script.object.from.another.engine")); } selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(selfObject, oldGlobal); } else if (selfObject == null) {
*** 615,620 **** --- 615,625 ---- return false; } } return true; } + + private static boolean isOfContext(final ScriptObject global, final Context context) { + assert global instanceof GlobalObject: "Not a Global object"; + return ((GlobalObject)global).isOfContext(context); + } }