src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java
Print this page
*** 722,741 ****
}
// In strict mode, eval does not instantiate variables and functions
// in the caller's environment. A new environment is created!
if (strictFlag) {
! // Create a new scope object
! final ScriptObject strictEvalScope = global.newObject();
!
! // bless it as a "scope"
! strictEvalScope.setIsScope();
!
! // set given scope to be it's proto so that eval can still
! // access caller environment vars in the new environment.
! strictEvalScope.setProto(scope);
! scope = strictEvalScope;
}
final ScriptFunction func = getProgramFunction(clazz, scope);
Object evalThis;
if (directEval) {
--- 722,733 ----
}
// In strict mode, eval does not instantiate variables and functions
// in the caller's environment. A new environment is created!
if (strictFlag) {
! // Create a new scope object with given scope as its prototype
! scope = newScope(scope);
}
final ScriptFunction func = getProgramFunction(clazz, scope);
Object evalThis;
if (directEval) {
*** 746,755 ****
--- 738,751 ----
}
return ScriptRuntime.apply(func, evalThis);
}
+ private static ScriptObject newScope(final ScriptObject callerScope) {
+ return new FunctionScope(PropertyMap.newMap(FunctionScope.class), callerScope);
+ }
+
private static Source loadInternal(final String srcStr, final String prefix, final String resourcePath) {
if (srcStr.startsWith(prefix)) {
final String resource = resourcePath + srcStr.substring(prefix.length());
// NOTE: even sandbox scripts should be able to load scripts in nashorn: scheme
// These scripts are always available and are loaded from nashorn.jar's resources.