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