--- old/src/jdk/nashorn/api/scripting/NashornScriptEngine.java 2014-03-17 14:05:35.496384219 +0530 +++ new/src/jdk/nashorn/api/scripting/NashornScriptEngine.java 2014-03-17 14:05:35.312383301 +0530 @@ -57,9 +57,9 @@ import javax.script.ScriptEngineFactory; import javax.script.ScriptException; import javax.script.SimpleBindings; +import jdk.nashorn.internal.objects.Global; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ErrorManager; -import jdk.nashorn.internal.runtime.GlobalObject; import jdk.nashorn.internal.runtime.Property; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -99,7 +99,7 @@ private final boolean _global_per_engine; // This is the initial default Nashorn global object. // This is used as "shared" global if above option is true. - private final ScriptObject global; + private final Global global; // initialized bit late to be made 'final'. // Property object for "context" property of global object. private volatile Property contextProperty; @@ -264,7 +264,7 @@ public Object __noSuchProperty__(final Object self, final ScriptContext ctxt, final String name) { if (ctxt != null) { final int scope = ctxt.getAttributesScope(name); - final ScriptObject ctxtGlobal = getNashornGlobalFrom(ctxt); + final Global ctxtGlobal = getNashornGlobalFrom(ctxt); if (scope != -1) { return ScriptObjectMirror.unwrap(ctxt.getAttribute(name, scope), ctxtGlobal); } @@ -317,7 +317,7 @@ } ScriptObject realSelf = null; - ScriptObject realGlobal = null; + Global realGlobal = null; if(thiz == null) { // making interface out of global functions realSelf = realGlobal = getNashornGlobalFrom(context); @@ -346,7 +346,7 @@ } try { - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != realGlobal); try { if (globalChanged) { @@ -371,7 +371,7 @@ } // Retrieve nashorn Global object for a given ScriptContext object - private ScriptObject getNashornGlobalFrom(final ScriptContext ctxt) { + private Global getNashornGlobalFrom(final ScriptContext ctxt) { if (_global_per_engine) { // shared single global object for all ENGINE_SCOPE Bindings return global; @@ -380,18 +380,18 @@ final Bindings bindings = ctxt.getBindings(ScriptContext.ENGINE_SCOPE); // is this Nashorn's own Bindings implementation? if (bindings instanceof ScriptObjectMirror) { - final ScriptObject sobj = globalFromMirror((ScriptObjectMirror)bindings); - if (sobj != null) { - return sobj; + final Global glob = globalFromMirror((ScriptObjectMirror)bindings); + if (glob != null) { + return glob; } } // Arbitrary user Bindings implementation. Look for NASHORN_GLOBAL in it! Object scope = bindings.get(NASHORN_GLOBAL); if (scope instanceof ScriptObjectMirror) { - final ScriptObject sobj = globalFromMirror((ScriptObjectMirror)scope); - if (sobj != null) { - return sobj; + final Global glob = globalFromMirror((ScriptObjectMirror)scope); + if (glob != null) { + return glob; } } @@ -399,14 +399,14 @@ // Create new global instance mirror and associate with the Bindings. final ScriptObjectMirror mirror = createGlobalMirror(ctxt); bindings.put(NASHORN_GLOBAL, mirror); - return mirror.getScriptObject(); + return mirror.getHomeGlobal(); } // Retrieve nashorn Global object from a given ScriptObjectMirror - private ScriptObject globalFromMirror(final ScriptObjectMirror mirror) { + private Global globalFromMirror(final ScriptObjectMirror mirror) { ScriptObject sobj = mirror.getScriptObject(); - if (sobj instanceof GlobalObject && isOfContext(sobj, nashornContext)) { - return sobj; + if (sobj instanceof Global && isOfContext((Global)sobj, nashornContext)) { + return (Global)sobj; } return null; @@ -414,15 +414,15 @@ // Create a new ScriptObjectMirror wrapping a newly created Nashorn Global object private ScriptObjectMirror createGlobalMirror(final ScriptContext ctxt) { - final ScriptObject newGlobal = createNashornGlobal(ctxt); + final Global newGlobal = createNashornGlobal(ctxt); return new ScriptObjectMirror(newGlobal, newGlobal); } // Create a new Nashorn Global object - private ScriptObject createNashornGlobal(final ScriptContext ctxt) { - final ScriptObject newGlobal = AccessController.doPrivileged(new PrivilegedAction() { + private Global createNashornGlobal(final ScriptContext ctxt) { + final Global newGlobal = AccessController.doPrivileged(new PrivilegedAction() { @Override - public ScriptObject run() { + public Global run() { try { return nashornContext.newGlobal(); } catch (final RuntimeException e) { @@ -460,7 +460,7 @@ } // scripts should see "context" and "engine" as variables in the given global object - private void setContextVariables(final ScriptObject ctxtGlobal, final ScriptContext ctxt) { + private void setContextVariables(final Global ctxtGlobal, final ScriptContext ctxt) { // set "context" global variable via contextProperty - because this // property is non-writable contextProperty.setObjectValue(ctxtGlobal, ctxtGlobal, ctxt, false); @@ -470,7 +470,7 @@ } // if no arguments passed, expose it if (! (args instanceof ScriptObject)) { - args = ((GlobalObject)ctxtGlobal).wrapAsObject(args); + args = ctxtGlobal.wrapAsObject(args); ctxtGlobal.set("arguments", args, false); } } @@ -478,7 +478,7 @@ private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException { name.getClass(); // null check - ScriptObject invokeGlobal = null; + Global invokeGlobal = null; ScriptObjectMirror selfMirror = null; if (selfObject instanceof ScriptObjectMirror) { selfMirror = (ScriptObjectMirror)selfObject; @@ -489,7 +489,7 @@ } 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(); + final Global oldGlobal = Context.getGlobal(); invokeGlobal = oldGlobal; if (oldGlobal == null) { throw new IllegalArgumentException(getMessage("no.current.nashorn.global")); @@ -502,7 +502,7 @@ selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(selfObject, oldGlobal); } else if (selfObject == null) { // selfObject is null => global function call - final ScriptObject ctxtGlobal = getNashornGlobalFrom(context); + final Global ctxtGlobal = getNashornGlobalFrom(context); invokeGlobal = ctxtGlobal; selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(ctxtGlobal, ctxtGlobal); } @@ -532,11 +532,11 @@ return evalImpl(script, ctxt, getNashornGlobalFrom(ctxt)); } - private Object evalImpl(final ScriptFunction script, final ScriptContext ctxt, final ScriptObject ctxtGlobal) throws ScriptException { + private Object evalImpl(final ScriptFunction script, final ScriptContext ctxt, final Global ctxtGlobal) throws ScriptException { if (script == null) { return null; } - final ScriptObject oldGlobal = Context.getGlobal(); + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != ctxtGlobal); try { if (globalChanged) { @@ -558,7 +558,7 @@ } } - private static void throwAsScriptException(final Exception e, final ScriptObject global) throws ScriptException { + private static void throwAsScriptException(final Exception e, final Global global) throws ScriptException { if (e instanceof ScriptException) { throw (ScriptException)e; } else if (e instanceof NashornException) { @@ -582,7 +582,7 @@ return new CompiledScript() { @Override public Object eval(final ScriptContext ctxt) throws ScriptException { - final ScriptObject globalObject = getNashornGlobalFrom(ctxt); + final Global globalObject = getNashornGlobalFrom(ctxt); // Are we running the script in the correct global? if (func.getScope() == globalObject) { return evalImpl(func, ctxt, globalObject); @@ -602,8 +602,8 @@ return compileImpl(source, getNashornGlobalFrom(ctxt)); } - private ScriptFunction compileImpl(final Source source, final ScriptObject newGlobal) throws ScriptException { - final ScriptObject oldGlobal = Context.getGlobal(); + private ScriptFunction compileImpl(final Source source, final Global newGlobal) throws ScriptException { + final Global oldGlobal = Context.getGlobal(); final boolean globalChanged = (oldGlobal != newGlobal); try { if (globalChanged) { @@ -641,8 +641,7 @@ 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); + private static boolean isOfContext(final Global global, final Context context) { + return global.isOfContext(context); } }