--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java 2015-03-26 13:05:14.225472228 +0100 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/Global.java 2015-03-26 13:05:14.085472232 +0100 @@ -60,6 +60,7 @@ import jdk.nashorn.internal.objects.annotations.Setter; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ECMAErrors; +import jdk.nashorn.internal.runtime.FindProperty; import jdk.nashorn.internal.runtime.GlobalConstants; import jdk.nashorn.internal.runtime.GlobalFunctions; import jdk.nashorn.internal.runtime.JSType; @@ -2204,6 +2205,17 @@ } @Override + protected FindProperty findProperty(final String key, final boolean deep, final ScriptObject start) { + if (lexicalScope != null && start != this && start.isScope()) { + final FindProperty find = lexicalScope.findProperty(key, false); + if (find != null) { + return find; + } + } + return super.findProperty(key, deep, start); + } + + @Override public GuardedInvocation findSetMethod(final CallSiteDescriptor desc, final LinkRequest request) { final boolean isScope = NashornCallSiteDescriptor.isScope(desc); --- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java 2015-03-26 13:05:14.793472212 +0100 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptObject.java 2015-03-26 13:05:14.657472216 +0100 @@ -812,7 +812,7 @@ * * @return FindPropertyData or null if not found. */ - FindProperty findProperty(final String key, final boolean deep, final ScriptObject start) { + protected FindProperty findProperty(final String key, final boolean deep, final ScriptObject start) { final PropertyMap selfMap = getMap(); final Property property = selfMap.findProperty(key); --- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/WithObject.java 2015-03-26 13:05:15.401472194 +0100 +++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/WithObject.java 2015-03-26 13:05:15.249472198 +0100 @@ -198,7 +198,7 @@ * @return FindPropertyData or null if not found. */ @Override - FindProperty findProperty(final String key, final boolean deep, final ScriptObject start) { + protected FindProperty findProperty(final String key, final boolean deep, final ScriptObject start) { // We call findProperty on 'expression' with 'expression' itself as start parameter. // This way in ScriptObject.setObject we can tell the property is from a 'with' expression // (as opposed from another non-scope object in the proto chain such as Object.prototype). --- old/test/script/basic/es6/let-eval.js 2015-03-26 13:05:15.905472179 +0100 +++ new/test/script/basic/es6/let-eval.js 2015-03-26 13:05:15.761472183 +0100 @@ -96,3 +96,9 @@ f(); print(typeof a, typeof b, typeof c, typeof x, typeof z); + +let v = 1; +eval("print('v: ' + v); v = 2; print ('v: ' + v);"); +print("this.v: " + this.v); +print("v: " + v); + --- old/test/script/basic/es6/let-eval.js.EXPECTED 2015-03-26 13:05:16.381472165 +0100 +++ new/test/script/basic/es6/let-eval.js.EXPECTED 2015-03-26 13:05:16.261472169 +0100 @@ -14,3 +14,7 @@ 2 1 0 2 1 0 undefined undefined undefined undefined undefined undefined +v: 1 +v: 2 +this.v: undefined +v: 2