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);
+ }
}