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

Side by Side Diff: test/cctest/parsing/test-preparser.cc

Issue 2686663002: Reland of [parsing] Fix maybe-assigned for loop variables. (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « src/parsing/preparser.cc ('k') | test/cctest/scope-test-helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 the V8 project authors. All rights reserved. 1 // Copyright 2017 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 #include "src/ast/ast.h" 5 #include "src/ast/ast.h"
6 #include "src/compiler.h" 6 #include "src/compiler.h"
7 #include "src/objects-inl.h" 7 #include "src/objects-inl.h"
8 #include "src/parsing/parse-info.h" 8 #include "src/parsing/parse-info.h"
9 #include "src/parsing/parsing.h" 9 #include "src/parsing/parsing.h"
10 10
(...skipping 12 matching lines...) Expand all
23 const char* prefix = "(function outer() { "; 23 const char* prefix = "(function outer() { ";
24 const char* suffix = " })();"; 24 const char* suffix = " })();";
25 int prefix_len = Utf8LengthHelper(prefix); 25 int prefix_len = Utf8LengthHelper(prefix);
26 int suffix_len = Utf8LengthHelper(suffix); 26 int suffix_len = Utf8LengthHelper(suffix);
27 27
28 // The scope start positions must match; note the extra space in lazy_inner. 28 // The scope start positions must match; note the extra space in lazy_inner.
29 const char* lazy_inner = " function inner(%s) { %s }"; 29 const char* lazy_inner = " function inner(%s) { %s }";
30 const char* eager_inner = "(function inner(%s) { %s })()"; 30 const char* eager_inner = "(function inner(%s) { %s })()";
31 31
32 struct { 32 struct {
33 bool precise_maybe_assigned;
33 const char* params; 34 const char* params;
34 const char* source; 35 const char* source;
35 } inners[] = { 36 } inners[] = {
36 // Simple cases 37 // Simple cases
37 {"", "var1;"}, 38 {1, "", "var1;"},
38 {"", "var1 = 5;"}, 39 {1, "", "var1 = 5;"},
39 {"", "if (true) {}"}, 40 {1, "", "if (true) {}"},
40 {"", "function f1() {}"}, 41 {1, "", "function f1() {}"},
41 42
42 // Var declarations and assignments. 43 // Var declarations and assignments.
43 {"", "var var1;"}, 44 {1, "", "var var1;"},
44 {"", "var var1; var1 = 5;"}, 45 {1, "", "var var1; var1 = 5;"},
45 {"", "if (true) { var var1; }"}, 46 {0, "", "if (true) { var var1; }"},
46 {"", "if (true) { var var1; var1 = 5; }"}, 47 {1, "", "if (true) { var var1; var1 = 5; }"},
47 {"", "var var1; function f() { var1; }"}, 48 {1, "", "var var1; function f() { var1; }"},
48 {"", "var var1; var1 = 5; function f() { var1; }"}, 49 {1, "", "var var1; var1 = 5; function f() { var1; }"},
49 {"", "var var1; function f() { var1 = 5; }"}, 50 {1, "", "var var1; function f() { var1 = 5; }"},
50 51
51 // Let declarations and assignments. 52 // Let declarations and assignments.
52 {"", "let var1;"}, 53 {1, "", "let var1;"},
53 {"", "let var1; var1 = 5;"}, 54 {1, "", "let var1; var1 = 5;"},
54 {"", "if (true) { let var1; }"}, 55 {1, "", "if (true) { let var1; }"},
55 {"", "if (true) { let var1; var1 = 5; }"}, 56 {1, "", "if (true) { let var1; var1 = 5; }"},
56 {"", "let var1; function f() { var1; }"}, 57 {1, "", "let var1; function f() { var1; }"},
57 {"", "let var1; var1 = 5; function f() { var1; }"}, 58 {1, "", "let var1; var1 = 5; function f() { var1; }"},
58 {"", "let var1; function f() { var1 = 5; }"}, 59 {1, "", "let var1; function f() { var1 = 5; }"},
59 60
60 // Const declarations. 61 // Const declarations.
61 {"", "const var1 = 5;"}, 62 {1, "", "const var1 = 5;"},
62 {"", "if (true) { const var1 = 5; }"}, 63 {1, "", "if (true) { const var1 = 5; }"},
63 {"", "const var1 = 5; function f() { var1; }"}, 64 {1, "", "const var1 = 5; function f() { var1; }"},
64 65
65 // Redeclarations. 66 // Redeclarations.
66 {"", "var var1; var var1;"}, 67 {1, "", "var var1; var var1;"},
67 {"", "var var1; var var1; var1 = 5;"}, 68 {1, "", "var var1; var var1; var1 = 5;"},
68 {"", "var var1; if (true) { var var1; }"}, 69 {1, "", "var var1; if (true) { var var1; }"},
69 {"", "if (true) { var var1; var var1; }"}, 70 {1, "", "if (true) { var var1; var var1; }"},
70 {"", "var var1; if (true) { var var1; var1 = 5; }"}, 71 {1, "", "var var1; if (true) { var var1; var1 = 5; }"},
71 {"", "if (true) { var var1; var var1; var1 = 5; }"}, 72 {1, "", "if (true) { var var1; var var1; var1 = 5; }"},
72 {"", "var var1; var var1; function f() { var1; }"}, 73 {1, "", "var var1; var var1; function f() { var1; }"},
73 {"", "var var1; var var1; function f() { var1 = 5; }"}, 74 {1, "", "var var1; var var1; function f() { var1 = 5; }"},
74 75
75 // Shadowing declarations. 76 // Shadowing declarations.
76 {"", "var var1; if (true) { var var1; }"}, 77 {1, "", "var var1; if (true) { var var1; }"},
77 {"", "var var1; if (true) { let var1; }"}, 78 {1, "", "var var1; if (true) { let var1; }"},
78 {"", "let var1; if (true) { let var1; }"}, 79 {1, "", "let var1; if (true) { let var1; }"},
79 80
80 {"", "var var1; if (true) { const var1 = 0; }"}, 81 {1, "", "var var1; if (true) { const var1 = 0; }"},
81 {"", "const var1 = 0; if (true) { const var1 = 0; }"}, 82 {1, "", "const var1 = 0; if (true) { const var1 = 0; }"},
82 83
83 // Arguments and this. 84 // Arguments and this.
84 {"", "arguments;"}, 85 {1, "", "arguments;"},
85 {"", "arguments = 5;"}, 86 {1, "", "arguments = 5;"},
86 {"", "if (true) { arguments; }"}, 87 {1, "", "if (true) { arguments; }"},
87 {"", "if (true) { arguments = 5; }"}, 88 {1, "", "if (true) { arguments = 5; }"},
88 {"", "function f() { arguments; }"}, 89 {1, "", "function f() { arguments; }"},
89 {"", "function f() { arguments = 5; }"}, 90 {1, "", "function f() { arguments = 5; }"},
90 91
91 {"", "this;"}, 92 {1, "", "this;"},
92 {"", "if (true) { this; }"}, 93 {1, "", "if (true) { this; }"},
93 {"", "function f() { this; }"}, 94 {1, "", "function f() { this; }"},
94 95
95 // Variable called "arguments" 96 // Variable called "arguments"
96 {"", "var arguments;"}, 97 {1, "", "var arguments;"},
97 {"", "var arguments; arguments = 5;"}, 98 {1, "", "var arguments; arguments = 5;"},
98 {"", "if (true) { var arguments; }"}, 99 {0, "", "if (true) { var arguments; }"},
99 {"", "if (true) { var arguments; arguments = 5; }"}, 100 {1, "", "if (true) { var arguments; arguments = 5; }"},
100 {"", "var arguments; function f() { arguments; }"}, 101 {1, "", "var arguments; function f() { arguments; }"},
101 {"", "var arguments; arguments = 5; function f() { arguments; }"}, 102 {1, "", "var arguments; arguments = 5; function f() { arguments; }"},
102 {"", "var arguments; function f() { arguments = 5; }"}, 103 {1, "", "var arguments; function f() { arguments = 5; }"},
103 104
104 {"", "let arguments;"}, 105 {1, "", "let arguments;"},
105 {"", "let arguments; arguments = 5;"}, 106 {1, "", "let arguments; arguments = 5;"},
106 {"", "if (true) { let arguments; }"}, 107 {1, "", "if (true) { let arguments; }"},
107 {"", "if (true) { let arguments; arguments = 5; }"}, 108 {1, "", "if (true) { let arguments; arguments = 5; }"},
108 {"", "let arguments; function f() { arguments; }"}, 109 {1, "", "let arguments; function f() { arguments; }"},
109 {"", "let arguments; arguments = 5; function f() { arguments; }"}, 110 {1, "", "let arguments; arguments = 5; function f() { arguments; }"},
110 {"", "let arguments; function f() { arguments = 5; }"}, 111 {1, "", "let arguments; function f() { arguments = 5; }"},
111 112
112 {"", "const arguments = 5;"}, 113 {1, "", "const arguments = 5;"},
113 {"", "if (true) { const arguments = 5; }"}, 114 {1, "", "if (true) { const arguments = 5; }"},
114 {"", "const arguments = 5; function f() { arguments; }"}, 115 {1, "", "const arguments = 5; function f() { arguments; }"},
115 116
116 // Destructuring declarations. 117 // Destructuring declarations.
117 {"", "var [var1, var2] = [1, 2];"}, 118 {1, "", "var [var1, var2] = [1, 2];"},
118 {"", "var [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"}, 119 {1, "", "var [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"},
119 {"", "var [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"}, 120 {1, "", "var [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"},
120 {"", "var [var1, ...var2] = [1, 2, 3];"}, 121 {1, "", "var [var1, ...var2] = [1, 2, 3];"},
121 122
122 {"", "var {var1: var2, var3: var4} = {var1: 1, var3: 2};"}, 123 {1, "", "var {var1: var2, var3: var4} = {var1: 1, var3: 2};"},
123 {"", 124 {1, "",
124 "var {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"}, 125 "var {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"},
125 {"", "var {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"}, 126 {1, "",
126 127 "var {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"},
127 {"", "let [var1, var2] = [1, 2];"}, 128
128 {"", "let [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"}, 129 {1, "", "let [var1, var2] = [1, 2];"},
129 {"", "let [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"}, 130 {1, "", "let [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"},
130 {"", "let [var1, ...var2] = [1, 2, 3];"}, 131 {1, "", "let [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"},
131 132 {1, "", "let [var1, ...var2] = [1, 2, 3];"},
132 {"", "let {var1: var2, var3: var4} = {var1: 1, var3: 2};"}, 133
133 {"", 134 {1, "", "let {var1: var2, var3: var4} = {var1: 1, var3: 2};"},
135 {1, "",
134 "let {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"}, 136 "let {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"},
135 {"", "let {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"}, 137 {1, "",
136 138 "let {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"},
137 {"", "const [var1, var2] = [1, 2];"}, 139
138 {"", "const [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"}, 140 {1, "", "const [var1, var2] = [1, 2];"},
139 {"", "const [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"}, 141 {1, "", "const [var1, var2, [var3, var4]] = [1, 2, [3, 4]];"},
140 {"", "const [var1, ...var2] = [1, 2, 3];"}, 142 {1, "", "const [{var1: var2}, {var3: var4}] = [{var1: 1}, {var3: 2}];"},
141 143 {1, "", "const [var1, ...var2] = [1, 2, 3];"},
142 {"", "const {var1: var2, var3: var4} = {var1: 1, var3: 2};"}, 144
143 {"", 145 {1, "", "const {var1: var2, var3: var4} = {var1: 1, var3: 2};"},
146 {1, "",
144 "const {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"}, 147 "const {var1: var2, var3: {var4: var5}} = {var1: 1, var3: {var4: 2}};"},
145 {"", "const {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"}, 148 {1, "",
149 "const {var1: var2, var3: [var4, var5]} = {var1: 1, var3: [2, 3]};"},
146 150
147 // Referencing the function variable. 151 // Referencing the function variable.
148 {"", "inner;"}, 152 {1, "", "inner;"},
149 {"", "function f1() { f1; }"}, 153 {1, "", "function f1() { f1; }"},
150 {"", "function f1() { inner; }"}, 154 {1, "", "function f1() { inner; }"},
151 {"", "function f1() { function f2() { f1; } }"}, 155 {1, "", "function f1() { function f2() { f1; } }"},
152 {"", "function arguments() {}"}, 156 {1, "", "function arguments() {}"},
153 {"", "function f1() {} function f1() {}"}, 157 {1, "", "function f1() {} function f1() {}"},
154 {"", "var f1; function f1() {}"}, 158 {1, "", "var f1; function f1() {}"},
155 159
156 // Assigning to the function variable. 160 // Assigning to the function variable.
157 {"", "inner = 3;"}, 161 {1, "", "inner = 3;"},
158 {"", "function f1() { f1 = 3; }"}, 162 {1, "", "function f1() { f1 = 3; }"},
159 {"", "function f1() { f1; } f1 = 3;"}, 163 {1, "", "function f1() { f1; } f1 = 3;"},
160 {"", "function arguments() {} arguments = 8"}, 164 {1, "", "function arguments() {} arguments = 8"},
161 {"", "function f1() {} f1 = 3; function f1() {}"}, 165 {1, "", "function f1() {} f1 = 3; function f1() {}"},
162 166
163 // Evals. 167 // Evals.
164 {"", "var var1; eval('');"}, 168 {1, "", "var var1; eval('');"},
165 {"", "var var1; function f1() { eval(''); }"}, 169 {1, "", "var var1; function f1() { eval(''); }"},
166 {"", "let var1; eval('');"}, 170 {1, "", "let var1; eval('');"},
167 {"", "let var1; function f1() { eval(''); }"}, 171 {1, "", "let var1; function f1() { eval(''); }"},
168 {"", "const var1 = 10; eval('');"}, 172 {1, "", "const var1 = 10; eval('');"},
169 {"", "const var1 = 10; function f1() { eval(''); }"}, 173 {1, "", "const var1 = 10; function f1() { eval(''); }"},
170 174
171 // Standard for loops. 175 // Standard for loops.
172 {"", "for (var var1 = 0; var1 < 10; ++var1) { }"}, 176 {1, "", "for (var var1 = 0; var1 < 10; ++var1) { }"},
173 {"", "for (let var1 = 0; var1 < 10; ++var1) { }"}, 177 {1, "", "for (let var1 = 0; var1 < 10; ++var1) { }"},
174 {"", "for (const var1 = 0; var1 < 10; ++var1) { }"}, 178 {1, "", "for (const var1 = 0; var1 < 10; ++var1) { }"},
175 179
176 {"", 180 {1, "",
177 "for (var var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"}, 181 "for (var var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"},
178 {"", 182 {1, "",
179 "for (let var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"}, 183 "for (let var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"},
180 {"", 184 {1, "",
181 "for (const var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"}, 185 "for (const var1 = 0; var1 < 10; ++var1) { function foo() { var1; } }"},
182 {"", 186 {1, "",
183 "'use strict'; for (var var1 = 0; var1 < 10; ++var1) { function foo() { " 187 "'use strict'; for (var var1 = 0; var1 < 10; ++var1) { function foo() { "
184 "var1; } }"}, 188 "var1; } }"},
185 {"", 189 {1, "",
186 "'use strict'; for (let var1 = 0; var1 < 10; ++var1) { function foo() { " 190 "'use strict'; for (let var1 = 0; var1 < 10; ++var1) { function foo() { "
187 "var1; } }"}, 191 "var1; } }"},
188 {"", 192 {1, "",
189 "'use strict'; for (const var1 = 0; var1 < 10; ++var1) { function foo() " 193 "'use strict'; for (const var1 = 0; var1 < 10; ++var1) { function foo() "
190 "{ var1; } }"}, 194 "{ var1; } }"},
191 195
192 // For of loops 196 // For of loops
193 {"", "for (var1 of [1, 2]) { }"}, 197 {1, "", "for (var1 of [1, 2]) { }"},
194 {"", "for (var var1 of [1, 2]) { }"}, 198 {1, "", "for (var var1 of [1, 2]) { }"},
195 {"", "for (let var1 of [1, 2]) { }"}, 199 {1, "", "for (let var1 of [1, 2]) { }"},
196 {"", "for (const var1 of [1, 2]) { }"}, 200 {1, "", "for (const var1 of [1, 2]) { }"},
197 201
198 {"", "for (var1 of [1, 2]) { var1; }"}, 202 {1, "", "for (var1 of [1, 2]) { var1; }"},
199 {"", "for (var var1 of [1, 2]) { var1; }"}, 203 {1, "", "for (var var1 of [1, 2]) { var1; }"},
200 {"", "for (let var1 of [1, 2]) { var1; }"}, 204 {1, "", "for (let var1 of [1, 2]) { var1; }"},
201 {"", "for (const var1 of [1, 2]) { var1; }"}, 205 {1, "", "for (const var1 of [1, 2]) { var1; }"},
202 206
203 {"", "for (var1 of [1, 2]) { var1 = 0; }"}, 207 {1, "", "for (var1 of [1, 2]) { var1 = 0; }"},
204 {"", "for (var var1 of [1, 2]) { var1 = 0; }"}, 208 {1, "", "for (var var1 of [1, 2]) { var1 = 0; }"},
205 {"", "for (let var1 of [1, 2]) { var1 = 0; }"}, 209 {1, "", "for (let var1 of [1, 2]) { var1 = 0; }"},
206 {"", "for (const var1 of [1, 2]) { var1 = 0; }"}, 210 {1, "", "for (const var1 of [1, 2]) { var1 = 0; }"},
207 211
208 {"", "for (var1 of [1, 2]) { function foo() { var1; } }"}, 212 {1, "", "for (var1 of [1, 2]) { function foo() { var1; } }"},
209 {"", "for (var var1 of [1, 2]) { function foo() { var1; } }"}, 213 {1, "", "for (var var1 of [1, 2]) { function foo() { var1; } }"},
210 {"", "for (let var1 of [1, 2]) { function foo() { var1; } }"}, 214 {1, "", "for (let var1 of [1, 2]) { function foo() { var1; } }"},
211 {"", "for (const var1 of [1, 2]) { function foo() { var1; } }"}, 215 {1, "", "for (const var1 of [1, 2]) { function foo() { var1; } }"},
212 216
213 {"", "for (var1 of [1, 2]) { function foo() { var1 = 0; } }"}, 217 {1, "", "for (var1 of [1, 2]) { function foo() { var1 = 0; } }"},
214 {"", "for (var var1 of [1, 2]) { function foo() { var1 = 0; } }"}, 218 {1, "", "for (var var1 of [1, 2]) { function foo() { var1 = 0; } }"},
215 {"", "for (let var1 of [1, 2]) { function foo() { var1 = 0; } }"}, 219 {1, "", "for (let var1 of [1, 2]) { function foo() { var1 = 0; } }"},
216 {"", "for (const var1 of [1, 2]) { function foo() { var1 = 0; } }"}, 220 {1, "", "for (const var1 of [1, 2]) { function foo() { var1 = 0; } }"},
217 221
218 // For in loops 222 // For in loops
219 {"", "for (var1 in {a: 6}) { }"}, 223 {1, "", "for (var1 in {a: 6}) { }"},
220 {"", "for (var var1 in {a: 6}) { }"}, 224 {1, "", "for (var var1 in {a: 6}) { }"},
221 {"", "for (let var1 in {a: 6}) { }"}, 225 {1, "", "for (let var1 in {a: 6}) { }"},
222 {"", "for (const var1 in {a: 6}) { }"}, 226 {1, "", "for (const var1 in {a: 6}) { }"},
223 227
224 {"", "for (var1 in {a: 6}) { var1; }"}, 228 {1, "", "for (var1 in {a: 6}) { var1; }"},
225 {"", "for (var var1 in {a: 6}) { var1; }"}, 229 {1, "", "for (var var1 in {a: 6}) { var1; }"},
226 {"", "for (let var1 in {a: 6}) { var1; }"}, 230 {1, "", "for (let var1 in {a: 6}) { var1; }"},
227 {"", "for (const var1 in {a: 6}) { var1; }"}, 231 {1, "", "for (const var1 in {a: 6}) { var1; }"},
228 232
229 {"", "for (var1 in {a: 6}) { var1 = 0; }"}, 233 {1, "", "for (var1 in {a: 6}) { var1 = 0; }"},
230 {"", "for (var var1 in {a: 6}) { var1 = 0; }"}, 234 {1, "", "for (var var1 in {a: 6}) { var1 = 0; }"},
231 {"", "for (let var1 in {a: 6}) { var1 = 0; }"}, 235 {1, "", "for (let var1 in {a: 6}) { var1 = 0; }"},
232 {"", "for (const var1 in {a: 6}) { var1 = 0; }"}, 236 {1, "", "for (const var1 in {a: 6}) { var1 = 0; }"},
233 237
234 {"", "for (var1 in {a: 6}) { function foo() { var1; } }"}, 238 {1, "", "for (var1 in {a: 6}) { function foo() { var1; } }"},
235 {"", "for (var var1 in {a: 6}) { function foo() { var1; } }"}, 239 {1, "", "for (var var1 in {a: 6}) { function foo() { var1; } }"},
236 {"", "for (let var1 in {a: 6}) { function foo() { var1; } }"}, 240 {1, "", "for (let var1 in {a: 6}) { function foo() { var1; } }"},
237 {"", "for (const var1 in {a: 6}) { function foo() { var1; } }"}, 241 {1, "", "for (const var1 in {a: 6}) { function foo() { var1; } }"},
238 242
239 {"", "for (var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 243 {1, "", "for (var1 in {a: 6}) { function foo() { var1 = 0; } }"},
240 {"", "for (var var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 244 {1, "", "for (var var1 in {a: 6}) { function foo() { var1 = 0; } }"},
241 {"", "for (let var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 245 {1, "", "for (let var1 in {a: 6}) { function foo() { var1 = 0; } }"},
242 {"", "for (const var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 246 {1, "", "for (const var1 in {a: 6}) { function foo() { var1 = 0; } }"},
243 247
244 {"", "for (var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 248 {1, "", "for (var1 in {a: 6}) { function foo() { var1 = 0; } }"},
245 {"", "for (var var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 249 {1, "", "for (var var1 in {a: 6}) { function foo() { var1 = 0; } }"},
246 {"", "for (let var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 250 {1, "", "for (let var1 in {a: 6}) { function foo() { var1 = 0; } }"},
247 {"", "for (const var1 in {a: 6}) { function foo() { var1 = 0; } }"}, 251 {1, "", "for (const var1 in {a: 6}) { function foo() { var1 = 0; } }"},
248 252
249 // Loops without declarations 253 // Loops without declarations
250 {"", "var var1 = 0; for ( ; var1 < 2; ++var1) { }"}, 254 {1, "", "var var1 = 0; for ( ; var1 < 2; ++var1) { }"},
251 {"", 255 {1, "",
252 "var var1 = 0; for ( ; var1 < 2; ++var1) { function foo() { var1; } }"}, 256 "var var1 = 0; for ( ; var1 < 2; ++var1) { function foo() { var1; } }"},
253 {"", "var var1 = 0; for ( ; var1 > 2; ) { }"}, 257 {1, "", "var var1 = 0; for ( ; var1 > 2; ) { }"},
254 {"", "var var1 = 0; for ( ; var1 > 2; ) { function foo() { var1; } }"}, 258 {1, "", "var var1 = 0; for ( ; var1 > 2; ) { function foo() { var1; } }"},
255 {"", 259 {1, "",
256 "var var1 = 0; for ( ; var1 > 2; ) { function foo() { var1 = 6; } }"}, 260 "var var1 = 0; for ( ; var1 > 2; ) { function foo() { var1 = 6; } }"},
257 261
258 {"", "var var1 = 0; for(var1; var1 < 2; ++var1) { }"}, 262 {1, "", "var var1 = 0; for(var1; var1 < 2; ++var1) { }"},
259 {"", 263 {1, "",
260 "var var1 = 0; for (var1; var1 < 2; ++var1) { function foo() { var1; } " 264 "var var1 = 0; for (var1; var1 < 2; ++var1) { function foo() { var1; } "
261 "}"}, 265 "}"},
262 {"", "var var1 = 0; for (var1; var1 > 2; ) { }"}, 266 {1, "", "var var1 = 0; for (var1; var1 > 2; ) { }"},
263 {"", "var var1 = 0; for (var1; var1 > 2; ) { function foo() { var1; } }"}, 267 {1, "",
264 {"", 268 "var var1 = 0; for (var1; var1 > 2; ) { function foo() { var1; } }"},
269 {1, "",
265 "var var1 = 0; for (var1; var1 > 2; ) { function foo() { var1 = 6; } }"}, 270 "var var1 = 0; for (var1; var1 > 2; ) { function foo() { var1 = 6; } }"},
266 271
267 // Sloppy block functions. 272 // Sloppy block functions.
268 {"", "if (true) { function f1() {} }"}, 273 {1, "", "if (true) { function f1() {} }"},
269 {"", "if (true) { function f1() {} function f1() {} }"}, 274 {1, "", "if (true) { function f1() {} function f1() {} }"},
270 {"", "if (true) { if (true) { function f1() {} } }"}, 275 {1, "", "if (true) { if (true) { function f1() {} } }"},
271 {"", "if (true) { if (true) { function f1() {} function f1() {} } }"}, 276 {1, "", "if (true) { if (true) { function f1() {} function f1() {} } }"},
272 {"", "if (true) { function f1() {} f1 = 3; }"}, 277 {1, "", "if (true) { function f1() {} f1 = 3; }"},
273 278
274 {"", "if (true) { function f1() {} function foo() { f1; } }"}, 279 {1, "", "if (true) { function f1() {} function foo() { f1; } }"},
275 {"", "if (true) { function f1() {} } function foo() { f1; }"}, 280 {1, "", "if (true) { function f1() {} } function foo() { f1; }"},
276 {"", 281 {1, "",
277 "if (true) { function f1() {} function f1() {} function foo() { f1; } " 282 "if (true) { function f1() {} function f1() {} function foo() { f1; } "
278 "}"}, 283 "}"},
279 {"", 284 {1, "",
280 "if (true) { function f1() {} function f1() {} } function foo() { f1; " 285 "if (true) { function f1() {} function f1() {} } function foo() { f1; "
281 "}"}, 286 "}"},
282 {"", 287 {1, "",
283 "if (true) { if (true) { function f1() {} } function foo() { f1; } }"}, 288 "if (true) { if (true) { function f1() {} } function foo() { f1; } }"},
284 {"", 289 {1, "",
285 "if (true) { if (true) { function f1() {} function f1() {} } function " 290 "if (true) { if (true) { function f1() {} function f1() {} } function "
286 "foo() { f1; } }"}, 291 "foo() { f1; } }"},
287 {"", "if (true) { function f1() {} f1 = 3; function foo() { f1; } }"}, 292 {1, "", "if (true) { function f1() {} f1 = 3; function foo() { f1; } }"},
288 {"", "if (true) { function f1() {} f1 = 3; } function foo() { f1; }"}, 293 {1, "", "if (true) { function f1() {} f1 = 3; } function foo() { f1; }"},
289 294
290 {"", "function inner2() { if (true) { function f1() {} } }"}, 295 {1, "", "function inner2() { if (true) { function f1() {} } }"},
291 {"", "function inner2() { if (true) { function f1() {} f1 = 3; } }"}, 296 {1, "", "function inner2() { if (true) { function f1() {} f1 = 3; } }"},
292 297
293 {"", "var f1 = 1; if (true) { function f1() {} }"}, 298 {1, "", "var f1 = 1; if (true) { function f1() {} }"},
294 {"", "var f1 = 1; if (true) { function f1() {} } function foo() { f1; }"}, 299 {1, "",
300 "var f1 = 1; if (true) { function f1() {} } function foo() { f1; }"},
295 }; 301 };
296 302
297 for (unsigned i = 0; i < arraysize(inners); ++i) { 303 for (unsigned i = 0; i < arraysize(inners); ++i) {
298 // First compile with the lazy inner function and extract the scope data. 304 // First compile with the lazy inner function and extract the scope data.
299 const char* inner_function = lazy_inner; 305 const char* inner_function = lazy_inner;
300 int inner_function_len = Utf8LengthHelper(inner_function) - 4; 306 int inner_function_len = Utf8LengthHelper(inner_function) - 4;
301 307
302 int params_len = Utf8LengthHelper(inners[i].params); 308 int params_len = Utf8LengthHelper(inners[i].params);
303 int source_len = Utf8LengthHelper(inners[i].source); 309 int source_len = Utf8LengthHelper(inners[i].source);
304 int len = 310 int len =
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 CHECK(i::Compiler::Analyze(&eager_info)); 357 CHECK(i::Compiler::Analyze(&eager_info));
352 358
353 i::Scope* scope = 359 i::Scope* scope =
354 eager_info.literal()->scope()->inner_scope()->inner_scope(); 360 eager_info.literal()->scope()->inner_scope()->inner_scope();
355 DCHECK_NOT_NULL(scope); 361 DCHECK_NOT_NULL(scope);
356 DCHECK_NULL(scope->sibling()); 362 DCHECK_NULL(scope->sibling());
357 DCHECK(scope->is_function_scope()); 363 DCHECK(scope->is_function_scope());
358 364
359 size_t index = 0; 365 size_t index = 0;
360 i::ScopeTestHelper::CompareScopeToData( 366 i::ScopeTestHelper::CompareScopeToData(
361 scope, lazy_info.preparsed_scope_data(), index); 367 scope, lazy_info.preparsed_scope_data(), index,
368 inners[i].precise_maybe_assigned);
362 } 369 }
363 } 370 }
OLDNEW
« no previous file with comments | « src/parsing/preparser.cc ('k') | test/cctest/scope-test-helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698