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

Print this page




  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.nashorn.api.scripting;
  27 
  28 import static jdk.nashorn.internal.runtime.Source.sourceFor;
  29 
  30 import java.io.IOException;
  31 import java.io.Reader;
  32 import java.lang.invoke.MethodHandles;
  33 import java.lang.reflect.Method;
  34 import java.lang.reflect.Modifier;
  35 import java.security.AccessControlContext;
  36 import java.security.AccessController;
  37 import java.security.Permissions;
  38 import java.security.PrivilegedAction;
  39 import java.security.ProtectionDomain;
  40 import java.text.MessageFormat;
  41 import java.util.Locale;

  42 import java.util.ResourceBundle;
  43 import javax.script.AbstractScriptEngine;
  44 import javax.script.Bindings;
  45 import javax.script.Compilable;
  46 import javax.script.CompiledScript;
  47 import javax.script.Invocable;
  48 import javax.script.ScriptContext;
  49 import javax.script.ScriptEngine;
  50 import javax.script.ScriptEngineFactory;
  51 import javax.script.ScriptException;
  52 import javax.script.SimpleBindings;
  53 import jdk.nashorn.internal.objects.Global;
  54 import jdk.nashorn.internal.runtime.Context;
  55 import jdk.nashorn.internal.runtime.ErrorManager;
  56 import jdk.nashorn.internal.runtime.ScriptFunction;
  57 import jdk.nashorn.internal.runtime.ScriptObject;
  58 import jdk.nashorn.internal.runtime.ScriptRuntime;
  59 import jdk.nashorn.internal.runtime.Source;
  60 import jdk.nashorn.internal.runtime.linker.JavaAdapterFactory;
  61 import jdk.nashorn.internal.runtime.options.Options;


 343             @Override
 344             public Global run() {
 345                 try {
 346                     return nashornContext.newGlobal();
 347                 } catch (final RuntimeException e) {
 348                     if (Context.DEBUG) {
 349                         e.printStackTrace();
 350                     }
 351                     throw e;
 352                 }
 353             }
 354         }, CREATE_GLOBAL_ACC_CTXT);
 355 
 356         nashornContext.initGlobal(newGlobal, this);
 357         newGlobal.setScriptContext(ctxt);
 358 
 359         return newGlobal;
 360     }
 361 
 362     private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException {
 363         name.getClass(); // null check
 364         assert !(selfObject instanceof ScriptObject) : "raw ScriptObject not expected here";
 365 
 366         Global invokeGlobal = null;
 367         ScriptObjectMirror selfMirror = null;
 368         if (selfObject instanceof ScriptObjectMirror) {
 369             selfMirror = (ScriptObjectMirror)selfObject;
 370             if (! isOfContext(selfMirror.getHomeGlobal(), nashornContext)) {
 371                 throw new IllegalArgumentException(getMessage("script.object.from.another.engine"));
 372             }
 373             invokeGlobal = selfMirror.getHomeGlobal();
 374         } else if (selfObject == null) {
 375             // selfObject is null => global function call
 376             final Global ctxtGlobal = getNashornGlobalFrom(context);
 377             invokeGlobal = ctxtGlobal;
 378             selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(ctxtGlobal, ctxtGlobal);
 379         }
 380 
 381         if (selfMirror != null) {
 382             try {
 383                 return ScriptObjectMirror.translateUndefined(selfMirror.callMember(name, args));




  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.nashorn.api.scripting;
  27 
  28 import static jdk.nashorn.internal.runtime.Source.sourceFor;
  29 
  30 import java.io.IOException;
  31 import java.io.Reader;
  32 import java.lang.invoke.MethodHandles;
  33 import java.lang.reflect.Method;
  34 import java.lang.reflect.Modifier;
  35 import java.security.AccessControlContext;
  36 import java.security.AccessController;
  37 import java.security.Permissions;
  38 import java.security.PrivilegedAction;
  39 import java.security.ProtectionDomain;
  40 import java.text.MessageFormat;
  41 import java.util.Locale;
  42 import java.util.Objects;
  43 import java.util.ResourceBundle;
  44 import javax.script.AbstractScriptEngine;
  45 import javax.script.Bindings;
  46 import javax.script.Compilable;
  47 import javax.script.CompiledScript;
  48 import javax.script.Invocable;
  49 import javax.script.ScriptContext;
  50 import javax.script.ScriptEngine;
  51 import javax.script.ScriptEngineFactory;
  52 import javax.script.ScriptException;
  53 import javax.script.SimpleBindings;
  54 import jdk.nashorn.internal.objects.Global;
  55 import jdk.nashorn.internal.runtime.Context;
  56 import jdk.nashorn.internal.runtime.ErrorManager;
  57 import jdk.nashorn.internal.runtime.ScriptFunction;
  58 import jdk.nashorn.internal.runtime.ScriptObject;
  59 import jdk.nashorn.internal.runtime.ScriptRuntime;
  60 import jdk.nashorn.internal.runtime.Source;
  61 import jdk.nashorn.internal.runtime.linker.JavaAdapterFactory;
  62 import jdk.nashorn.internal.runtime.options.Options;


 344             @Override
 345             public Global run() {
 346                 try {
 347                     return nashornContext.newGlobal();
 348                 } catch (final RuntimeException e) {
 349                     if (Context.DEBUG) {
 350                         e.printStackTrace();
 351                     }
 352                     throw e;
 353                 }
 354             }
 355         }, CREATE_GLOBAL_ACC_CTXT);
 356 
 357         nashornContext.initGlobal(newGlobal, this);
 358         newGlobal.setScriptContext(ctxt);
 359 
 360         return newGlobal;
 361     }
 362 
 363     private Object invokeImpl(final Object selfObject, final String name, final Object... args) throws ScriptException, NoSuchMethodException {
 364         Objects.requireNonNull(name);
 365         assert !(selfObject instanceof ScriptObject) : "raw ScriptObject not expected here";
 366 
 367         Global invokeGlobal = null;
 368         ScriptObjectMirror selfMirror = null;
 369         if (selfObject instanceof ScriptObjectMirror) {
 370             selfMirror = (ScriptObjectMirror)selfObject;
 371             if (! isOfContext(selfMirror.getHomeGlobal(), nashornContext)) {
 372                 throw new IllegalArgumentException(getMessage("script.object.from.another.engine"));
 373             }
 374             invokeGlobal = selfMirror.getHomeGlobal();
 375         } else if (selfObject == null) {
 376             // selfObject is null => global function call
 377             final Global ctxtGlobal = getNashornGlobalFrom(context);
 378             invokeGlobal = ctxtGlobal;
 379             selfMirror = (ScriptObjectMirror)ScriptObjectMirror.wrap(ctxtGlobal, ctxtGlobal);
 380         }
 381 
 382         if (selfMirror != null) {
 383             try {
 384                 return ScriptObjectMirror.translateUndefined(selfMirror.callMember(name, args));