OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 // Test for conflicting variable bindings. | 5 // Test for conflicting variable bindings. |
6 | 6 |
7 // Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let | 7 // Flags: --no-legacy-const --harmony-sloppy --harmony-sloppy-let |
8 | 8 |
9 function CheckException(e) { | 9 function CheckException(e) { |
10 var string = e.toString(); | 10 var string = e.toString(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 "let x = 0;", | 74 "let x = 0;", |
75 "let x = undefined;", | 75 "let x = undefined;", |
76 "let x = function() {};", | 76 "let x = function() {};", |
77 "let x, y;", | 77 "let x, y;", |
78 "let y, x;", | 78 "let y, x;", |
79 "const x = 0;", | 79 "const x = 0;", |
80 "const x = undefined;", | 80 "const x = undefined;", |
81 "const x = function() {};", | 81 "const x = function() {};", |
82 "const x = 2, y = 3;", | 82 "const x = 2, y = 3;", |
83 "const y = 4, x = 5;", | 83 "const y = 4, x = 5;", |
| 84 "class x { }", |
84 ]; | 85 ]; |
| 86 function forCompatible(bind) { |
| 87 return !bind.startsWith('class'); |
| 88 } |
85 var varbinds = [ "var x;", | 89 var varbinds = [ "var x;", |
86 "var x = 0;", | 90 "var x = 0;", |
87 "var x = undefined;", | 91 "var x = undefined;", |
88 "var x = function() {};", | 92 "var x = function() {};", |
89 "var x, y;", | 93 "var x, y;", |
90 "var y, x;", | 94 "var y, x;", |
91 ]; | 95 ]; |
92 var funbind = "function x() {}"; | 96 var funbind = "function x() {}"; |
93 | 97 |
94 for (var l = 0; l < letbinds.length; ++l) { | 98 for (var l = 0; l < letbinds.length; ++l) { |
95 // Test conflicting let/var bindings. | 99 // Test conflicting let/var bindings. |
96 for (var v = 0; v < varbinds.length; ++v) { | 100 for (var v = 0; v < varbinds.length; ++v) { |
97 // Same level. | 101 // Same level. |
98 TestConflict(letbinds[l] + varbinds[v]); | 102 TestConflict(letbinds[l] + varbinds[v]); |
99 TestConflict(varbinds[v] + letbinds[l]); | 103 TestConflict(varbinds[v] + letbinds[l]); |
100 // Different level. | 104 // Different level. |
101 TestConflict(letbinds[l] + '{' + varbinds[v] + '}'); | 105 TestConflict(letbinds[l] + '{' + varbinds[v] + '}'); |
102 TestConflict('{' + varbinds[v] +'}' + letbinds[l]); | 106 TestConflict('{' + varbinds[v] +'}' + letbinds[l]); |
103 TestNoConflict(varbinds[v] + '{' + letbinds[l] + '}'); | 107 TestNoConflict(varbinds[v] + '{' + letbinds[l] + '}'); |
104 TestNoConflict('{' + letbinds[l] + '}' + varbinds[v]); | 108 TestNoConflict('{' + letbinds[l] + '}' + varbinds[v]); |
105 // For loop. | 109 // For loop. |
106 TestConflict('for (' + letbinds[l] + '0;) {' + varbinds[v] + '}'); | 110 if (forCompatible(letbinds[l])) { |
| 111 TestConflict('for (' + letbinds[l] + '0;) {' + varbinds[v] + '}'); |
| 112 } |
107 TestNoConflict('for (' + varbinds[v] + '0;) {' + letbinds[l] + '}'); | 113 TestNoConflict('for (' + varbinds[v] + '0;) {' + letbinds[l] + '}'); |
108 } | 114 } |
109 | 115 |
110 // Test conflicting let/let bindings. | 116 // Test conflicting let/let bindings. |
111 for (var k = 0; k < letbinds.length; ++k) { | 117 for (var k = 0; k < letbinds.length; ++k) { |
112 // Same level. | 118 // Same level. |
113 TestConflict(letbinds[l] + letbinds[k]); | 119 TestConflict(letbinds[l] + letbinds[k]); |
114 TestConflict(letbinds[k] + letbinds[l]); | 120 TestConflict(letbinds[k] + letbinds[l]); |
115 // Different level. | 121 // Different level. |
116 TestNoConflict(letbinds[l] + '{ ' + letbinds[k] + '}'); | 122 TestNoConflict(letbinds[l] + '{ ' + letbinds[k] + '}'); |
117 TestNoConflict('{' + letbinds[k] +'} ' + letbinds[l]); | 123 TestNoConflict('{' + letbinds[k] +'} ' + letbinds[l]); |
118 // For loop. | 124 // For loop. |
119 TestNoConflict('for (' + letbinds[l] + '0;) {' + letbinds[k] + '}'); | 125 if (forCompatible(letbinds[l])) { |
120 TestNoConflict('for (' + letbinds[k] + '0;) {' + letbinds[l] + '}'); | 126 TestNoConflict('for (' + letbinds[l] + '0;) {' + letbinds[k] + '}'); |
| 127 } |
| 128 if (forCompatible(letbinds[k])) { |
| 129 TestNoConflict('for (' + letbinds[k] + '0;) {' + letbinds[l] + '}'); |
| 130 } |
121 } | 131 } |
122 | 132 |
123 // Test conflicting function/let bindings. | 133 // Test conflicting function/let bindings. |
124 // Same level. | 134 // Same level. |
125 TestConflict(letbinds[l] + funbind); | 135 TestConflict(letbinds[l] + funbind); |
126 TestConflict(funbind + letbinds[l]); | 136 TestConflict(funbind + letbinds[l]); |
127 // Different level. | 137 // Different level. |
128 TestNoConflict(letbinds[l] + '{' + funbind + '}'); | 138 TestNoConflict(letbinds[l] + '{' + funbind + '}'); |
129 TestNoConflict('{' + funbind + '}' + letbinds[l]); | 139 TestNoConflict('{' + funbind + '}' + letbinds[l]); |
130 TestNoConflict(funbind + '{' + letbinds[l] + '}'); | 140 TestNoConflict(funbind + '{' + letbinds[l] + '}'); |
131 TestNoConflict('{' + letbinds[l] + '}' + funbind); | 141 TestNoConflict('{' + letbinds[l] + '}' + funbind); |
132 // For loop. | 142 // For loop. |
133 TestNoConflict('for (' + letbinds[l] + '0;) {' + funbind + '}'); | 143 if (forCompatible(letbinds[l])) { |
| 144 TestNoConflict('for (' + letbinds[l] + '0;) {' + funbind + '}'); |
| 145 } |
134 | 146 |
135 // Test conflicting parameter/let bindings. | 147 // Test conflicting parameter/let bindings. |
136 TestConflict('(function(x) {' + letbinds[l] + '})();'); | 148 TestConflict('(function(x) {' + letbinds[l] + '})();'); |
137 } | 149 } |
138 | 150 |
139 // Test conflicting function/var bindings. | 151 // Test conflicting function/var bindings. |
140 for (var v = 0; v < varbinds.length; ++v) { | 152 for (var v = 0; v < varbinds.length; ++v) { |
141 // Same level. | 153 // Same level. |
142 TestLocalConflict(varbinds[v] + funbind); | 154 TestLocalConflict(varbinds[v] + funbind); |
143 TestLocalConflict(funbind + varbinds[v]); | 155 TestLocalConflict(funbind + varbinds[v]); |
(...skipping 14 matching lines...) Expand all Loading... |
158 // Test conflicting parameter/var bindings. | 170 // Test conflicting parameter/var bindings. |
159 for (var v = 0; v < varbinds.length; ++v) { | 171 for (var v = 0; v < varbinds.length; ++v) { |
160 TestNoConflict('(function (x) {' + varbinds[v] + '})();'); | 172 TestNoConflict('(function (x) {' + varbinds[v] + '})();'); |
161 } | 173 } |
162 | 174 |
163 // Test conflicting catch/function bindings. | 175 // Test conflicting catch/function bindings. |
164 TestNoConflict('try {} catch(x) {' + funbind + '}'); | 176 TestNoConflict('try {} catch(x) {' + funbind + '}'); |
165 | 177 |
166 // Test conflicting parameter/function bindings. | 178 // Test conflicting parameter/function bindings. |
167 TestNoConflict('(function (x) {' + funbind + '})();'); | 179 TestNoConflict('(function (x) {' + funbind + '})();'); |
OLD | NEW |