Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: test/mjsunit/harmony/block-eval-var-over-legacy-const.js

Issue 1437003006: Fix harmony sloppy block scoping dynamic redeclaration check (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tighten test, fix bug in redeclaration check Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 // Flags: --harmony-sloppy --harmony-sloppy-let --harmony-sloppy-function 5 // Flags: --harmony-sloppy --harmony-sloppy-let --harmony-sloppy-function
6 6
7 // Var-let conflict in a function throws, even if the var is in an eval 7 // Var-let conflict in a function throws, even if the var is in an eval
8 8
9 let caught = false; 9 // Throws at the top level of a function
10 assertThrows(function() {
11 let x = 1;
12 eval('const x = 2');
13 }, TypeError);
10 14
11 // Throws at the top level of a function 15 // If the eval is in its own block scope, throws
12 try { 16 assertThrows(function() {
13 (function() { 17 let y = 1;
18 { eval('const y = 2'); }
19 }, TypeError);
20
21 // If the let is in its own block scope, with the eval, throws
22 assertThrows(function() {
23 {
14 let x = 1; 24 let x = 1;
15 eval('const x = 2'); 25 eval('const x = 2');
16 })() 26 }
17 } catch (e) { 27 }, TypeError);
18 caught = true;
19 }
20 assertTrue(caught);
21
22 // If the eval is in its own block scope, throws
23 caught = false;
24 try {
25 (function() {
26 let y = 1;
27 { eval('const y = 2'); }
28 })()
29 } catch (e) {
30 caught = true;
31 }
32 assertTrue(caught);
33
34 // If the let is in its own block scope, with the eval, throws
35 caught = false
36 try {
37 (function() {
38 {
39 let x = 1;
40 eval('const x = 2');
41 }
42 })();
43 } catch (e) {
44 caught = true;
45 }
46 assertTrue(caught);
47 28
48 // Legal if the let is no longer visible 29 // Legal if the let is no longer visible
49 caught = false 30 assertDoesNotThrow(function() {
50 try { 31 {
51 (function() { 32 let x = 1;
52 { 33 }
53 let x = 1; 34 eval('const x = 2');
54 } 35 });
55 eval('const x = 2');
56 })();
57 } catch (e) {
58 caught = true;
59 }
60 assertFalse(caught);
61 36
62 // In global scope 37 // In global scope
63 caught = false; 38 let caught = false;
64 try { 39 try {
65 let z = 1; 40 let z = 1;
66 eval('const z = 2'); 41 eval('const z = 2');
67 } catch (e) { 42 } catch (e) {
68 caught = true; 43 caught = true;
69 } 44 }
70 assertTrue(caught); 45 assertTrue(caught);
71 46
72 // Let declarations beyond a function boundary don't conflict 47 // Let declarations beyond a function boundary don't conflict
73 caught = false; 48 caught = false;
(...skipping 26 matching lines...) Expand all
100 (function() { 75 (function() {
101 let x; 76 let x;
102 with ({x: 1}) { 77 with ({x: 1}) {
103 eval("const x = 2;"); 78 eval("const x = 2;");
104 } 79 }
105 })(); 80 })();
106 } catch (e) { 81 } catch (e) {
107 caught = true; 82 caught = true;
108 } 83 }
109 assertTrue(caught); 84 assertTrue(caught);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698