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

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

Issue 1858943002: Remove runtime flags for sloppy mode block scoping features (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased Created 4 years, 8 months 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
(Empty)
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
3 // found in the LICENSE file.
4
5 // Flags: --harmony-sloppy --harmony-sloppy-let --harmony-sloppy-function
6
7 // Var-let conflict in a function throws, even if the var is in an eval
8
9 // Throws at the top level of a function
10 assertThrows(function() {
11 let x = 1;
12 eval('var x');
13 }, TypeError);
14
15 // If the eval is in its own block scope, throws
16 assertThrows(function() {
17 let y = 1;
18 { eval('var y'); }
19 }, TypeError);
20
21 // If the let is in its own block scope, with the eval, throws
22 assertThrows(function() {
23 {
24 let x = 1;
25 eval('var x');
26 }
27 }, TypeError);
28
29 // Legal if the let is no longer visible
30 assertDoesNotThrow(function() {
31 {
32 let x = 1;
33 }
34 eval('var x');
35 });
36
37 // All the same works for const:
38 // Throws at the top level of a function
39 assertThrows(function() {
40 const x = 1;
41 eval('var x');
42 }, TypeError);
43
44 // If the eval is in its own block scope, throws
45 assertThrows(function() {
46 const y = 1;
47 { eval('var y'); }
48 }, TypeError);
49
50 // If the const is in its own block scope, with the eval, throws
51 assertThrows(function() {
52 {
53 const x = 1;
54 eval('var x');
55 }
56 }, TypeError);
57
58 // Legal if the const is no longer visible
59 assertDoesNotThrow(function() {
60 {
61 const x = 1;
62 }
63 eval('var x');
64 });
65
66 // In global scope
67 let caught = false;
68 try {
69 let z = 1;
70 eval('var z');
71 } catch (e) {
72 caught = true;
73 }
74 assertTrue(caught);
75
76 // Let declarations beyond a function boundary don't conflict
77 caught = false;
78 try {
79 let a = 1;
80 (function() {
81 eval('var a');
82 })();
83 } catch (e) {
84 caught = true;
85 }
86 assertFalse(caught);
87
88 // var across with doesn't conflict
89 caught = false;
90 try {
91 (function() {
92 with ({x: 1}) {
93 eval("var x");
94 }
95 })();
96 } catch (e) {
97 caught = true;
98 }
99 assertFalse(caught);
100
101 // var can still conflict with let across a with
102 caught = false;
103 try {
104 (function() {
105 let x;
106 with ({x: 1}) {
107 eval("var x");
108 }
109 })();
110 } catch (e) {
111 caught = true;
112 }
113 assertTrue(caught);
114
115 // Functions declared in eval also conflict
116 caught = false
117 try {
118 (function() {
119 {
120 let x = 1;
121 eval('function x() {}');
122 }
123 })();
124 } catch (e) {
125 caught = true;
126 }
127 assertTrue(caught);
128
129 // TODO(littledan): Hoisting x out of the block should be
130 // prevented in this case BUG(v8:4479)
131 caught = false
132 try {
133 (function() {
134 {
135 let x = 1;
136 eval('{ function x() {} }');
137 }
138 })();
139 } catch (e) {
140 caught = true;
141 }
142 // TODO(littledan): switch to assertTrue when bug is fixed
143 assertTrue(caught);
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/block-const-assign-sloppy.js ('k') | test/mjsunit/harmony/block-for-sloppy.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698