Class Context
- All Implemented Interfaces:
Closeable
,AutoCloseable
Before executing a script, an instance of Context must be created and associated with the
thread that will be executing the script. The Context will be used to store information about the
executing of the script such as the call stack. Contexts are associated with the current thread
using the call(ContextAction)
or enter()
methods.
Different forms of script execution are supported. Scripts may be evaluated from the source directly, or first compiled and then later executed. Interactive execution is also supported.
Some aspects of script execution, such as type conversions and object creation, may be accessed directly through methods of Context.
- Author:
- Norris Boyd, Brendan Eich
- See Also:
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionstatic final Object[]
Convenient value to use as zero-length array of objects.static final String
static final int
Control if dynamic scope should be used for name access.static final int
Control if support for E4X(ECMAScript for XML) extension is available.static final int
Configure whether the entries in a Java Map can be accessed by properties.static final int
Configure the XMLProcessor to parse XML with security features or not.static final int
Enables enhanced access to Java.static final int
If set, then the order of property key enumeration will be first numeric keys in numeric order, followed by string keys in order of creation, and finally Symbol keys, as specified in ES6.static final int
If set, then all integer numbers will be returned without decimal place.static final int
Internationalization API implementation (see https://tc39.github.io/ecma402) can be activated using this feature.static final int
TypedArray buffer uses little/big endian depending on the platform.static final int
When the feature is on Rhino will add a "fileName" and "lineNumber" properties to Error objects automatically.static final int
Control if member expression as function name extension is available.static final int
Controls behaviour ofDate.prototype.getYear()
.static final int
Defines how an undefined "this" parameter is handled in certain calls.static final int
Control if properties__proto__
and__parent__
are treated specially.static final int
Deprecated.In previous releases, this name was given to FEATURE_PARENT_PROTO_PROPERTIES.static final int
Control if reserved keywords are treated as identifiers.static final int
Control if strict eval mode is enabled.static final int
Controls whether JS 1.5 'strict mode' is enabled.static final int
Control if strict variable mode is enabled.static final int
If set, then all objects will have a thread-safe property map.static final int
Control iftoString()
should returns the same result astoSource()
when applied to objects and arrays.static final int
Enables access to JavaScript features from ECMAscript 6 that are present in JavaScript engines that do not yet support version 6, such as V8.static final int
Controls whether a warning should be treated as an error.static final String
static final int
JavaScript 1.0static final int
JavaScript 1.1static final int
JavaScript 1.2static final int
JavaScript 1.3static final int
JavaScript 1.4static final int
JavaScript 1.5static final int
JavaScript 1.6static final int
JavaScript 1.7static final int
JavaScript 1.8static final int
The default version.static final int
ECMAScript 6.static final int
The unknown version. -
Constructor Summary
ModifierConstructorDescriptionContext()
Deprecated.this constructor is deprecated because it creates a dependency on a static singleton context factory.protected
Context
(ContextFactory factory) Creates a new context. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addActivationName
(String name) Add a name to the list of names forcing the creation of real activation objects for functions.static void
addContextListener
(ContextListener listener) Deprecated.final void
Register an object to receive notifications when a bound property has changedstatic <T> T
call
(ContextAction<T> action) Deprecated.useContextFactory.call(ContextAction)
instead as this method relies on usage of a static singleton "global" ContextFactory.static Object
call
(ContextFactory factory, Callable callable, Scriptable scope, Scriptable thisObj, Object[] args) CallCallable.call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args)
using the Context instance associated with the current thread.callFunctionWithContinuations
(Callable function, Scriptable scope, Object[] args) Call function that may pause execution by capturing a continuation.Capture a continuation from the current execution.static void
checkLanguageVersion
(int version) static void
checkOptimizationLevel
(int optimizationLevel) void
close()
final Function
compileFunction
(Scriptable scope, String source, String sourceName, int lineno, Object securityDomain) Compile a JavaScript function.protected Object
compileImpl
(Scriptable scope, String sourceString, String sourceName, int lineno, Object securityDomain, boolean returnFunction, Evaluator compiler, ErrorReporter compilationErrorReporter) final Script
compileReader
(Reader in, String sourceName, int lineno, Object securityDomain) Compiles the source in the given reader.final Script
compileReader
(Scriptable scope, Reader in, String sourceName, int lineno, Object securityDomain) Deprecated.final Script
compileString
(String source, String sourceName, int lineno, Object securityDomain) Compiles the source in the given string.createClassLoader
(ClassLoader parent) Create class loader for generated classes.final String
decompileFunction
(Function fun, int indent) Decompile a JavaScript Function.final String
decompileFunctionBody
(Function fun, int indent) Decompile the body of a JavaScript Function.final String
decompileScript
(Script script, int indent) Decompile the script.void
enqueueMicrotask
(Runnable task) Add a task that will be executed at the end of the current operation.static Context
enter()
Same as callingContextFactory.enterContext()
on the global ContextFactory instance.static Context
Deprecated.useContextFactory.enterContext(Context)
instead as this method relies on usage of a static singleton "global" ContextFactory.final Object
evaluateReader
(Scriptable scope, Reader in, String sourceName, int lineno, Object securityDomain) Evaluate a reader as JavaScript source.final Object
evaluateString
(Scriptable scope, String source, String sourceName, int lineno, Object securityDomain) Evaluate a JavaScript source string.executeScriptWithContinuations
(Script script, Scriptable scope) Execute script that may pause execution by capturing a continuation.static void
exit()
Exit a block of code requiring a Context.final ClassLoader
static Context
Get the current Context.static DebuggableScript
getDebuggableView
(Script script) Return DebuggableScript instance if any associated with the script.final Debugger
Return the current debugger.final Object
Return the debugger context data associated with current context.Returns an object which specifies an E4X implementation to use within thisContext
.final Object[]
getElements
(Scriptable object) Get the elements of a JavaScript array.final ErrorReporter
Get the current error reporter.final ContextFactory
ReturnContextFactory
instance used to create this Context.final String
Get the implementation version.final int
Get threshold of executed instructions counter that triggers call toobserveInstructionCount()
.Returns the javaToJSONConverter for this Context.final int
Get the current language version.final Locale
Get the current locale.final int
Returns the maximum stack depth (in terms of number of call frames) allowed in a single invocation of interpreter.final int
Get the current optimization level.final Object
getThreadLocal
(Object key) Get a value corresponding to a key.final TimeZone
Get the current timezone.static Object
Get the singleton object that represents the JavaScript Undefined value.Return the object used to track unhandled promise rejections.final WrapFactory
Return the current WrapFactory, or null if none is defined.boolean
hasFeature
(int featureIndex) Controls certain aspects of script semantics.final ScriptableObject
Initialize the standard objects, leaving out those that offer access directly to Java classes.final Scriptable
Initialize the standard objects, leaving out those that offer access directly to Java classes.initSafeStandardObjects
(ScriptableObject scope, boolean sealed) Initialize the standard objects, leaving out those that offer access directly to Java classes.final ScriptableObject
Initialize the standard objects.final Scriptable
Initialize the standard objects.initStandardObjects
(ScriptableObject scope, boolean sealed) Initialize the standard objects.final boolean
isActivationNeeded
(String name) Check whether the name is in the list of names of objects forcing the creation of activation objects.static boolean
boolean
Determine if observer counts should be generated.final boolean
Tell whether debug information is being generated.final boolean
final boolean
Tell whether source information is being generated.final boolean
isSealed()
Checks if this is a sealed Context.final boolean
static boolean
isValidLanguageVersion
(int version) static boolean
isValidOptimizationLevel
(int optimizationLevel) static Object
javaToJS
(Object value, Scriptable scope) Convenient method to convert java value to its closest representation in JavaScript.static Object
javaToJS
(Object value, Scriptable scope, Context cx) Convenient method to convert java value to its closest representation in JavaScript.static Object
Convert a JavaScript value into the desired type.newArray
(Scriptable scope, int length) Create an array with a specified initial length.newArray
(Scriptable scope, Object[] elements) Create an array with a set of initial elements.newObject
(Scriptable scope) Create a new JavaScript object.newObject
(Scriptable scope, String constructorName) Create a new JavaScript object by executing the named constructor.newObject
(Scriptable scope, String constructorName, Object[] args) Creates a new JavaScript object by executing the named constructor.protected void
observeInstructionCount
(int instructionCount) Allow application to monitor counter of executed script instructions in Context subclasses.void
Run all the microtasks for the current context to completion.final void
putThreadLocal
(Object key, Object value) Put a value that can later be retrieved using a given key.void
removeActivationName
(String name) Remove a name from the list of names forcing the creation of real activation objects for functions.static void
removeContextListener
(ContextListener listener) Deprecated.final void
Remove an object from the list of objects registered to receive notification of changes to a bounded propertyfinal void
removeThreadLocal
(Object key) Remove values from thread-local storage.static void
reportError
(String message) Report an error using the error reporter for the current thread.static void
reportError
(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report an error using the error reporter for the current thread.static EvaluatorException
reportRuntimeError
(String message) Report a runtime error using the error reporter for the current thread.static EvaluatorException
reportRuntimeError
(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report a runtime error using the error reporter for the current thread.static void
reportWarning
(String message) Report a warning using the error reporter for the current thread.static void
reportWarning
(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report a warning using the error reporter for the current thread.static void
reportWarning
(String message, Throwable t) resumeContinuation
(Object continuation, Scriptable scope, Object functionResult) Restarts execution of the JavaScript suspended at the call tocaptureContinuation()
.final void
final void
setApplicationClassLoader
(ClassLoader loader) static void
setCachingEnabled
(boolean cachingEnabled) Deprecated.final void
setClassShutter
(ClassShutter shutter) Set the LiveConnect access filter for this context.final void
setDebugger
(Debugger debugger, Object contextData) Set the associated debugger.final ErrorReporter
setErrorReporter
(ErrorReporter reporter) Change the current error reporter.void
setGenerateObserverCount
(boolean generateObserverCount) Turn on or off generation of code with callbacks to track the count of executed instructions.final void
setGeneratingDebug
(boolean generatingDebug) Specify whether or not debug information should be generated.final void
setGeneratingSource
(boolean generatingSource) Specify whether or not source information should be generated.final void
setInstructionObserverThreshold
(int threshold) Set threshold of executed instructions counter that triggers call toobserveInstructionCount()
.void
setJavaToJSONConverter
(UnaryOperator<Object> javaToJSONConverter) Sets the javaToJSONConverter for this Context.void
setLanguageVersion
(int version) Set the language version.final Locale
Set the current locale.final void
setMaximumInterpreterStackDepth
(int max) Sets the maximum stack depth (in terms of number of call frames) allowed in a single invocation of interpreter.final void
setOptimizationLevel
(int optimizationLevel) Set the current optimization level.final void
setSecurityController
(SecurityController controller) Set the security controller for this context.final TimeZone
setTimeZone
(TimeZone tz) Set the current timezone.void
setTrackUnhandledPromiseRejections
(boolean track) Control whether to track unhandled promise rejections.final void
setWrapFactory
(WrapFactory wrapFactory) Set a WrapFactory for this Context.final boolean
stringIsCompilableUnit
(String source) Check whether a string is ready to be compiled.static RuntimeException
Rethrow the exception wrapping it as the script runtime exception.static boolean
Convert the value to a JavaScript boolean value.static double
Convert the value to a JavaScript Number value.static Scriptable
toObject
(Object value, Scriptable scope) Convert the value to an JavaScript object value.static Scriptable
toObject
(Object value, Scriptable scope, Class<?> staticType) Deprecated.static String
Convert the value to a JavaScript String value.static Object
Deprecated.final void
Unseal previously sealed Context object.
-
Field Details
-
VERSION_UNKNOWN
public static final int VERSION_UNKNOWNThe unknown version.Be aware, this version will not support many of the newer language features and will not change in the future.
Please use one of the other constants like VERSION_ES6 to get support for recent language features.
- See Also:
-
VERSION_DEFAULT
public static final int VERSION_DEFAULTThe default version.- See Also:
-
VERSION_1_0
public static final int VERSION_1_0JavaScript 1.0- See Also:
-
VERSION_1_1
public static final int VERSION_1_1JavaScript 1.1- See Also:
-
VERSION_1_2
public static final int VERSION_1_2JavaScript 1.2- See Also:
-
VERSION_1_3
public static final int VERSION_1_3JavaScript 1.3- See Also:
-
VERSION_1_4
public static final int VERSION_1_4JavaScript 1.4- See Also:
-
VERSION_1_5
public static final int VERSION_1_5JavaScript 1.5- See Also:
-
VERSION_1_6
public static final int VERSION_1_6JavaScript 1.6- See Also:
-
VERSION_1_7
public static final int VERSION_1_7JavaScript 1.7- See Also:
-
VERSION_1_8
public static final int VERSION_1_8JavaScript 1.8- See Also:
-
VERSION_ES6
public static final int VERSION_ES6ECMAScript 6.- See Also:
-
FEATURE_NON_ECMA_GET_YEAR
public static final int FEATURE_NON_ECMA_GET_YEARControls behaviour ofDate.prototype.getYear()
. IfhasFeature(FEATURE_NON_ECMA_GET_YEAR)
returns true, Date.prototype.getYear subtructs 1900 only if 1900 <= date < 2000. The default behavior ofhasFeature(int)
is always to subtruct 1900 as rquired by ECMAScript B.2.4.- See Also:
-
FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME
public static final int FEATURE_MEMBER_EXPR_AS_FUNCTION_NAMEControl if member expression as function name extension is available. IfhasFeature(FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME)
returns true, allowfunction memberExpression(args) { body }
to be syntax sugar formemberExpression = function(args) { body }
, when memberExpression is not a simple identifier. See ECMAScript-262, section 11.2 for definition of memberExpression. By defaulthasFeature(int)
returns false.- See Also:
-
FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER
public static final int FEATURE_RESERVED_KEYWORD_AS_IDENTIFIERControl if reserved keywords are treated as identifiers. IfhasFeature(RESERVED_KEYWORD_AS_IDENTIFIER)
returns true, treat future reserved keyword (see Ecma-262, section 7.5.3) as ordinary identifiers but warn about this usage.By default
hasFeature(int)
returns false.- See Also:
-
FEATURE_TO_STRING_AS_SOURCE
public static final int FEATURE_TO_STRING_AS_SOURCEControl iftoString()
should returns the same result astoSource()
when applied to objects and arrays. IfhasFeature(FEATURE_TO_STRING_AS_SOURCE)
returns true, callingtoString()
on JS objects gives the same result as callingtoSource()
. That is it returns JS source with code to create an object with all enumerable fields of the original object instead of printing[object result of
.Scriptable.getClassName()
]By default
hasFeature(int)
returns true only if the current JS version is set toVERSION_1_2
.- See Also:
-
FEATURE_PARENT_PROTO_PROPERTIES
public static final int FEATURE_PARENT_PROTO_PROPERTIESControl if properties__proto__
and__parent__
are treated specially. IfhasFeature(FEATURE_PARENT_PROTO_PROPERTIES)
returns true, treat__parent__
and__proto__
as special properties.The properties allow to query and set scope and prototype chains for the objects. The special meaning of the properties is available only when they are used as the right hand side of the dot operator. For example, while
x.__proto__ = y
changes the prototype chain of the objectx
to point toy
,x["__proto__"] = y
simply assigns a new value to the property__proto__
inx
even when the feature is on.By default
hasFeature(int)
returns true.- See Also:
-
FEATURE_PARENT_PROTO_PROPRTIES
Deprecated.In previous releases, this name was given to FEATURE_PARENT_PROTO_PROPERTIES.- See Also:
-
FEATURE_E4X
public static final int FEATURE_E4XControl if support for E4X(ECMAScript for XML) extension is available. If hasFeature(FEATURE_E4X) returns true, the XML syntax is available.By default
hasFeature(int)
returns true if the current JS version is set toVERSION_DEFAULT
or is at leastVERSION_1_6
.- Since:
- 1.6 Release 1
- See Also:
-
FEATURE_DYNAMIC_SCOPE
public static final int FEATURE_DYNAMIC_SCOPEControl if dynamic scope should be used for name access. If hasFeature(FEATURE_DYNAMIC_SCOPE) returns true, then the name lookup during name resolution will use the top scope of the script or function which is at the top of JS execution stack instead of the top scope of the script or function from the current stack frame if the top scope of the top stack frame contains the top scope of the current stack frame on its prototype chain.This is useful to define shared scope containing functions that can be called from scripts and functions using private scopes.
By default
hasFeature(int)
returns false.- Since:
- 1.6 Release 1
- See Also:
-
FEATURE_STRICT_VARS
public static final int FEATURE_STRICT_VARSControl if strict variable mode is enabled. When the feature is on Rhino reports runtime errors if assignment to a global variable that does not exist is executed. When the feature is off such assignments create a new variable in the global scope as required by ECMA 262.By default
hasFeature(int)
returns false.- Since:
- 1.6 Release 1
- See Also:
-
FEATURE_STRICT_EVAL
public static final int FEATURE_STRICT_EVALControl if strict eval mode is enabled. When the feature is on Rhino reports runtime errors if non-string argument is passed to the eval function. When the feature is off eval simply return non-string argument as is without performing any evaluation as required by ECMA 262.By default
hasFeature(int)
returns false.- Since:
- 1.6 Release 1
- See Also:
-
FEATURE_LOCATION_INFORMATION_IN_ERROR
public static final int FEATURE_LOCATION_INFORMATION_IN_ERRORWhen the feature is on Rhino will add a "fileName" and "lineNumber" properties to Error objects automatically. When the feature is off, you have to explicitly pass them as the second and third argument to the Error constructor. Note that neither behavior is fully ECMA 262 compliant (as 262 doesn't specify a three-arg constructor), but keeping the feature off results in Error objects that don't have additional non-ECMA properties when constructed using the ECMA-defined single-arg constructor and is thus desirable if a stricter ECMA compliance is desired, specifically adherence to the point 15.11.5. of the standard.By default
hasFeature(int)
returns false.- Since:
- 1.6 Release 6
- See Also:
-
FEATURE_STRICT_MODE
public static final int FEATURE_STRICT_MODEControls whether JS 1.5 'strict mode' is enabled. When the feature is on, Rhino reports more than a dozen different warnings. When the feature is off, these warnings are not generated. FEATURE_STRICT_MODE implies FEATURE_STRICT_VARS and FEATURE_STRICT_EVAL.By default
hasFeature(int)
returns false.- Since:
- 1.6 Release 6
- See Also:
-
FEATURE_WARNING_AS_ERROR
public static final int FEATURE_WARNING_AS_ERRORControls whether a warning should be treated as an error.- Since:
- 1.6 Release 6
- See Also:
-
FEATURE_ENHANCED_JAVA_ACCESS
public static final int FEATURE_ENHANCED_JAVA_ACCESSEnables enhanced access to Java. Specifically, controls whether private and protected members can be accessed, and whether scripts can catch all Java exceptions.Note that this feature should only be enabled for trusted scripts.
By default
hasFeature(int)
returns false.- Since:
- 1.7 Release 1
- See Also:
-
FEATURE_V8_EXTENSIONS
public static final int FEATURE_V8_EXTENSIONSEnables access to JavaScript features from ECMAscript 6 that are present in JavaScript engines that do not yet support version 6, such as V8. This includes support for typed arrays. Default is true.- Since:
- 1.7 Release 3
- See Also:
-
FEATURE_OLD_UNDEF_NULL_THIS
public static final int FEATURE_OLD_UNDEF_NULL_THISDefines how an undefined "this" parameter is handled in certain calls. Previously Rhino would convert an undefined "this" to null, whereas recent specs call for it to be treated differently. Default is to be set if language version <= 1.7.- Since:
- 1.7.7
- See Also:
-
FEATURE_ENUMERATE_IDS_FIRST
public static final int FEATURE_ENUMERATE_IDS_FIRSTIf set, then the order of property key enumeration will be first numeric keys in numeric order, followed by string keys in order of creation, and finally Symbol keys, as specified in ES6. Default is true for language version >= "ES6" and false otherwise.- Since:
- 1.7.7.1
- See Also:
-
FEATURE_THREAD_SAFE_OBJECTS
public static final int FEATURE_THREAD_SAFE_OBJECTSIf set, then all objects will have a thread-safe property map. (Note that this doesn't make everything else that they do thread-safe -- that depends on the specific implementation. If not set, users should not share Rhino objects between threads, unless the "sync" function is used to wrap them with an explicit synchronizer. The default is false, which means that by default, individual objects are not thread-safe.- Since:
- 1.7.8
- See Also:
-
FEATURE_INTEGER_WITHOUT_DECIMAL_PLACE
public static final int FEATURE_INTEGER_WITHOUT_DECIMAL_PLACEIf set, then all integer numbers will be returned without decimal place. For instance assume there is a function like this:function foo() {return 5;}
5 will be returned if feature is set, 5.0 otherwise.- See Also:
-
FEATURE_LITTLE_ENDIAN
public static final int FEATURE_LITTLE_ENDIANTypedArray buffer uses little/big endian depending on the platform. The default is big endian for Rhino.- Since:
- 1.7 Release 11
- See Also:
-
FEATURE_ENABLE_XML_SECURE_PARSING
public static final int FEATURE_ENABLE_XML_SECURE_PARSINGConfigure the XMLProcessor to parse XML with security features or not. Security features include not fetching remote entity references and disabling XIncludes- Since:
- 1.7 Release 12
- See Also:
-
FEATURE_ENABLE_JAVA_MAP_ACCESS
public static final int FEATURE_ENABLE_JAVA_MAP_ACCESSConfigure whether the entries in a Java Map can be accessed by properties.Not enabled:
var map = new java.util.HashMap(); map.put('foo', 1); map.foo; // undefined
Enabled:
var map = new java.util.HashMap(); map.put('foo', 1); map.foo; // 1
WARNING: This feature is similar to the one in Nashorn, but incomplete.
1. A entry has priority over method.
map.put("put", "abc"); map.put; // abc map.put("put", "efg"); // ERROR
2. The distinction between numeric keys and string keys is ambiguous.
map.put('1', 123); map['1']; // Not found. This means `map[1]`.
- Since:
- 1.7 Release 14
- See Also:
-
FEATURE_INTL_402
public static final int FEATURE_INTL_402Internationalization API implementation (see https://tc39.github.io/ecma402) can be activated using this feature.- Since:
- 1.7 Release 15
- See Also:
-
languageVersionProperty
- See Also:
-
errorReporterProperty
- See Also:
-
emptyArgs
Convenient value to use as zero-length array of objects.
-
-
Constructor Details
-
Context
Deprecated.this constructor is deprecated because it creates a dependency on a static singleton context factory. UseContextFactory.enter()
orContextFactory.call(ContextAction)
instead. If you subclass this class, consider usingContext(ContextFactory)
constructor instead in the subclasses' constructors.Creates a new Context. The context will be associated with theglobal context factory
.Note that the Context must be associated with a thread before it can be used to execute a script.
-
Context
Creates a new context. Provided as a preferred super constructor for subclasses in place of the deprecated default public constructor.- Parameters:
factory
- the context factory associated with this context (most likely, the one that created the context). Can not be null. The context features are inherited from the factory, and the context will also otherwise use its factory's services.- Throws:
IllegalArgumentException
- if factory parameter is null.
-
-
Method Details
-
getCurrentContext
Get the current Context.The current Context is per-thread; this method looks up the Context associated with the current thread.
- Returns:
- the Context associated with the current thread, or null if no context is associated with the current thread.
- See Also:
-
enter
Same as callingContextFactory.enterContext()
on the global ContextFactory instance.- Returns:
- a Context associated with the current thread
- See Also:
-
enter
Deprecated.useContextFactory.enterContext(Context)
instead as this method relies on usage of a static singleton "global" ContextFactory.Get a Context associated with the current thread, using the given Context if need be.The same as
enter()
except thatcx
is associated with the current thread and returned if the current thread has no associated context andcx
is not associated with any other thread.- Parameters:
cx
- a Context to associate with the thread if possible- Returns:
- a Context associated with the current thread
- See Also:
-
exit
public static void exit()Exit a block of code requiring a Context.Calling
exit()
will remove the association between the current thread and a Context if the prior call toContextFactory.enterContext()
on this thread newly associated a Context with this thread. Once the current thread no longer has an associated Context, it cannot be used to execute JavaScript until it is again associated with a Context.- See Also:
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
call
Deprecated.useContextFactory.call(ContextAction)
instead as this method relies on usage of a static singleton "global" ContextFactory.CallContextAction.run(Context cx)
using the Context instance associated with the current thread. If no Context is associated with the thread, thenContextFactory.getGlobal().makeContext()
will be called to construct new Context instance. The instance will be temporary associated with the thread during call toContextAction.run(Context)
.- Returns:
- The result of
ContextAction.run(Context)
.
-
call
public static Object call(ContextFactory factory, Callable callable, Scriptable scope, Scriptable thisObj, Object[] args) CallCallable.call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args)
using the Context instance associated with the current thread. If no Context is associated with the thread, thenContextFactory.makeContext()
will be called to construct new Context instance. The instance will be temporary associated with the thread during call toContextAction.run(Context)
.It is allowed but not advisable to use null for
factory
argument in which case the global static singleton ContextFactory instance will be used to create new context instances.- See Also:
-
addContextListener
Deprecated.- See Also:
-
removeContextListener
Deprecated.- See Also:
-
getFactory
ReturnContextFactory
instance used to create this Context. -
isSealed
public final boolean isSealed()Checks if this is a sealed Context. A sealed Context instance does not allow to modify any of its properties and will throw an exception on any such attempt.- See Also:
-
seal
Seal this Context object so any attempt to modify any of its properties including callingenter()
andexit()
methods will throw an exception.If
sealKey
is not null, callingunseal(Object sealKey)
with the same key unseals the object. IfsealKey
is null, unsealing is no longer possible.- See Also:
-
unseal
Unseal previously sealed Context object. ThesealKey
argument should not be null and should matchsealKey
supplied with the last call toseal(Object)
or an exception will be thrown.- See Also:
-
getLanguageVersion
public final int getLanguageVersion()Get the current language version.The language version number affects JavaScript semantics as detailed in the overview documentation.
- Returns:
- an integer that is one of VERSION_1_0, VERSION_1_1, etc.
-
setLanguageVersion
public void setLanguageVersion(int version) Set the language version.Setting the language version will affect functions and scripts compiled subsequently. See the overview documentation for version-specific behavior.
- Parameters:
version
- the version as specified by VERSION_1_0, VERSION_1_1, etc.
-
isValidLanguageVersion
public static boolean isValidLanguageVersion(int version) -
checkLanguageVersion
public static void checkLanguageVersion(int version) -
getImplementationVersion
Get the implementation version.The implementation version is of the form
"name langVer
where name is the name of the product, langVer is the language version, relNum is the release number, and date is the release date for that specific release in the form "yyyy mm dd".release
relNum date"- Returns:
- a string that encodes the product, language version, release number, and date.
-
getErrorReporter
Get the current error reporter.- See Also:
-
setErrorReporter
Change the current error reporter.- Returns:
- the previous error reporter
- See Also:
-
getLocale
Get the current locale. Returns the default locale if none has been set.- See Also:
-
setLocale
Set the current locale.- Returns:
- the old value of the locale
- See Also:
-
getTimeZone
Get the current timezone. Returns the default timezone if none has been set.- Returns:
- the old value of the timezone
- See Also:
-
setTimeZone
Set the current timezone.- See Also:
-
addPropertyChangeListener
Register an object to receive notifications when a bound property has changed- Parameters:
l
- the listener- See Also:
-
removePropertyChangeListener
Remove an object from the list of objects registered to receive notification of changes to a bounded property- Parameters:
l
- the listener- See Also:
-
reportWarning
public static void reportWarning(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report a warning using the error reporter for the current thread.- Parameters:
message
- the warning message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detected- See Also:
-
reportWarning
Report a warning using the error reporter for the current thread.- Parameters:
message
- the warning message to report- See Also:
-
reportWarning
-
reportError
public static void reportError(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report an error using the error reporter for the current thread.- Parameters:
message
- the error message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detected- See Also:
-
reportError
Report an error using the error reporter for the current thread.- Parameters:
message
- the error message to report- See Also:
-
reportRuntimeError
public static EvaluatorException reportRuntimeError(String message, String sourceName, int lineno, String lineSource, int lineOffset) Report a runtime error using the error reporter for the current thread.- Parameters:
message
- the error message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detected- Returns:
- a runtime exception that will be thrown to terminate the execution of the script
- See Also:
-
reportRuntimeError
Report a runtime error using the error reporter for the current thread.- Parameters:
message
- the error message to report- See Also:
-
initStandardObjects
Initialize the standard objects.Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
- Returns:
- the initialized scope
-
initSafeStandardObjects
Initialize the standard objects, leaving out those that offer access directly to Java classes. This sets up "scope" to have access to all the standard JavaScript classes, but does not create global objects for any top-level Java packages. In addition, the "Packages," "JavaAdapter," and "JavaImporter" classes, and the "getClass" function, are not initialized.The result of this function is a scope that may be safely used in a "sandbox" environment where it is not desirable to give access to Java code from JavaScript.
Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
- Returns:
- the initialized scope
-
initStandardObjects
Initialize the standard objects.Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
- Parameters:
scope
- the scope to initialize, or null, in which case a new object will be created to serve as the scope- Returns:
- the initialized scope. The method returns the value of the scope argument if it is
not null or newly allocated scope object which is an instance
ScriptableObject
.
-
initSafeStandardObjects
Initialize the standard objects, leaving out those that offer access directly to Java classes. This sets up "scope" to have access to all the standard JavaScript classes, but does not create global objects for any top-level Java packages. In addition, the "Packages," "JavaAdapter," and "JavaImporter" classes, and the "getClass" function, are not initialized.The result of this function is a scope that may be safely used in a "sandbox" environment where it is not desirable to give access to Java code from JavaScript.
Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
- Parameters:
scope
- the scope to initialize, or null, in which case a new object will be created to serve as the scope- Returns:
- the initialized scope. The method returns the value of the scope argument if it is
not null or newly allocated scope object which is an instance
ScriptableObject
.
-
initStandardObjects
Initialize the standard objects.Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
This form of the method also allows for creating "sealed" standard objects. An object that is sealed cannot have properties added, changed, or removed. This is useful to create a "superglobal" that can be shared among several top-level objects. Note that sealing is not allowed in the current ECMA/ISO language specification, but is likely for the next version.
- Parameters:
scope
- the scope to initialize, or null, in which case a new object will be created to serve as the scopesealed
- whether or not to create sealed standard objects that cannot be modified.- Returns:
- the initialized scope. The method returns the value of the scope argument if it is not null or newly allocated scope object.
- Since:
- 1.4R3
-
initSafeStandardObjects
Initialize the standard objects, leaving out those that offer access directly to Java classes. This sets up "scope" to have access to all the standard JavaScript classes, but does not create global objects for any top-level Java packages. In addition, the "Packages," "JavaAdapter," and "JavaImporter" classes, and the "getClass" function, are not initialized.The result of this function is a scope that may be safely used in a "sandbox" environment where it is not desirable to give access to Java code from JavaScript.
Creates instances of the standard objects and their constructors (Object, String, Number, Date, etc.), setting up 'scope' to act as a global object as in ECMA 15.1.
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
This form of the method also allows for creating "sealed" standard objects. An object that is sealed cannot have properties added, changed, or removed. This is useful to create a "superglobal" that can be shared among several top-level objects. Note that sealing is not allowed in the current ECMA/ISO language specification, but is likely for the next version.
- Parameters:
scope
- the scope to initialize, or null, in which case a new object will be created to serve as the scopesealed
- whether or not to create sealed standard objects that cannot be modified.- Returns:
- the initialized scope. The method returns the value of the scope argument if it is not null or newly allocated scope object.
- Since:
- 1.7.6
-
getUndefinedValue
Get the singleton object that represents the JavaScript Undefined value. -
evaluateString
public final Object evaluateString(Scriptable scope, String source, String sourceName, int lineno, Object securityDomain) Evaluate a JavaScript source string.The provided source name and line number are used for error messages and for producing debug information.
- Parameters:
scope
- the scope to execute insource
- the JavaScript sourcesourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security information about the origin or owner of the script. For implementations that don't care about security, this value may be null.- Returns:
- the result of evaluating the string
- See Also:
-
evaluateReader
public final Object evaluateReader(Scriptable scope, Reader in, String sourceName, int lineno, Object securityDomain) throws IOException Evaluate a reader as JavaScript source.All characters of the reader are consumed.
- Parameters:
scope
- the scope to execute inin
- the Reader to get JavaScript source fromsourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security information about the origin or owner of the script. For implementations that don't care about security, this value may be null.- Returns:
- the result of evaluating the source
- Throws:
IOException
- if an IOException was generated by the Reader
-
executeScriptWithContinuations
public Object executeScriptWithContinuations(Script script, Scriptable scope) throws ContinuationPending Execute script that may pause execution by capturing a continuation. Caller must be prepared to catch a ContinuationPending exception and resume execution by callingresumeContinuation(Object, Scriptable, Object)
.- Parameters:
script
- The script to execute. Script must have been compiled with interpreted mode (optimization level -1)scope
- The scope to execute the script against- Throws:
ContinuationPending
- if the script calls a function that results in a call tocaptureContinuation()
- Since:
- 1.7 Release 2
-
callFunctionWithContinuations
public Object callFunctionWithContinuations(Callable function, Scriptable scope, Object[] args) throws ContinuationPending Call function that may pause execution by capturing a continuation. Caller must be prepared to catch a ContinuationPending exception and resume execution by callingresumeContinuation(Object, Scriptable, Object)
.- Parameters:
function
- The function to call. The function must have been compiled with interpreted mode (optimization level -1)scope
- The scope to execute the script againstargs
- The arguments for the function- Throws:
ContinuationPending
- if the script calls a function that results in a call tocaptureContinuation()
- Since:
- 1.7 Release 2
-
captureContinuation
Capture a continuation from the current execution. The execution must have been started via a call toexecuteScriptWithContinuations(Script, Scriptable)
orcallFunctionWithContinuations(Callable, Scriptable, Object[])
. This implies that the code calling this method must have been called as a function from the JavaScript script. Also, there cannot be any non-JavaScript code between the JavaScript frames (e.g., a call to eval()). The ContinuationPending exception returned must be thrown.- Returns:
- A ContinuationPending exception that must be thrown
- Since:
- 1.7 Release 2
-
resumeContinuation
public Object resumeContinuation(Object continuation, Scriptable scope, Object functionResult) throws ContinuationPending Restarts execution of the JavaScript suspended at the call tocaptureContinuation()
. Execution of the code will resume with the functionResult as the result of the call that captured the continuation. Execution of the script will either conclude normally and the result returned, another continuation will be captured and thrown, or the script will terminate abnormally and throw an exception.- Parameters:
continuation
- The value returned byContinuationPending.getContinuation()
functionResult
- This value will appear to the code being resumed as the result of the function that captured the continuation- Throws:
ContinuationPending
- if another continuation is captured before the code terminates- Since:
- 1.7 Release 2
-
stringIsCompilableUnit
Check whether a string is ready to be compiled.stringIsCompilableUnit is intended to support interactive compilation of JavaScript. If compiling the string would result in an error that might be fixed by appending more source, this method returns false. In every other case, it returns true.
Interactive shells may accumulate source lines, using this method after each new line is appended to check whether the statement being entered is complete.
- Parameters:
source
- the source buffer to check- Returns:
- whether the source is ready for compilation
- Since:
- 1.4 Release 2
-
compileReader
@Deprecated public final Script compileReader(Scriptable scope, Reader in, String sourceName, int lineno, Object securityDomain) throws IOException Deprecated.- Throws:
IOException
- See Also:
-
compileReader
public final Script compileReader(Reader in, String sourceName, int lineno, Object securityDomain) throws IOException Compiles the source in the given reader.Returns a script that may later be executed. Will consume all the source in the reader.
- Parameters:
in
- the input readersourceName
- a string describing the source, such as a filenamelineno
- the starting line number for reporting errorssecurityDomain
- an arbitrary object that specifies security information about the origin or owner of the script. For implementations that don't care about security, this value may be null.- Returns:
- a script that may later be executed
- Throws:
IOException
- if an IOException was generated by the Reader- See Also:
-
compileString
public final Script compileString(String source, String sourceName, int lineno, Object securityDomain) Compiles the source in the given string.Returns a script that may later be executed.
- Parameters:
source
- the source stringsourceName
- a string describing the source, such as a filenamelineno
- the starting line number for reporting errors. Use 0 if the line number is unknown.securityDomain
- an arbitrary object that specifies security information about the origin or owner of the script. For implementations that don't care about security, this value may be null.- Returns:
- a script that may later be executed
- See Also:
-
compileFunction
public final Function compileFunction(Scriptable scope, String source, String sourceName, int lineno, Object securityDomain) Compile a JavaScript function.The function source must be a function definition as defined by ECMA (e.g., "function f(a) { return a; }").
- Parameters:
scope
- the scope to compile relative tosource
- the function definition sourcesourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security information about the origin or owner of the script. For implementations that don't care about security, this value may be null.- Returns:
- a Function that may later be called
- See Also:
-
decompileScript
Decompile the script.The canonical source of the script is returned.
- Parameters:
script
- the script to decompileindent
- the number of spaces to indent the result- Returns:
- a string representing the script source
-
decompileFunction
Decompile a JavaScript Function.Decompiles a previously compiled JavaScript function object to canonical source.
Returns function body of '[native code]' if no decompilation information is available.
- Parameters:
fun
- the JavaScript function to decompileindent
- the number of spaces to indent the result- Returns:
- a string representing the function source
-
decompileFunctionBody
Decompile the body of a JavaScript Function.Decompiles the body a previously compiled JavaScript Function object to canonical source, omitting the function header and trailing brace.
Returns '[native code]' if no decompilation information is available.
- Parameters:
fun
- the JavaScript function to decompileindent
- the number of spaces to indent the result- Returns:
- a string representing the function body source.
-
newObject
Create a new JavaScript object.Equivalent to evaluating "new Object()".
- Parameters:
scope
- the scope to search for the constructor and to evaluate against- Returns:
- the new object
-
newObject
Create a new JavaScript object by executing the named constructor.The call
newObject(scope, "Foo")
is equivalent to evaluating "new Foo()".- Parameters:
scope
- the scope to search for the constructor and to evaluate againstconstructorName
- the name of the constructor to call- Returns:
- the new object
-
newObject
Creates a new JavaScript object by executing the named constructor.Searches
scope
for the named constructor, calls it with the given arguments, and returns the result.The code
Object[] args = { "a", "b" }; newObject(scope, "Foo", args)
is equivalent to evaluating "new Foo('a', 'b')", assuming that the Foo constructor has been defined inscope
.- Parameters:
scope
- The scope to search for the constructor and to evaluate againstconstructorName
- the name of the constructor to callargs
- the array of arguments for the constructor- Returns:
- the new object
-
newArray
Create an array with a specified initial length.- Parameters:
scope
- the scope to create the object inlength
- the initial length (JavaScript arrays may have additional properties added dynamically).- Returns:
- the new array object
-
newArray
Create an array with a set of initial elements.- Parameters:
scope
- the scope to create the object in.elements
- the initial elements. Each object in this array must be an acceptable JavaScript type and type of array should be exactly Object[], not SomeObjectSubclass[].- Returns:
- the new array object.
-
getElements
Get the elements of a JavaScript array.If the object defines a length property convertible to double number, then the number is converted Uint32 value as defined in Ecma 9.6 and Java array of that size is allocated. The array is initialized with the values obtained by calling get() on object for each value of i in [0,length-1]. If there is not a defined value for a property the Undefined value is used to initialize the corresponding element in the array. The Java array is then returned. If the object doesn't define a length property or it is not a number, empty array is returned.
- Parameters:
object
- the JavaScript array or array-like object- Returns:
- a Java array of objects
- Since:
- 1.4 release 2
-
toBoolean
Convert the value to a JavaScript boolean value.See ECMA 9.2.
- Parameters:
value
- a JavaScript value- Returns:
- the corresponding boolean value converted using the ECMA rules
-
toNumber
Convert the value to a JavaScript Number value.Returns a Java double for the JavaScript Number.
See ECMA 9.3.
- Parameters:
value
- a JavaScript value- Returns:
- the corresponding double value converted using the ECMA rules
-
toString
Convert the value to a JavaScript String value.See ECMA 9.8.
- Parameters:
value
- a JavaScript value- Returns:
- the corresponding String value converted using the ECMA rules
-
toObject
Convert the value to an JavaScript object value.Note that a scope must be provided to look up the constructors for Number, Boolean, and String.
See ECMA 9.9.
Additionally, arbitrary Java objects and classes will be wrapped in a Scriptable object with its Java fields and methods reflected as JavaScript properties of the object.
- Parameters:
value
- any Java objectscope
- global scope containing constructors for Number, Boolean, and String- Returns:
- new JavaScript object
-
toObject
Deprecated.- See Also:
-
javaToJS
Convenient method to convert java value to its closest representation in JavaScript.If value is an instance of String, Number, Boolean, Function or Scriptable, it is returned as it and will be treated as the corresponding JavaScript type of string, number, boolean, function and object.
Note that for Number instances during any arithmetic operation in JavaScript the engine will always use the result of
Number.doubleValue()
resulting in a precision loss if the number can not fit into double.If value is an instance of Character, it will be converted to string of length 1 and its JavaScript type will be string.
The rest of values will be wrapped as LiveConnect objects by calling
WrapFactory.wrap(Context cx, Scriptable scope, Object obj, Class staticType)
as in:Context cx = Context.getCurrentContext(); return cx.getWrapFactory().wrap(cx, scope, value, null);
- Parameters:
value
- any Java objectscope
- top scope object- Returns:
- value suitable to pass to any API that takes JavaScript values.
-
javaToJS
Convenient method to convert java value to its closest representation in JavaScript.If value is an instance of String, Number, Boolean, Function or Scriptable, it is returned as it and will be treated as the corresponding JavaScript type of string, number, boolean, function and object.
Note that for Number instances during any arithmetic operation in JavaScript the engine will always use the result of
Number.doubleValue()
resulting in a precision loss if the number can not fit into double.If value is an instance of Character, it will be converted to string of length 1 and its JavaScript type will be string.
The rest of values will be wrapped as LiveConnect objects by calling
WrapFactory.wrap(Context cx, Scriptable scope, Object obj, Class staticType)
as in:return cx.getWrapFactory().wrap(cx, scope, value, null);
- Parameters:
value
- any Java objectscope
- top scope objectcx
- context to use for wrapping LiveConnect objects- Returns:
- value suitable to pass to any API that takes JavaScript values.
-
jsToJava
Convert a JavaScript value into the desired type. Uses the semantics defined with LiveConnect3 and throws an Illegal argument exception if the conversion cannot be performed.- Parameters:
value
- the JavaScript value to convertdesiredType
- the Java type to convert to. Primitive Java types are represented using the TYPE fields in the corresponding wrapper class in java.lang.- Returns:
- the converted value
- Throws:
EvaluatorException
- if the conversion cannot be performed
-
toType
@Deprecated public static Object toType(Object value, Class<?> desiredType) throws IllegalArgumentException Deprecated.- Throws:
IllegalArgumentException
- if the conversion cannot be performed. Note thatjsToJava(Object, Class)
throwsEvaluatorException
instead.- See Also:
-
getJavaToJSONConverter
Returns the javaToJSONConverter for this Context.The converter is used by the JSON.stringify method for Java objects other than instances of
Map
,Collection
, orObject[]
.The default converter if unset will convert Java Objects to their toString() value.
- Returns:
- javaToJSONConverter for this Context
-
setJavaToJSONConverter
public void setJavaToJSONConverter(UnaryOperator<Object> javaToJSONConverter) throws IllegalArgumentException Sets the javaToJSONConverter for this Context.The converter is used by the JSON.stringify method for Java objects other than instances of
Map
,Collection
, orObject[]
.Objects returned by the converter will converted with
javaToJS(Object, Scriptable)
and then stringified themselves.- Parameters:
javaToJSONConverter
-- Throws:
IllegalArgumentException
- if javaToJSONConverter is null
-
throwAsScriptRuntimeEx
Rethrow the exception wrapping it as the script runtime exception. Unless the exception is instance ofEcmaError
orEvaluatorException
it will be wrapped asWrappedException
, a subclass ofEvaluatorException
. The resulting exception object always contains source name and line number of script that triggered exception.This method always throws an exception, its return value is provided only for convenience to allow a usage like:
throw Context.throwAsScriptRuntimeEx(ex);
to indicate that code after the method is unreachable.- Throws:
EvaluatorException
EcmaError
-
isGeneratingDebug
public final boolean isGeneratingDebug()Tell whether debug information is being generated.- Since:
- 1.3
-
setGeneratingDebug
public final void setGeneratingDebug(boolean generatingDebug) Specify whether or not debug information should be generated.Setting the generation of debug information on will set the optimization level to zero.
- Since:
- 1.3
-
isGeneratingSource
public final boolean isGeneratingSource()Tell whether source information is being generated.- Since:
- 1.3
-
setGeneratingSource
public final void setGeneratingSource(boolean generatingSource) Specify whether or not source information should be generated.Without source information, evaluating the "toString" method on JavaScript functions produces only "[native code]" for the body of the function. Note that code generated without source is not fully ECMA conformant.
- Since:
- 1.3
-
getOptimizationLevel
public final int getOptimizationLevel()Get the current optimization level.The optimization level is expressed as an integer between -1 and 9.
- Since:
- 1.3
-
setOptimizationLevel
public final void setOptimizationLevel(int optimizationLevel) Set the current optimization level.The optimization level is expected to be an integer between -1 and 9. Any negative values will be interpreted as -1, and any values greater than 9 will be interpreted as 9. An optimization level of -1 indicates that interpretive mode will always be used. Levels 0 through 9 indicate that class files may be generated. Higher optimization levels trade off compile time performance for runtime performance. The optimizer level can't be set greater than -1 if the optimizer package doesn't exist at run time.
- Parameters:
optimizationLevel
- an integer indicating the level of optimization to perform- Since:
- 1.3
-
isValidOptimizationLevel
public static boolean isValidOptimizationLevel(int optimizationLevel) -
checkOptimizationLevel
public static void checkOptimizationLevel(int optimizationLevel) -
getMaximumInterpreterStackDepth
public final int getMaximumInterpreterStackDepth()Returns the maximum stack depth (in terms of number of call frames) allowed in a single invocation of interpreter. If the set depth would be exceeded, the interpreter will throw an EvaluatorException in the script. Defaults to Integer.MAX_VALUE. The setting only has effect for interpreted functions (those compiled with optimization level set to -1). As the interpreter doesn't use the Java stack but rather manages its own stack in the heap memory, a runaway recursion in interpreted code would eventually consume all available memory and cause OutOfMemoryError instead of a StackOverflowError limited to only a single thread. This setting helps prevent such situations.- Returns:
- The current maximum interpreter stack depth.
-
setMaximumInterpreterStackDepth
public final void setMaximumInterpreterStackDepth(int max) Sets the maximum stack depth (in terms of number of call frames) allowed in a single invocation of interpreter. If the set depth would be exceeded, the interpreter will throw an EvaluatorException in the script. Defaults to Integer.MAX_VALUE. The setting only has effect for interpreted functions (those compiled with optimization level set to -1). As the interpreter doesn't use the Java stack but rather manages its own stack in the heap memory, a runaway recursion in interpreted code would eventually consume all available memory and cause OutOfMemoryError instead of a StackOverflowError limited to only a single thread. This setting helps prevent such situations.- Parameters:
max
- the new maximum interpreter stack depth- Throws:
IllegalStateException
- if this context's optimization level is not -1IllegalArgumentException
- if the new depth is not at least 1
-
setSecurityController
Set the security controller for this context.SecurityController may only be set if it is currently null and
SecurityController.hasGlobal()
isfalse
. Otherwise a SecurityException is thrown.- Parameters:
controller
- a SecurityController object- Throws:
SecurityException
- if there is already a SecurityController object for this Context or globally installed.- See Also:
-
setClassShutter
Set the LiveConnect access filter for this context.ClassShutter
may only be set if it is currently null. Otherwise a SecurityException is thrown.- Parameters:
shutter
- a ClassShutter object- Throws:
SecurityException
- if there is already a ClassShutter object for this Context
-
getClassShutterSetter
-
getThreadLocal
Get a value corresponding to a key.Since the Context is associated with a thread it can be used to maintain values that can be later retrieved using the current thread.
Note that the values are maintained with the Context, so if the Context is disassociated from the thread the values cannot be retrieved. Also, if private data is to be maintained in this manner the key should be a java.lang.Object whose reference is not divulged to untrusted code.
- Parameters:
key
- the key used to lookup the value- Returns:
- a value previously stored using putThreadLocal.
-
putThreadLocal
Put a value that can later be retrieved using a given key.- Parameters:
key
- the key used to index the valuevalue
- the value to save
-
removeThreadLocal
Remove values from thread-local storage.- Parameters:
key
- the key for the entry to remove.- Since:
- 1.5 release 2
-
setCachingEnabled
Deprecated.- See Also:
-
setWrapFactory
Set a WrapFactory for this Context.The WrapFactory allows custom object wrapping behavior for Java object manipulated with JavaScript.
- Since:
- 1.5 Release 4
- See Also:
-
getWrapFactory
Return the current WrapFactory, or null if none is defined.- Since:
- 1.5 Release 4
- See Also:
-
getDebugger
Return the current debugger.- Returns:
- the debugger, or null if none is attached.
-
getDebuggerContextData
Return the debugger context data associated with current context.- Returns:
- the debugger data, or null if debugger is not attached
-
setDebugger
Set the associated debugger.- Parameters:
debugger
- the debugger to be used on callbacks from the engine.contextData
- arbitrary object that debugger can use to store per Context data.
-
getDebuggableView
Return DebuggableScript instance if any associated with the script. If callable supports DebuggableScript implementation, the method returns it. Otherwise null is returned. -
hasFeature
public boolean hasFeature(int featureIndex) Controls certain aspects of script semantics. Should be overwritten to alter default behavior.The default implementation calls
ContextFactory.hasFeature(Context cx, int featureIndex)
that allows to customize Context behavior without introducing Context subclasses.ContextFactory
documentation gives an example of hasFeature implementation.- Parameters:
featureIndex
- feature index to check- Returns:
- true if the
featureIndex
feature is turned on - See Also:
-
getE4xImplementationFactory
Returns an object which specifies an E4X implementation to use within thisContext
. Note that the XMLLib.Factory interface should be considered experimental.The default implementation uses the implementation provided by this
Context
'sContextFactory
.- Returns:
- An XMLLib.Factory. Should not return
null
ifFEATURE_E4X
is enabled. SeehasFeature(int)
.
-
getInstructionObserverThreshold
public final int getInstructionObserverThreshold()Get threshold of executed instructions counter that triggers call toobserveInstructionCount()
. When the threshold is zero, instruction counting is disabled, otherwise each time the run-time executes at least the threshold value of script instructions,observeInstructionCount()
will be called. -
setInstructionObserverThreshold
public final void setInstructionObserverThreshold(int threshold) Set threshold of executed instructions counter that triggers call toobserveInstructionCount()
. When the threshold is zero, instruction counting is disabled, otherwise each time the run-time executes at least the threshold value of script instructions,observeInstructionCount()
will be called.
Note that the meaning of "instruction" is not guaranteed to be consistent between compiled and interpretive modes: executing a given script or function in the different modes will result in different instruction counts against the threshold.setGenerateObserverCount(boolean)
is called with true ifthreshold
is greater than zero, false otherwise.- Parameters:
threshold
- The instruction threshold
-
setGenerateObserverCount
public void setGenerateObserverCount(boolean generateObserverCount) Turn on or off generation of code with callbacks to track the count of executed instructions. Currently only affects JVM byte code generation: this slows down the generated code, but code generated without the callbacks will not be counted toward instruction thresholds. Rhino's interpretive mode does instruction counting without inserting callbacks, so there is no requirement to compile code differently.- Parameters:
generateObserverCount
- if true, generated code will contain calls to accumulate an estimate of the instructions executed.
-
isGenerateObserverCount
public boolean isGenerateObserverCount()Determine if observer counts should be generated. -
observeInstructionCount
protected void observeInstructionCount(int instructionCount) Allow application to monitor counter of executed script instructions in Context subclasses. Run-time calls this when instruction counting is enabled and the counter reaches limit set bysetInstructionObserverThreshold()
. The method is useful to observe long running scripts and if necessary to terminate them.The default implementation calls
ContextFactory.observeInstructionCount(Context cx, int instructionCount)
that allows to customize Context behavior without introducing Context subclasses.- Parameters:
instructionCount
- amount of script instruction executed since last call toobserveInstructionCount
- Throws:
Error
- to terminate the script- See Also:
-
createClassLoader
Create class loader for generated classes. The method callsContextFactory.createClassLoader(ClassLoader)
using the result ofgetFactory()
. -
getApplicationClassLoader
-
setApplicationClassLoader
-
enqueueMicrotask
Add a task that will be executed at the end of the current operation. The various "evaluate" functions will all call this before exiting to ensure that all microtasks run to completion. Otherwise, callers should call "processMicrotasks" to run them all. This feature is primarily used to implement Promises. The microtask queue is not thread-safe. -
processMicrotasks
public void processMicrotasks()Run all the microtasks for the current context to completion. This is called by the various "evaluate" functions. Frameworks that call Function objects directly should call this function to ensure that everything completes if they want all Promises to eventually resolve. This function is idempotent, but the microtask queue is not thread-safe. -
setTrackUnhandledPromiseRejections
public void setTrackUnhandledPromiseRejections(boolean track) Control whether to track unhandled promise rejections. If "track" is set to true, then the tracker returned by "getUnhandledPromiseTracker" must be periodically used to process the queue of unhandled promise rejections, or a memory leak may result.- Parameters:
track
- if true, then track unhandled promise rejections
-
getUnhandledPromiseTracker
Return the object used to track unhandled promise rejections.- Returns:
- the tracker object
-
compileImpl
protected Object compileImpl(Scriptable scope, String sourceString, String sourceName, int lineno, Object securityDomain, boolean returnFunction, Evaluator compiler, ErrorReporter compilationErrorReporter) -
isGeneratingDebugChanged
public final boolean isGeneratingDebugChanged() -
addActivationName
Add a name to the list of names forcing the creation of real activation objects for functions.- Parameters:
name
- the name of the object to add to the list
-
isActivationNeeded
Check whether the name is in the list of names of objects forcing the creation of activation objects.- Parameters:
name
- the name of the object to test- Returns:
- true if an function activation object is needed.
-
removeActivationName
Remove a name from the list of names forcing the creation of real activation objects for functions.- Parameters:
name
- the name of the object to remove from the list
-
isStrictMode
public final boolean isStrictMode() -
isCurrentContextStrict
public static boolean isCurrentContextStrict()
-