OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var my_global = 0; | 5 var my_global = 0; |
6 | 6 |
7 // The problem was that we allowed lazy functions inside evals, but did not | 7 // The problem was that we allowed lazy functions inside evals, but did not |
8 // force context allocation on the eval scope. Thus, foo was not context | 8 // force context allocation on the eval scope. Thus, foo was not context |
9 // allocated since we didn't realize that a lazy function referred to it. | 9 // allocated since we didn't realize that a lazy function referred to it. |
10 eval(`let foo = 1; | 10 eval(`let foo = 1; |
11 let maybe_lazy = function() { foo = 2; } | 11 let maybe_lazy = function() { foo = 2; } |
12 maybe_lazy(); | 12 maybe_lazy(); |
13 my_global = foo;`); | 13 my_global = foo;`); |
14 assertEquals(2, my_global); | 14 assertEquals(2, my_global); |
15 | 15 |
16 (function TestVarInStrictEval() { | 16 (function TestVarInStrictEval() { |
17 "use strict"; | 17 "use strict"; |
18 eval(`var foo = 3; | 18 eval(`var foo = 3; |
19 let maybe_lazy = function() { foo = 4; } | 19 let maybe_lazy = function() { foo = 4; } |
20 maybe_lazy(); | 20 maybe_lazy(); |
21 my_global = foo;`); | 21 my_global = foo;`); |
22 assertEquals(4, my_global); | 22 assertEquals(4, my_global); |
23 })(); | 23 })(); |
24 | 24 |
25 eval("let foo = 1; function lazy() { foo = 2; } lazy(); my_global = foo;"); | 25 eval("let foo = 1; function lazy() { foo = 2; } lazy(); my_global = foo;"); |
26 assertEquals(my_global, 2); | 26 assertEquals(my_global, 2); |
| 27 |
| 28 // Lexical variable inside a subscope in eval. |
| 29 eval(`{ let foo = 5; |
| 30 function not_lazy() { foo = 6; } |
| 31 not_lazy(); |
| 32 my_global = foo; |
| 33 }`); |
| 34 assertEquals(my_global, 6); |
OLD | NEW |