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

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1963663002: [interpreter] Add checks for source position to test-bytecode-generator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix bad implicit cast. Created 4 years, 7 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 | « test/cctest/interpreter/bytecode_expectations/WithStatement.golden ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <fstream> 5 #include <fstream>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/interpreter/bytecode-array-iterator.h" 10 #include "src/interpreter/bytecode-array-iterator.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 for (const char* snippet : snippet_list) { 106 for (const char* snippet : snippet_list) {
107 std::string source_code; 107 std::string source_code;
108 if (prologue) source_code += prologue; 108 if (prologue) source_code += prologue;
109 source_code += snippet; 109 source_code += snippet;
110 if (epilogue) source_code += epilogue; 110 if (epilogue) source_code += epilogue;
111 printer.PrintExpectation(actual_stream, source_code); 111 printer.PrintExpectation(actual_stream, source_code);
112 } 112 }
113 return actual_stream.str(); 113 return actual_stream.str();
114 } 114 }
115 115
116 bool CompareTexts(const std::string& generated, const std::string& expected) {
117 std::istringstream generated_stream(generated);
118 std::istringstream expected_stream(expected);
119 std::string generated_line;
120 std::string expected_line;
121 // Line number does not include golden file header.
122 int line_number = 0;
123
124 do {
125 std::getline(generated_stream, generated_line);
126 std::getline(expected_stream, expected_line);
127
128 if (!generated_stream.good() && !expected_stream.good()) {
129 return true;
130 }
131
132 if (!generated_stream.good()) {
133 std::cerr << "Expected has extra lines after line " << line_number
134 << "\n";
135 std::cerr << " Expected: '" << expected_line << "'\n";
136 return false;
137 } else if (!expected_stream.good()) {
138 std::cerr << "Generated has extra lines after line " << line_number
139 << "\n";
140 std::cerr << " Generated: '" << generated_line << "'\n";
141 return false;
142 }
143
144 if (generated_line != expected_line) {
145 std::cerr << "Inputs differ at line " << line_number << "\n";
146 std::cerr << " Generated: '" << generated_line << "'\n";
147 std::cerr << " Expected: '" << expected_line << "'\n";
148 return false;
149 }
150 line_number++;
151 } while (true);
152 }
153
116 using ConstantPoolType = BytecodeExpectationsPrinter::ConstantPoolType; 154 using ConstantPoolType = BytecodeExpectationsPrinter::ConstantPoolType;
117 155
118 TEST(PrimitiveReturnStatements) { 156 TEST(PrimitiveReturnStatements) {
119 InitializedIgnitionHandleScope scope; 157 InitializedIgnitionHandleScope scope;
120 BytecodeExpectationsPrinter printer(CcTest::isolate(), 158 BytecodeExpectationsPrinter printer(CcTest::isolate(),
121 ConstantPoolType::kNumber); 159 ConstantPoolType::kNumber);
122 const char* snippets[] = { 160 const char* snippets[] = {
123 "", 161 "",
124 162
125 "return;", 163 "return;\n",
126 164
127 "return null;", 165 "return null;\n",
128 166
129 "return true;", 167 "return true;\n",
130 168
131 "return false;", 169 "return false;\n",
132 170
133 "return 0;", 171 "return 0;\n",
134 172
135 "return +1;", 173 "return +1;\n",
136 174
137 "return -1;", 175 "return -1;\n",
138 176
139 "return +127;", 177 "return +127;\n",
140 178
141 "return -128;", 179 "return -128;\n",
142 }; 180 };
143 181
144 CHECK_EQ(BuildActual(printer, snippets), 182 CHECK(CompareTexts(BuildActual(printer, snippets),
145 LoadGolden("PrimitiveReturnStatements.golden")); 183 LoadGolden("PrimitiveReturnStatements.golden")));
146 } 184 }
147 185
148 TEST(PrimitiveExpressions) { 186 TEST(PrimitiveExpressions) {
149 InitializedIgnitionHandleScope scope; 187 InitializedIgnitionHandleScope scope;
150 BytecodeExpectationsPrinter printer(CcTest::isolate(), 188 BytecodeExpectationsPrinter printer(CcTest::isolate(),
151 ConstantPoolType::kNumber); 189 ConstantPoolType::kNumber);
152 const char* snippets[] = { 190 const char* snippets[] = {
153 "var x = 0; return x;", 191 "var x = 0; return x;\n",
154 192
155 "var x = 0; return x + 3;", 193 "var x = 0; return x + 3;\n",
156 194
157 "var x = 0; return x - 3;", 195 "var x = 0; return x - 3;\n",
158 196
159 "var x = 4; return x * 3;", 197 "var x = 4; return x * 3;\n",
160 198
161 "var x = 4; return x / 3;", 199 "var x = 4; return x / 3;\n",
162 200
163 "var x = 4; return x % 3;", 201 "var x = 4; return x % 3;\n",
164 202
165 "var x = 1; return x | 2;", 203 "var x = 1; return x | 2;\n",
166 204
167 "var x = 1; return x ^ 2;", 205 "var x = 1; return x ^ 2;\n",
168 206
169 "var x = 1; return x & 2;", 207 "var x = 1; return x & 2;\n",
170 208
171 "var x = 10; return x << 3;", 209 "var x = 10; return x << 3;\n",
172 210
173 "var x = 10; return x >> 3;", 211 "var x = 10; return x >> 3;\n",
174 212
175 "var x = 10; return x >>> 3;", 213 "var x = 10; return x >>> 3;\n",
176 214
177 "var x = 0; return (x, 3);", 215 "var x = 0; return (x, 3);\n",
178 }; 216 };
179 217
180 CHECK_EQ(BuildActual(printer, snippets), 218 CHECK(CompareTexts(BuildActual(printer, snippets),
181 LoadGolden("PrimitiveExpressions.golden")); 219 LoadGolden("PrimitiveExpressions.golden")));
182 } 220 }
183 221
184 TEST(LogicalExpressions) { 222 TEST(LogicalExpressions) {
185 InitializedIgnitionHandleScope scope; 223 InitializedIgnitionHandleScope scope;
186 BytecodeExpectationsPrinter printer(CcTest::isolate(), 224 BytecodeExpectationsPrinter printer(CcTest::isolate(),
187 ConstantPoolType::kNumber); 225 ConstantPoolType::kNumber);
188 const char* snippets[] = { 226 const char* snippets[] = {
189 "var x = 0; return x || 3;", 227 "var x = 0; return x || 3;\n",
190 228
191 "var x = 0; return (x == 1) || 3;", 229 "var x = 0; return (x == 1) || 3;\n",
192 230
193 "var x = 0; return x && 3;", 231 "var x = 0; return x && 3;\n",
194 232
195 "var x = 0; return (x == 0) && 3;", 233 "var x = 0; return (x == 0) && 3;\n",
196 234
197 "var x = 0; return x || (1, 2, 3);", 235 "var x = 0; return x || (1, 2, 3);\n",
198 236
199 "var a = 2, b = 3, c = 4; return a || (a, b, a, b, c = 5, 3);", 237 "var a = 2, b = 3, c = 4; return a || (a, b, a, b, c = 5, 3);\n",
200 238
201 "var x = 1; var a = 2, b = 3; return x || (" // 239 "var x = 1; var a = 2, b = 3; return x || (" //
202 REPEAT_32("\n a = 1, b = 2, ") // 240 REPEAT_32("\n a = 1, b = 2, ") //
203 "3);", 241 "3);\n",
204 242
205 "var x = 0; var a = 2, b = 3; return x && (" // 243 "var x = 0; var a = 2, b = 3; return x && (" //
206 REPEAT_32("\n a = 1, b = 2, ") // 244 REPEAT_32("\n a = 1, b = 2, ") //
207 "3);", 245 "3);\n",
208 246
209 "var x = 1; var a = 2, b = 3; return (x > 3) || (" // 247 "var x = 1; var a = 2, b = 3; return (x > 3) || (" //
210 REPEAT_32("\n a = 1, b = 2, ") // 248 REPEAT_32("\n a = 1, b = 2, ") //
211 "3);", 249 "3);\n",
212 250
213 "var x = 0; var a = 2, b = 3; return (x < 5) && (" // 251 "var x = 0; var a = 2, b = 3; return (x < 5) && (" //
214 REPEAT_32("\n a = 1, b = 2, ") // 252 REPEAT_32("\n a = 1, b = 2, ") //
215 "3);", 253 "3);\n",
216 254
217 "return 0 && 3;", 255 "return 0 && 3;\n",
218 256
219 "return 1 || 3;", 257 "return 1 || 3;\n",
220 258
221 "var x = 1; return x && 3 || 0, 1;", 259 "var x = 1; return x && 3 || 0, 1;\n",
222 }; 260 };
223 261
224 CHECK_EQ(BuildActual(printer, snippets), 262 CHECK(CompareTexts(BuildActual(printer, snippets),
225 LoadGolden("LogicalExpressions.golden")); 263 LoadGolden("LogicalExpressions.golden")));
226 } 264 }
227 265
228 TEST(Parameters) { 266 TEST(Parameters) {
229 InitializedIgnitionHandleScope scope; 267 InitializedIgnitionHandleScope scope;
230 BytecodeExpectationsPrinter printer(CcTest::isolate(), 268 BytecodeExpectationsPrinter printer(CcTest::isolate(),
231 ConstantPoolType::kNumber); 269 ConstantPoolType::kNumber);
232 printer.set_wrap(false); 270 printer.set_wrap(false);
233 printer.set_test_function_name("f"); 271 printer.set_test_function_name("f");
234 272
235 const char* snippets[] = { 273 const char* snippets[] = {
236 "function f() { return this; }", 274 "function f() { return this; }",
237 275
238 "function f(arg1) { return arg1; }", 276 "function f(arg1) { return arg1; }",
239 277
240 "function f(arg1) { return this; }", 278 "function f(arg1) { return this; }",
241 279
242 "function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return arg4; }", 280 "function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return arg4; }",
243 281
244 "function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return this; }", 282 "function f(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { return this; }",
245 283
246 "function f(arg1) { arg1 = 1; }", 284 "function f(arg1) { arg1 = 1; }",
247 285
248 "function f(arg1, arg2, arg3, arg4) { arg2 = 1; }", 286 "function f(arg1, arg2, arg3, arg4) { arg2 = 1; }",
249 }; 287 };
250 288
251 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 289 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
252 LoadGolden("Parameters.golden")); 290 LoadGolden("Parameters.golden")));
253 } 291 }
254 292
255 TEST(IntegerConstants) { 293 TEST(IntegerConstants) {
256 InitializedIgnitionHandleScope scope; 294 InitializedIgnitionHandleScope scope;
257 BytecodeExpectationsPrinter printer(CcTest::isolate(), 295 BytecodeExpectationsPrinter printer(CcTest::isolate(),
258 ConstantPoolType::kNumber); 296 ConstantPoolType::kNumber);
259 const char* snippets[] = { 297 const char* snippets[] = {
260 "return 12345678;", 298 "return 12345678;\n",
261 299
262 "var a = 1234; return 5678;", 300 "var a = 1234; return 5678;\n",
263 301
264 "var a = 1234; return 1234;", 302 "var a = 1234; return 1234;\n",
265 }; 303 };
266 304
267 CHECK_EQ(BuildActual(printer, snippets), 305 CHECK(CompareTexts(BuildActual(printer, snippets),
268 LoadGolden("IntegerConstants.golden")); 306 LoadGolden("IntegerConstants.golden")));
269 } 307 }
270 308
271 TEST(HeapNumberConstants) { 309 TEST(HeapNumberConstants) {
272 InitializedIgnitionHandleScope scope; 310 InitializedIgnitionHandleScope scope;
273 BytecodeExpectationsPrinter printer(CcTest::isolate(), 311 BytecodeExpectationsPrinter printer(CcTest::isolate(),
274 ConstantPoolType::kNumber); 312 ConstantPoolType::kNumber);
275 const char* snippets[] = { 313 const char* snippets[] = {
276 "return 1.2;", 314 "return 1.2;\n",
277 315
278 "var a = 1.2; return 2.6;", 316 "var a = 1.2; return 2.6;\n",
279 317
280 "var a = 3.14; return 3.14;", 318 "var a = 3.14; return 3.14;\n",
281 319
282 "var a;" // 320 "var a;" //
283 REPEAT_256("\na = 1.414;") // 321 REPEAT_256("\na = 1.414;") //
284 " a = 3.14;", 322 " a = 3.14;\n",
285 }; 323 };
286 324
287 CHECK_EQ(BuildActual(printer, snippets), 325 CHECK(CompareTexts(BuildActual(printer, snippets),
288 LoadGolden("HeapNumberConstants.golden")); 326 LoadGolden("HeapNumberConstants.golden")));
289 } 327 }
290 328
291 TEST(StringConstants) { 329 TEST(StringConstants) {
292 InitializedIgnitionHandleScope scope; 330 InitializedIgnitionHandleScope scope;
293 BytecodeExpectationsPrinter printer(CcTest::isolate(), 331 BytecodeExpectationsPrinter printer(CcTest::isolate(),
294 ConstantPoolType::kString); 332 ConstantPoolType::kString);
295 const char* snippets[] = { 333 const char* snippets[] = {
296 "return \"This is a string\";", 334 "return \"This is a string\";\n",
297 335
298 "var a = \"First string\"; return \"Second string\";", 336 "var a = \"First string\"; return \"Second string\";\n",
299 337
300 "var a = \"Same string\"; return \"Same string\";", 338 "var a = \"Same string\"; return \"Same string\";\n",
301 }; 339 };
302 340
303 CHECK_EQ(BuildActual(printer, snippets), 341 CHECK(CompareTexts(BuildActual(printer, snippets),
304 LoadGolden("StringConstants.golden")); 342 LoadGolden("StringConstants.golden")));
305 } 343 }
306 344
307 TEST(PropertyLoads) { 345 TEST(PropertyLoads) {
308 InitializedIgnitionHandleScope scope; 346 InitializedIgnitionHandleScope scope;
309 BytecodeExpectationsPrinter printer(CcTest::isolate(), 347 BytecodeExpectationsPrinter printer(CcTest::isolate(),
310 ConstantPoolType::kString); 348 ConstantPoolType::kString);
311 printer.set_wrap(false); 349 printer.set_wrap(false);
312 printer.set_test_function_name("f"); 350 printer.set_test_function_name("f");
313 351
314 const char* snippets[] = { 352 const char* snippets[] = {
315 "function f(a) { return a.name; }\n" 353 "function f(a) { return a.name; }\n"
316 "f({name : \"test\"});", 354 "f({name : \"test\"});\n",
317 355
318 "function f(a) { return a[\"key\"]; }\n" 356 "function f(a) { return a[\"key\"]; }\n"
319 "f({key : \"test\"});", 357 "f({key : \"test\"});\n",
320 358
321 "function f(a) { return a[100]; }\n" 359 "function f(a) { return a[100]; }\n"
322 "f({100 : \"test\"});", 360 "f({100 : \"test\"});\n",
323 361
324 "function f(a, b) { return a[b]; }\n" 362 "function f(a, b) { return a[b]; }\n"
325 "f({arg : \"test\"}, \"arg\");", 363 "f({arg : \"test\"}, \"arg\");\n",
326 364
327 "function f(a) { var b = a.name; return a[-124]; }\n" 365 "function f(a) { var b = a.name; return a[-124]; }\n"
328 "f({\"-124\" : \"test\", name : 123 })", 366 "f({\"-124\" : \"test\", name : 123 })",
329 367
330 "function f(a) {\n" 368 "function f(a) {\n"
331 " var b;\n" 369 " var b;\n"
332 " b = a.name;\n" 370 " b = a.name;\n"
333 REPEAT_127(" b = a.name;\n") 371 REPEAT_127(" b = a.name;\n")
334 " return a.name;\n" 372 " return a.name;\n"
335 "}\n" 373 "}\n"
336 "f({name : \"test\"})\n", 374 "f({name : \"test\"})\n",
337 375
338 "function f(a, b) {\n" 376 "function f(a, b) {\n"
339 " var c;\n" 377 " var c;\n"
340 " c = a[b];\n" 378 " c = a[b];\n"
341 REPEAT_127(" c = a[b];\n") 379 REPEAT_127(" c = a[b];\n")
342 " return a[b];\n" 380 " return a[b];\n"
343 "}\n" 381 "}\n"
344 "f({name : \"test\"}, \"name\")\n", 382 "f({name : \"test\"}, \"name\")\n",
345 }; 383 };
346 384
347 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("PropertyLoads.golden")); 385 CHECK(CompareTexts(BuildActual(printer, snippets),
386 LoadGolden("PropertyLoads.golden")));
348 } 387 }
349 388
350 TEST(PropertyStores) { 389 TEST(PropertyStores) {
351 InitializedIgnitionHandleScope scope; 390 InitializedIgnitionHandleScope scope;
352 BytecodeExpectationsPrinter printer(CcTest::isolate(), 391 BytecodeExpectationsPrinter printer(CcTest::isolate(),
353 ConstantPoolType::kString); 392 ConstantPoolType::kString);
354 printer.set_wrap(false); 393 printer.set_wrap(false);
355 printer.set_test_function_name("f"); 394 printer.set_test_function_name("f");
356 395
357 const char* snippets[] = { 396 const char* snippets[] = {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 439
401 "function f(a, b) {\n" 440 "function f(a, b) {\n"
402 " 'use strict';\n" 441 " 'use strict';\n"
403 " a[b] = 1;\n" 442 " a[b] = 1;\n"
404 REPEAT_127(" a[b] = 1;\n") 443 REPEAT_127(" a[b] = 1;\n")
405 " a[b] = 2;\n" 444 " a[b] = 2;\n"
406 "}\n" 445 "}\n"
407 "f({name : \"test\"})\n", 446 "f({name : \"test\"})\n",
408 }; 447 };
409 448
410 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("PropertyStores.golden")); 449 CHECK(CompareTexts(BuildActual(printer, snippets),
450 LoadGolden("PropertyStores.golden")));
411 } 451 }
412 452
413 #define FUNC_ARG "new (function Obj() { this.func = function() { return; }})()" 453 #define FUNC_ARG "new (function Obj() { this.func = function() { return; }})()"
414 454
415 TEST(PropertyCall) { 455 TEST(PropertyCall) {
416 InitializedIgnitionHandleScope scope; 456 InitializedIgnitionHandleScope scope;
417 BytecodeExpectationsPrinter printer(CcTest::isolate(), 457 BytecodeExpectationsPrinter printer(CcTest::isolate(),
418 ConstantPoolType::kString); 458 ConstantPoolType::kString);
419 printer.set_wrap(false); 459 printer.set_wrap(false);
420 printer.set_test_function_name("f"); 460 printer.set_test_function_name("f");
421 461
422 const char* snippets[] = { 462 const char* snippets[] = {
423 "function f(a) { return a.func(); }\n" 463 "function f(a) { return a.func(); }\n"
424 "f(" FUNC_ARG ")", 464 "f(" FUNC_ARG ")",
425 465
426 "function f(a, b, c) { return a.func(b, c); }\n" 466 "function f(a, b, c) { return a.func(b, c); }\n"
427 "f(" FUNC_ARG ", 1, 2)", 467 "f(" FUNC_ARG ", 1, 2)",
428 468
429 "function f(a, b) { return a.func(b + b, b); }\n" 469 "function f(a, b) { return a.func(b + b, b); }\n"
430 "f(" FUNC_ARG ", 1)", 470 "f(" FUNC_ARG ", 1)",
431 471
432 "function f(a) {\n" 472 "function f(a) {\n"
433 " a.func;\n" // 473 " a.func;\n" //
434 REPEAT_127(" a.func;\n") // 474 REPEAT_127(" a.func;\n") //
435 " return a.func(); }\n" 475 " return a.func(); }\n"
436 "f(" FUNC_ARG ")", 476 "f(" FUNC_ARG ")",
437 }; 477 };
438 478
439 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("PropertyCall.golden")); 479 CHECK(CompareTexts(BuildActual(printer, snippets),
480 LoadGolden("PropertyCall.golden")));
440 } 481 }
441 482
442 TEST(LoadGlobal) { 483 TEST(LoadGlobal) {
443 InitializedIgnitionHandleScope scope; 484 InitializedIgnitionHandleScope scope;
444 BytecodeExpectationsPrinter printer(CcTest::isolate(), 485 BytecodeExpectationsPrinter printer(CcTest::isolate(),
445 ConstantPoolType::kString); 486 ConstantPoolType::kString);
446 printer.set_wrap(false); 487 printer.set_wrap(false);
447 printer.set_test_function_name("f"); 488 printer.set_test_function_name("f");
448 489
449 const char* snippets[] = { 490 const char* snippets[] = {
450 "var a = 1;\n" 491 "var a = 1;\n"
451 "function f() { return a; }\n" 492 "function f() { return a; }\n"
452 "f()", 493 "f()",
453 494
454 "function t() { }\n" 495 "function t() { }\n"
455 "function f() { return t; }\n" 496 "function f() { return t; }\n"
456 "f()", 497 "f()",
457 498
458 "a = 1;\n" 499 "a = 1;\n"
459 "function f() { return a; }\n" 500 "function f() { return a; }\n"
460 "f()", 501 "f()",
461 502
462 "a = 1;\n" 503 "a = 1;\n"
463 "function f(b) {\n" 504 "function f(b) {\n"
464 " b.name;\n" 505 " b.name;\n"
465 REPEAT_127(" b.name;\n") 506 REPEAT_127(" b.name;\n")
466 " return a;\n" 507 " return a;\n"
467 "}\n" 508 "}\n"
468 "f({name: 1});", 509 "f({name: 1});\n",
469 }; 510 };
470 511
471 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("LoadGlobal.golden")); 512 CHECK(CompareTexts(BuildActual(printer, snippets),
513 LoadGolden("LoadGlobal.golden")));
472 } 514 }
473 515
474 TEST(StoreGlobal) { 516 TEST(StoreGlobal) {
475 InitializedIgnitionHandleScope scope; 517 InitializedIgnitionHandleScope scope;
476 BytecodeExpectationsPrinter printer(CcTest::isolate(), 518 BytecodeExpectationsPrinter printer(CcTest::isolate(),
477 ConstantPoolType::kString); 519 ConstantPoolType::kString);
478 printer.set_wrap(false); 520 printer.set_wrap(false);
479 printer.set_test_function_name("f"); 521 printer.set_test_function_name("f");
480 522
481 const char* snippets[] = { 523 const char* snippets[] = {
482 "var a = 1;\n" 524 "var a = 1;\n"
483 "function f() { a = 2; }\n" 525 "function f() { a = 2; }\n"
484 "f();", 526 "f();\n",
485 527
486 "var a = \"test\"; function f(b) { a = b; }\n" 528 "var a = \"test\"; function f(b) { a = b; }\n"
487 "f(\"global\");", 529 "f(\"global\");\n",
488 530
489 "'use strict'; var a = 1;\n" 531 "'use strict'; var a = 1;\n"
490 "function f() { a = 2; }\n" 532 "function f() { a = 2; }\n"
491 "f();", 533 "f();\n",
492 534
493 "a = 1;\n" 535 "a = 1;\n"
494 "function f() { a = 2; }\n" 536 "function f() { a = 2; }\n"
495 "f();", 537 "f();\n",
496 538
497 "a = 1;\n" 539 "a = 1;\n"
498 "function f(b) {\n" 540 "function f(b) {\n"
499 " b.name;\n" 541 " b.name;\n"
500 REPEAT_127(" b.name;\n") 542 REPEAT_127(" b.name;\n")
501 " a = 2;\n" 543 " a = 2;\n"
502 "}\n" 544 "}\n"
503 "f({name: 1});", 545 "f({name: 1});\n",
504 546
505 "a = 1;\n" 547 "a = 1;\n"
506 "function f(b) {\n" 548 "function f(b) {\n"
507 " 'use strict';\n" 549 " 'use strict';\n"
508 " b.name;\n" 550 " b.name;\n"
509 REPEAT_127(" b.name;\n") 551 REPEAT_127(" b.name;\n")
510 " a = 2;\n" 552 " a = 2;\n"
511 "}\n" 553 "}\n"
512 "f({name: 1});", 554 "f({name: 1});\n",
513 }; 555 };
514 556
515 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("StoreGlobal.golden")); 557 CHECK(CompareTexts(BuildActual(printer, snippets),
558 LoadGolden("StoreGlobal.golden")));
516 } 559 }
517 560
518 TEST(CallGlobal) { 561 TEST(CallGlobal) {
519 InitializedIgnitionHandleScope scope; 562 InitializedIgnitionHandleScope scope;
520 BytecodeExpectationsPrinter printer(CcTest::isolate(), 563 BytecodeExpectationsPrinter printer(CcTest::isolate(),
521 ConstantPoolType::kString); 564 ConstantPoolType::kString);
522 printer.set_wrap(false); 565 printer.set_wrap(false);
523 printer.set_test_function_name("f"); 566 printer.set_test_function_name("f");
524 567
525 const char* snippets[] = { 568 const char* snippets[] = {
526 "function t() { }\n" 569 "function t() { }\n"
527 "function f() { return t(); }\n" 570 "function f() { return t(); }\n"
528 "f();", 571 "f();\n",
529 572
530 "function t(a, b, c) { }\n" 573 "function t(a, b, c) { }\n"
531 "function f() { return t(1, 2, 3); }\n" 574 "function f() { return t(1, 2, 3); }\n"
532 "f();", 575 "f();\n",
533 }; 576 };
534 577
535 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("CallGlobal.golden")); 578 CHECK(CompareTexts(BuildActual(printer, snippets),
579 LoadGolden("CallGlobal.golden")));
536 } 580 }
537 581
538 TEST(CallRuntime) { 582 TEST(CallRuntime) {
539 InitializedIgnitionHandleScope scope; 583 InitializedIgnitionHandleScope scope;
540 BytecodeExpectationsPrinter printer(CcTest::isolate(), 584 BytecodeExpectationsPrinter printer(CcTest::isolate(),
541 ConstantPoolType::kMixed); 585 ConstantPoolType::kMixed);
542 printer.set_wrap(false); 586 printer.set_wrap(false);
543 printer.set_test_function_name("f"); 587 printer.set_test_function_name("f");
544 588
545 const char* snippets[] = { 589 const char* snippets[] = {
546 "function f() { %TheHole() }\n" 590 "function f() { %TheHole() }\n"
547 "f();", 591 "f();\n",
548 592
549 "function f(a) { return %IsArray(a) }\n" 593 "function f(a) { return %IsArray(a) }\n"
550 "f(undefined);", 594 "f(undefined);\n",
551 595
552 "function f() { return %Add(1, 2) }\n" 596 "function f() { return %Add(1, 2) }\n"
553 "f();", 597 "f();\n",
554 598
555 "function f() { return %spread_iterable([1]) }\n" 599 "function f() { return %spread_iterable([1]) }\n"
556 "f();", 600 "f();\n",
557 }; 601 };
558 602
559 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("CallRuntime.golden")); 603 CHECK(CompareTexts(BuildActual(printer, snippets),
604 LoadGolden("CallRuntime.golden")));
560 } 605 }
561 606
562 TEST(IfConditions) { 607 TEST(IfConditions) {
563 InitializedIgnitionHandleScope scope; 608 InitializedIgnitionHandleScope scope;
564 BytecodeExpectationsPrinter printer(CcTest::isolate(), 609 BytecodeExpectationsPrinter printer(CcTest::isolate(),
565 ConstantPoolType::kMixed); 610 ConstantPoolType::kMixed);
566 printer.set_wrap(false); 611 printer.set_wrap(false);
567 printer.set_test_function_name("f"); 612 printer.set_test_function_name("f");
568 613
569 const char* snippets[] = { 614 const char* snippets[] = {
570 "function f() {\n" 615 "function f() {\n"
571 " if (0) {\n" 616 " if (0) {\n"
572 " return 1;\n" 617 " return 1;\n"
573 " } else {\n" 618 " } else {\n"
574 " return -1;\n" 619 " return -1;\n"
575 " }\n" 620 " }\n"
576 "};\n" 621 "};\n"
577 "f();", 622 "f();\n",
578 623
579 "function f() {\n" 624 "function f() {\n"
580 " if ('lucky') {\n" 625 " if ('lucky') {\n"
581 " return 1;\n" 626 " return 1;\n"
582 " } else {\n" 627 " } else {\n"
583 " return -1;\n" 628 " return -1;\n"
584 " }\n" 629 " }\n"
585 "};\n" 630 "};\n"
586 "f();", 631 "f();\n",
587 632
588 "function f() {\n" 633 "function f() {\n"
589 " if (false) {\n" 634 " if (false) {\n"
590 " return 1;\n" 635 " return 1;\n"
591 " } else {\n" 636 " } else {\n"
592 " return -1;\n" 637 " return -1;\n"
593 " }\n" 638 " }\n"
594 "};\n" 639 "};\n"
595 "f();", 640 "f();\n",
596 641
597 "function f() {\n" 642 "function f() {\n"
598 " if (false) {\n" 643 " if (false) {\n"
599 " return 1;\n" 644 " return 1;\n"
600 " }\n" 645 " }\n"
601 "};\n" 646 "};\n"
602 "f();", 647 "f();\n",
603 648
604 "function f() {\n" 649 "function f() {\n"
605 " var a = 1;\n" 650 " var a = 1;\n"
606 " if (a) {\n" 651 " if (a) {\n"
607 " a += 1;\n" 652 " a += 1;\n"
608 " } else {\n" 653 " } else {\n"
609 " return 2;\n" 654 " return 2;\n"
610 " }\n" 655 " }\n"
611 "};\n" 656 "};\n"
612 "f();", 657 "f();\n",
613 658
614 "function f(a) {\n" 659 "function f(a) {\n"
615 " if (a <= 0) {\n" 660 " if (a <= 0) {\n"
616 " return 200;\n" 661 " return 200;\n"
617 " } else {\n" 662 " } else {\n"
618 " return -200;\n" 663 " return -200;\n"
619 " }\n" 664 " }\n"
620 "};\n" 665 "};\n"
621 "f(99);", 666 "f(99);\n",
622 667
623 "function f(a, b) { if (a in b) { return 200; } }" 668 "function f(a, b) { if (a in b) { return 200; } }"
624 "f('prop', { prop: 'yes'});", 669 "f('prop', { prop: 'yes'});\n",
625 670
626 "function f(z) { var a = 0; var b = 0; if (a === 0.01) {\n" 671 "function f(z) { var a = 0; var b = 0; if (a === 0.01) {\n"
627 REPEAT_64(" b = a; a = b;\n") 672 REPEAT_64(" b = a; a = b;\n")
628 " return 200; } else { return -200; } } f(0.001);", 673 " return 200; } else { return -200; } } f(0.001);\n",
629 674
630 "function f() {\n" 675 "function f() {\n"
631 " var a = 0; var b = 0;\n" 676 " var a = 0; var b = 0;\n"
632 " if (a) {\n" 677 " if (a) {\n"
633 REPEAT_64(" b = a; a = b;\n") 678 REPEAT_64(" b = a; a = b;\n")
634 " return 200; } else { return -200; }\n" 679 " return 200; } else { return -200; }\n"
635 "};\n" 680 "};\n"
636 "f();", 681 "f();\n",
637 682
638 "function f(a, b) {\n" 683 "function f(a, b) {\n"
639 " if (a == b) { return 1; }\n" 684 " if (a == b) { return 1; }\n"
640 " if (a === b) { return 1; }\n" 685 " if (a === b) { return 1; }\n"
641 " if (a < b) { return 1; }\n" 686 " if (a < b) { return 1; }\n"
642 " if (a > b) { return 1; }\n" 687 " if (a > b) { return 1; }\n"
643 " if (a <= b) { return 1; }\n" 688 " if (a <= b) { return 1; }\n"
644 " if (a >= b) { return 1; }\n" 689 " if (a >= b) { return 1; }\n"
645 " if (a in b) { return 1; }\n" 690 " if (a in b) { return 1; }\n"
646 " if (a instanceof b) { return 1; }\n" 691 " if (a instanceof b) { return 1; }\n"
647 " return 0;\n" 692 " return 0;\n"
648 "}\n" 693 "}\n"
649 "f(1, 1);", 694 "f(1, 1);\n",
650 695
651 "function f() {\n" 696 "function f() {\n"
652 " var a = 0;\n" 697 " var a = 0;\n"
653 " if (a) {\n" 698 " if (a) {\n"
654 " return 20;\n" 699 " return 20;\n"
655 " } else {\n" 700 " } else {\n"
656 " return -20;\n" 701 " return -20;\n"
657 " }\n" 702 " }\n"
658 "};\n" 703 "};\n"
659 "f();", 704 "f();\n",
660 }; 705 };
661 706
662 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("IfConditions.golden")); 707 CHECK(CompareTexts(BuildActual(printer, snippets),
708 LoadGolden("IfConditions.golden")));
663 } 709 }
664 710
665 TEST(DeclareGlobals) { 711 TEST(DeclareGlobals) {
666 InitializedIgnitionHandleScope scope; 712 InitializedIgnitionHandleScope scope;
667 BytecodeExpectationsPrinter printer(CcTest::isolate(), 713 BytecodeExpectationsPrinter printer(CcTest::isolate(),
668 ConstantPoolType::kMixed); 714 ConstantPoolType::kMixed);
669 printer.set_wrap(false); 715 printer.set_wrap(false);
670 printer.set_test_function_name("f"); 716 printer.set_test_function_name("f");
671 printer.set_execute(false); 717 printer.set_execute(false);
672 printer.set_top_level(true); 718 printer.set_top_level(true);
673 719
674 const char* snippets[] = { 720 const char* snippets[] = {
675 "var a = 1;", 721 "var a = 1;\n",
676 722
677 "function f() {}", 723 "function f() {}\n",
678 724
679 "var a = 1;\n" 725 "var a = 1;\n"
680 "a=2;", 726 "a=2;\n",
681 727
682 "function f() {}\n" 728 "function f() {}\n"
683 "f();", 729 "f();\n",
684 }; 730 };
685 731
686 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("DeclareGlobals.golden")); 732 CHECK(CompareTexts(BuildActual(printer, snippets),
733 LoadGolden("DeclareGlobals.golden")));
687 } 734 }
688 735
689 TEST(BreakableBlocks) { 736 TEST(BreakableBlocks) {
690 InitializedIgnitionHandleScope scope; 737 InitializedIgnitionHandleScope scope;
691 BytecodeExpectationsPrinter printer(CcTest::isolate(), 738 BytecodeExpectationsPrinter printer(CcTest::isolate(),
692 ConstantPoolType::kMixed); 739 ConstantPoolType::kMixed);
693 740
694 const char* snippets[] = { 741 const char* snippets[] = {
695 "var x = 0;\n" 742 "var x = 0;\n"
696 "label: {\n" 743 "label: {\n"
697 " x = x + 1;\n" 744 " x = x + 1;\n"
698 " break label;\n" 745 " break label;\n"
699 " x = x + 1;\n" 746 " x = x + 1;\n"
700 "}\n" 747 "}\n"
701 "return x;", 748 "return x;\n",
702 749
703 "var sum = 0;\n" 750 "var sum = 0;\n"
704 "outer: {\n" 751 "outer: {\n"
705 " for (var x = 0; x < 10; ++x) {\n" 752 " for (var x = 0; x < 10; ++x) {\n"
706 " for (var y = 0; y < 3; ++y) {\n" 753 " for (var y = 0; y < 3; ++y) {\n"
707 " ++sum;\n" 754 " ++sum;\n"
708 " if (x + y == 12) { break outer; }\n" 755 " if (x + y == 12) { break outer; }\n"
709 " }\n" 756 " }\n"
710 " }\n" 757 " }\n"
711 "}\n" 758 "}\n"
712 "return sum;", 759 "return sum;\n",
713 760
714 "outer: {\n" 761 "outer: {\n"
715 " let y = 10;\n" 762 " let y = 10;\n"
716 " function f() { return y; }\n" 763 " function f() { return y; }\n"
717 " break outer;\n" 764 " break outer;\n"
718 "}\n", 765 "}\n",
719 766
720 "let x = 1;\n" 767 "let x = 1;\n"
721 "outer: {\n" 768 "outer: {\n"
722 " inner: {\n" 769 " inner: {\n"
723 " let y = 2;\n" 770 " let y = 2;\n"
724 " function f() { return x + y; }\n" 771 " function f() { return x + y; }\n"
725 " if (y) break outer;\n" 772 " if (y) break outer;\n"
726 " y = 3;\n" 773 " y = 3;\n"
727 " }\n" 774 " }\n"
728 "}\n" 775 "}\n"
729 "x = 4;", 776 "x = 4;\n",
730 }; 777 };
731 778
732 CHECK_EQ(BuildActual(printer, snippets), 779 CHECK(CompareTexts(BuildActual(printer, snippets),
733 LoadGolden("BreakableBlocks.golden")); 780 LoadGolden("BreakableBlocks.golden")));
734 } 781 }
735 782
736 TEST(BasicLoops) { 783 TEST(BasicLoops) {
737 InitializedIgnitionHandleScope scope; 784 InitializedIgnitionHandleScope scope;
738 BytecodeExpectationsPrinter printer(CcTest::isolate(), 785 BytecodeExpectationsPrinter printer(CcTest::isolate(),
739 ConstantPoolType::kMixed); 786 ConstantPoolType::kMixed);
740 const char* snippets[] = { 787 const char* snippets[] = {
741 "var x = 0;\n" 788 "var x = 0;\n"
742 "while (false) { x = 99; break; continue; }\n" 789 "while (false) { x = 99; break; continue; }\n"
743 "return x;", 790 "return x;\n",
744 791
745 "var x = 0;\n" 792 "var x = 0;\n"
746 "while (false) {\n" 793 "while (false) {\n"
747 " x = x + 1;\n" 794 " x = x + 1;\n"
748 "};\n" 795 "};\n"
749 "return x;", 796 "return x;\n",
750 797
751 "var x = 0;\n" 798 "var x = 0;\n"
752 "var y = 1;\n" 799 "var y = 1;\n"
753 "while (x < 10) {\n" 800 "while (x < 10) {\n"
754 " y = y * 12;\n" 801 " y = y * 12;\n"
755 " x = x + 1;\n" 802 " x = x + 1;\n"
756 " if (x == 3) continue;\n" 803 " if (x == 3) continue;\n"
757 " if (x == 4) break;\n" 804 " if (x == 4) break;\n"
758 "}\n" 805 "}\n"
759 "return y;", 806 "return y;\n",
760 807
761 "var i = 0;\n" 808 "var i = 0;\n"
762 "while (true) {\n" 809 "while (true) {\n"
763 " if (i < 0) continue;\n" 810 " if (i < 0) continue;\n"
764 " if (i == 3) break;\n" 811 " if (i == 3) break;\n"
765 " if (i == 4) break;\n" 812 " if (i == 4) break;\n"
766 " if (i == 10) continue;\n" 813 " if (i == 10) continue;\n"
767 " if (i == 5) break;\n" 814 " if (i == 5) break;\n"
768 " i = i + 1;\n" 815 " i = i + 1;\n"
769 "}\n" 816 "}\n"
770 "return i;", 817 "return i;\n",
771 818
772 "var i = 0;\n" 819 "var i = 0;\n"
773 "while (true) {\n" 820 "while (true) {\n"
774 " while (i < 3) {\n" 821 " while (i < 3) {\n"
775 " if (i == 2) break;\n" 822 " if (i == 2) break;\n"
776 " i = i + 1;\n" 823 " i = i + 1;\n"
777 " }\n" 824 " }\n"
778 " i = i + 1;\n" 825 " i = i + 1;\n"
779 " break;\n" 826 " break;\n"
780 "}\n" 827 "}\n"
781 "return i;", 828 "return i;\n",
782 829
783 "var x = 10;\n" 830 "var x = 10;\n"
784 "var y = 1;\n" 831 "var y = 1;\n"
785 "while (x) {\n" 832 "while (x) {\n"
786 " y = y * 12;\n" 833 " y = y * 12;\n"
787 " x = x - 1;\n" 834 " x = x - 1;\n"
788 "}\n" 835 "}\n"
789 "return y;", 836 "return y;\n",
790 837
791 "var x = 0; var y = 1;\n" 838 "var x = 0; var y = 1;\n"
792 "do {\n" 839 "do {\n"
793 " y = y * 10;\n" 840 " y = y * 10;\n"
794 " if (x == 5) break;\n" 841 " if (x == 5) break;\n"
795 " if (x == 6) continue;\n" 842 " if (x == 6) continue;\n"
796 " x = x + 1;\n" 843 " x = x + 1;\n"
797 "} while (x < 10);\n" 844 "} while (x < 10);\n"
798 "return y;", 845 "return y;\n",
799 846
800 "var x = 10;\n" 847 "var x = 10;\n"
801 "var y = 1;\n" 848 "var y = 1;\n"
802 "do {\n" 849 "do {\n"
803 " y = y * 12;\n" 850 " y = y * 12;\n"
804 " x = x - 1;\n" 851 " x = x - 1;\n"
805 "} while (x);\n" 852 "} while (x);\n"
806 "return y;", 853 "return y;\n",
807 854
808 "var x = 0; var y = 1;\n" 855 "var x = 0; var y = 1;\n"
809 "do {\n" 856 "do {\n"
810 " y = y * 10;\n" 857 " y = y * 10;\n"
811 " if (x == 5) break;\n" 858 " if (x == 5) break;\n"
812 " x = x + 1;\n" 859 " x = x + 1;\n"
813 " if (x == 6) continue;\n" 860 " if (x == 6) continue;\n"
814 "} while (false);\n" 861 "} while (false);\n"
815 "return y;", 862 "return y;\n",
816 863
817 "var x = 0; var y = 1;\n" 864 "var x = 0; var y = 1;\n"
818 "do {\n" 865 "do {\n"
819 " y = y * 10;\n" 866 " y = y * 10;\n"
820 " if (x == 5) break;\n" 867 " if (x == 5) break;\n"
821 " x = x + 1;\n" 868 " x = x + 1;\n"
822 " if (x == 6) continue;\n" 869 " if (x == 6) continue;\n"
823 "} while (true);\n" 870 "} while (true);\n"
824 "return y;", 871 "return y;\n",
825 872
826 "var x = 0;\n" 873 "var x = 0;\n"
827 "for (;;) {\n" 874 "for (;;) {\n"
828 " if (x == 1) break;\n" 875 " if (x == 1) break;\n"
829 " if (x == 2) continue;\n" 876 " if (x == 2) continue;\n"
830 " x = x + 1;\n" 877 " x = x + 1;\n"
831 "}", 878 "}\n",
832 879
833 "for (var x = 0;;) {\n" 880 "for (var x = 0;;) {\n"
834 " if (x == 1) break;\n" 881 " if (x == 1) break;\n"
835 " if (x == 2) continue;\n" 882 " if (x == 2) continue;\n"
836 " x = x + 1;\n" 883 " x = x + 1;\n"
837 "}", 884 "}\n",
838 885
839 "var x = 0;\n" 886 "var x = 0;\n"
840 "for (;; x = x + 1) {\n" 887 "for (;; x = x + 1) {\n"
841 " if (x == 1) break;\n" 888 " if (x == 1) break;\n"
842 " if (x == 2) continue;\n" 889 " if (x == 2) continue;\n"
843 "}", 890 "}\n",
844 891
845 "for (var x = 0;; x = x + 1) {\n" 892 "for (var x = 0;; x = x + 1) {\n"
846 " if (x == 1) break;\n" 893 " if (x == 1) break;\n"
847 " if (x == 2) continue;\n" 894 " if (x == 2) continue;\n"
848 "}", 895 "}\n",
849 896
850 "var u = 0;\n" 897 "var u = 0;\n"
851 "for (var i = 0; i < 100; i = i + 1) {\n" 898 "for (var i = 0; i < 100; i = i + 1) {\n"
852 " u = u + 1;\n" 899 " u = u + 1;\n"
853 " continue;\n" 900 " continue;\n"
854 "}", 901 "}\n",
855 902
856 "var y = 1;\n" 903 "var y = 1;\n"
857 "for (var x = 10; x; --x) {\n" 904 "for (var x = 10; x; --x) {\n"
858 " y = y * 12;\n" 905 " y = y * 12;\n"
859 "}\n" 906 "}\n"
860 "return y;", 907 "return y;\n",
861 908
862 "var x = 0;\n" 909 "var x = 0;\n"
863 "for (var i = 0; false; i++) {\n" 910 "for (var i = 0; false; i++) {\n"
864 " x = x + 1;\n" 911 " x = x + 1;\n"
865 "};\n" 912 "};\n"
866 "return x;", 913 "return x;\n",
867 914
868 "var x = 0;\n" 915 "var x = 0;\n"
869 "for (var i = 0; true; ++i) {\n" 916 "for (var i = 0; true; ++i) {\n"
870 " x = x + 1;\n" 917 " x = x + 1;\n"
871 " if (x == 20) break;\n" 918 " if (x == 20) break;\n"
872 "};\n" 919 "};\n"
873 "return x;", 920 "return x;\n",
874 921
875 "var a = 0;\n" 922 "var a = 0;\n"
876 "while (a) {\n" 923 "while (a) {\n"
877 " { \n" 924 " { \n"
878 " let z = 1;\n" 925 " let z = 1;\n"
879 " function f() { z = 2; }\n" 926 " function f() { z = 2; }\n"
880 " if (z) continue;\n" 927 " if (z) continue;\n"
881 " z++;\n" 928 " z++;\n"
882 " }\n" 929 " }\n"
883 "}", 930 "}\n",
884 }; 931 };
885 932
886 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("BasicLoops.golden")); 933 CHECK(CompareTexts(BuildActual(printer, snippets),
934 LoadGolden("BasicLoops.golden")));
887 } 935 }
888 936
889 TEST(JumpsRequiringConstantWideOperands) { 937 TEST(JumpsRequiringConstantWideOperands) {
890 InitializedIgnitionHandleScope scope; 938 InitializedIgnitionHandleScope scope;
891 BytecodeExpectationsPrinter printer(CcTest::isolate(), 939 BytecodeExpectationsPrinter printer(CcTest::isolate(),
892 ConstantPoolType::kNumber); 940 ConstantPoolType::kNumber);
893 const char* snippets[] = { 941 const char* snippets[] = {
894 REPEAT_256("var x = 0.1;\n") 942 REPEAT_256("var x = 0.1;\n")
895 REPEAT_32("var x = 0.2;\n") 943 REPEAT_32("var x = 0.2;\n")
896 REPEAT_16("var x = 0.3;\n") 944 REPEAT_16("var x = 0.3;\n")
897 REPEAT_8("var x = 0.4;\n") 945 REPEAT_8("var x = 0.4;\n")
898 "for (var i = 0; i < 3; i++) {\n" 946 "for (var i = 0; i < 3; i++) {\n"
899 " if (i == 1) continue;\n" 947 " if (i == 1) continue;\n"
900 " if (i == 2) break;\n" 948 " if (i == 2) break;\n"
901 "}\n" 949 "}\n"
902 "return 3;", 950 "return 3;\n",
903 }; 951 };
904 952
905 CHECK_EQ(BuildActual(printer, snippets), 953 CHECK(CompareTexts(BuildActual(printer, snippets),
906 LoadGolden("JumpsRequiringConstantWideOperands.golden")); 954 LoadGolden("JumpsRequiringConstantWideOperands.golden")));
907 } 955 }
908 956
909 TEST(UnaryOperators) { 957 TEST(UnaryOperators) {
910 InitializedIgnitionHandleScope scope; 958 InitializedIgnitionHandleScope scope;
911 BytecodeExpectationsPrinter printer(CcTest::isolate(), 959 BytecodeExpectationsPrinter printer(CcTest::isolate(),
912 ConstantPoolType::kNumber); 960 ConstantPoolType::kNumber);
913 const char* snippets[] = { 961 const char* snippets[] = {
914 "var x = 0;\n" 962 "var x = 0;\n"
915 "while (x != 10) {\n" 963 "while (x != 10) {\n"
916 " x = x + 10;\n" 964 " x = x + 10;\n"
917 "}\n" 965 "}\n"
918 "return x;", 966 "return x;\n",
919 967
920 "var x = false;\n" 968 "var x = false;\n"
921 "do {\n" 969 "do {\n"
922 " x = !x;\n" 970 " x = !x;\n"
923 "} while(x == false);\n" 971 "} while(x == false);\n"
924 "return x;", 972 "return x;\n",
925 973
926 "var x = 101;\n" 974 "var x = 101;\n"
927 "return void(x * 3);", 975 "return void(x * 3);\n",
928 976
929 "var x = 1234;\n" 977 "var x = 1234;\n"
930 "var y = void (x * x - 1);\n" 978 "var y = void (x * x - 1);\n"
931 "return y;", 979 "return y;\n",
932 980
933 "var x = 13;\n" 981 "var x = 13;\n"
934 "return ~x;", 982 "return ~x;\n",
935 983
936 "var x = 13;\n" 984 "var x = 13;\n"
937 "return +x;", 985 "return +x;\n",
938 986
939 "var x = 13;\n" 987 "var x = 13;\n"
940 "return -x;", 988 "return -x;\n",
941 }; 989 };
942 990
943 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("UnaryOperators.golden")); 991 CHECK(CompareTexts(BuildActual(printer, snippets),
992 LoadGolden("UnaryOperators.golden")));
944 } 993 }
945 994
946 TEST(Typeof) { 995 TEST(Typeof) {
947 InitializedIgnitionHandleScope scope; 996 InitializedIgnitionHandleScope scope;
948 BytecodeExpectationsPrinter printer(CcTest::isolate(), 997 BytecodeExpectationsPrinter printer(CcTest::isolate(),
949 ConstantPoolType::kString); 998 ConstantPoolType::kString);
950 printer.set_wrap(false); 999 printer.set_wrap(false);
951 printer.set_test_function_name("f"); 1000 printer.set_test_function_name("f");
952 1001
953 const char* snippets[] = { 1002 const char* snippets[] = {
954 "function f() {\n" 1003 "function f() {\n"
955 " var x = 13;\n" 1004 " var x = 13;\n"
956 " return typeof(x);\n" 1005 " return typeof(x);\n"
957 "};", 1006 "};",
958 1007
959 "var x = 13;\n" 1008 "var x = 13;\n"
960 "function f() {\n" 1009 "function f() {\n"
961 " return typeof(x);\n" 1010 " return typeof(x);\n"
962 "};", 1011 "};",
963 }; 1012 };
964 1013
965 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1014 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
966 LoadGolden("Typeof.golden")); 1015 LoadGolden("Typeof.golden")));
967 } 1016 }
968 1017
969 TEST(Delete) { 1018 TEST(Delete) {
970 InitializedIgnitionHandleScope scope; 1019 InitializedIgnitionHandleScope scope;
971 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1020 BytecodeExpectationsPrinter printer(CcTest::isolate(),
972 ConstantPoolType::kMixed); 1021 ConstantPoolType::kMixed);
973 1022
974 const char* snippets[] = { 1023 const char* snippets[] = {
975 "var a = {x:13, y:14}; return delete a.x;", 1024 "var a = {x:13, y:14}; return delete a.x;\n",
976 1025
977 "'use strict'; var a = {x:13, y:14}; return delete a.x;", 1026 "'use strict'; var a = {x:13, y:14}; return delete a.x;\n",
978 1027
979 "var a = {1:13, 2:14}; return delete a[2];", 1028 "var a = {1:13, 2:14}; return delete a[2];\n",
980 1029
981 "var a = 10; return delete a;", 1030 "var a = 10; return delete a;\n",
982 1031
983 "'use strict';\n" 1032 "'use strict';\n"
984 "var a = {1:10};\n" 1033 "var a = {1:10};\n"
985 "(function f1() {return a;});\n" 1034 "(function f1() {return a;});\n"
986 "return delete a[1];", 1035 "return delete a[1];\n",
987 1036
988 "return delete 'test';", 1037 "return delete 'test';\n",
989 }; 1038 };
990 1039
991 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Delete.golden")); 1040 CHECK(CompareTexts(BuildActual(printer, snippets),
1041 LoadGolden("Delete.golden")));
992 } 1042 }
993 1043
994 TEST(GlobalDelete) { 1044 TEST(GlobalDelete) {
995 InitializedIgnitionHandleScope scope; 1045 InitializedIgnitionHandleScope scope;
996 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1046 BytecodeExpectationsPrinter printer(CcTest::isolate(),
997 ConstantPoolType::kMixed); 1047 ConstantPoolType::kMixed);
998 printer.set_wrap(false); 1048 printer.set_wrap(false);
999 printer.set_test_function_name("f"); 1049 printer.set_test_function_name("f");
1000 1050
1001 const char* snippets[] = { 1051 const char* snippets[] = {
1002 "var a = {x:13, y:14};\n" 1052 "var a = {x:13, y:14};\n"
1003 "function f() {\n" 1053 "function f() {\n"
1004 " return delete a.x;\n" 1054 " return delete a.x;\n"
1005 "};\n" 1055 "};\n"
1006 "f();", 1056 "f();\n",
1007 1057
1008 "a = {1:13, 2:14};\n" 1058 "a = {1:13, 2:14};\n"
1009 "function f() {\n" 1059 "function f() {\n"
1010 " 'use strict';\n" 1060 " 'use strict';\n"
1011 " return delete a[1];\n" 1061 " return delete a[1];\n"
1012 "};\n" 1062 "};\n"
1013 "f();", 1063 "f();\n",
1014 1064
1015 "var a = {x:13, y:14};\n" 1065 "var a = {x:13, y:14};\n"
1016 "function f() {\n" 1066 "function f() {\n"
1017 " return delete a;\n" 1067 " return delete a;\n"
1018 "};\n" 1068 "};\n"
1019 "f();", 1069 "f();\n",
1020 1070
1021 "b = 30;\n" 1071 "b = 30;\n"
1022 "function f() {\n" 1072 "function f() {\n"
1023 " return delete b;\n" 1073 " return delete b;\n"
1024 "};\n" 1074 "};\n"
1025 "f();", 1075 "f();\n",
1026 }; 1076 };
1027 1077
1028 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("GlobalDelete.golden")); 1078 CHECK(CompareTexts(BuildActual(printer, snippets),
1079 LoadGolden("GlobalDelete.golden")));
1029 } 1080 }
1030 1081
1031 TEST(FunctionLiterals) { 1082 TEST(FunctionLiterals) {
1032 InitializedIgnitionHandleScope scope; 1083 InitializedIgnitionHandleScope scope;
1033 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1084 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1034 ConstantPoolType::kMixed); 1085 ConstantPoolType::kMixed);
1035 1086
1036 const char* snippets[] = { 1087 const char* snippets[] = {
1037 "return function(){ }", 1088 "return function(){ }\n",
1038 1089
1039 "return (function(){ })()", 1090 "return (function(){ })()\n",
1040 1091
1041 "return (function(x){ return x; })(1)", 1092 "return (function(x){ return x; })(1)\n",
1042 }; 1093 };
1043 1094
1044 CHECK_EQ(BuildActual(printer, snippets), 1095 CHECK(CompareTexts(BuildActual(printer, snippets),
1045 LoadGolden("FunctionLiterals.golden")); 1096 LoadGolden("FunctionLiterals.golden")));
1046 } 1097 }
1047 1098
1048 TEST(RegExpLiterals) { 1099 TEST(RegExpLiterals) {
1049 InitializedIgnitionHandleScope scope; 1100 InitializedIgnitionHandleScope scope;
1050 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1101 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1051 ConstantPoolType::kString); 1102 ConstantPoolType::kString);
1052 1103
1053 const char* snippets[] = { 1104 const char* snippets[] = {
1054 "return /ab+d/;", 1105 "return /ab+d/;\n",
1055 1106
1056 "return /(\\w+)\\s(\\w+)/i;", 1107 "return /(\\w+)\\s(\\w+)/i;\n",
1057 1108
1058 "return /ab+d/.exec('abdd');", 1109 "return /ab+d/.exec('abdd');\n",
1059 }; 1110 };
1060 1111
1061 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("RegExpLiterals.golden")); 1112 CHECK(CompareTexts(BuildActual(printer, snippets),
1113 LoadGolden("RegExpLiterals.golden")));
1062 } 1114 }
1063 1115
1064 TEST(RegExpLiteralsWide) { 1116 TEST(RegExpLiteralsWide) {
1065 InitializedIgnitionHandleScope scope; 1117 InitializedIgnitionHandleScope scope;
1066 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1118 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1067 ConstantPoolType::kMixed); 1119 ConstantPoolType::kMixed);
1068 1120
1069 const char* snippets[] = { 1121 const char* snippets[] = {
1070 "var a;" // 1122 "var a;" //
1071 REPEAT_256("\na = 1.23;") // 1123 REPEAT_256("\na = 1.23;") //
1072 "\nreturn /ab+d/;", 1124 "\nreturn /ab+d/;\n",
1073 }; 1125 };
1074 1126
1075 CHECK_EQ(BuildActual(printer, snippets), 1127 CHECK(CompareTexts(BuildActual(printer, snippets),
1076 LoadGolden("RegExpLiteralsWide.golden")); 1128 LoadGolden("RegExpLiteralsWide.golden")));
1077 } 1129 }
1078 1130
1079 TEST(ArrayLiterals) { 1131 TEST(ArrayLiterals) {
1080 InitializedIgnitionHandleScope scope; 1132 InitializedIgnitionHandleScope scope;
1081 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1133 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1082 ConstantPoolType::kMixed); 1134 ConstantPoolType::kMixed);
1083 1135
1084 const char* snippets[] = { 1136 const char* snippets[] = {
1085 "return [ 1, 2 ];", 1137 "return [ 1, 2 ];\n",
1086 1138
1087 "var a = 1; return [ a, a + 1 ];", 1139 "var a = 1; return [ a, a + 1 ];\n",
1088 1140
1089 "return [ [ 1, 2 ], [ 3 ] ];", 1141 "return [ [ 1, 2 ], [ 3 ] ];\n",
1090 1142
1091 "var a = 1; return [ [ a, 2 ], [ a + 2 ] ];", 1143 "var a = 1; return [ [ a, 2 ], [ a + 2 ] ];\n",
1092 }; 1144 };
1093 1145
1094 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("ArrayLiterals.golden")); 1146 CHECK(CompareTexts(BuildActual(printer, snippets),
1147 LoadGolden("ArrayLiterals.golden")));
1095 } 1148 }
1096 1149
1097 TEST(ArrayLiteralsWide) { 1150 TEST(ArrayLiteralsWide) {
1098 InitializedIgnitionHandleScope scope; 1151 InitializedIgnitionHandleScope scope;
1099 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1152 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1100 ConstantPoolType::kMixed); 1153 ConstantPoolType::kMixed);
1101 1154
1102 const char* snippets[] = { 1155 const char* snippets[] = {
1103 "var a;" // 1156 "var a;" //
1104 REPEAT_256("\na = 1.23;") // 1157 REPEAT_256("\na = 1.23;") //
1105 "\nreturn [ 1 , 2 ];", 1158 "\nreturn [ 1 , 2 ];\n",
1106 }; 1159 };
1107 1160
1108 CHECK_EQ(BuildActual(printer, snippets), 1161 CHECK(CompareTexts(BuildActual(printer, snippets),
1109 LoadGolden("ArrayLiteralsWide.golden")); 1162 LoadGolden("ArrayLiteralsWide.golden")));
1110 } 1163 }
1111 1164
1112 TEST(ObjectLiterals) { 1165 TEST(ObjectLiterals) {
1113 InitializedIgnitionHandleScope scope; 1166 InitializedIgnitionHandleScope scope;
1114 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1167 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1115 ConstantPoolType::kMixed); 1168 ConstantPoolType::kMixed);
1116 1169
1117 const char* snippets[] = { 1170 const char* snippets[] = {
1118 "return { };", 1171 "return { };\n",
1119 1172
1120 "return { name: 'string', val: 9.2 };", 1173 "return { name: 'string', val: 9.2 };\n",
1121 1174
1122 "var a = 1; return { name: 'string', val: a };", 1175 "var a = 1; return { name: 'string', val: a };\n",
1123 1176
1124 "var a = 1; return { val: a, val: a + 1 };", 1177 "var a = 1; return { val: a, val: a + 1 };\n",
1125 1178
1126 "return { func: function() { } };", 1179 "return { func: function() { } };\n",
1127 1180
1128 "return { func(a) { return a; } };", 1181 "return { func(a) { return a; } };\n",
1129 1182
1130 "return { get a() { return 2; } };", 1183 "return { get a() { return 2; } };\n",
1131 1184
1132 "return { get a() { return this.x; }, set a(val) { this.x = val } };", 1185 "return { get a() { return this.x; }, set a(val) { this.x = val } };\n",
1133 1186
1134 "return { set b(val) { this.y = val } };", 1187 "return { set b(val) { this.y = val } };\n",
1135 1188
1136 "var a = 1; return { 1: a };", 1189 "var a = 1; return { 1: a };\n",
1137 1190
1138 "return { __proto__: null };", 1191 "return { __proto__: null };\n",
1139 1192
1140 "var a = 'test'; return { [a]: 1 };", 1193 "var a = 'test'; return { [a]: 1 };\n",
1141 1194
1142 "var a = 'test'; return { val: a, [a]: 1 };", 1195 "var a = 'test'; return { val: a, [a]: 1 };\n",
1143 1196
1144 "var a = 'test'; return { [a]: 1, __proto__: {} };", 1197 "var a = 'test'; return { [a]: 1, __proto__: {} };\n",
1145 1198
1146 "var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", 1199 "var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };\n",
1147 }; 1200 };
1148 1201
1149 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("ObjectLiterals.golden")); 1202 CHECK(CompareTexts(BuildActual(printer, snippets),
1203 LoadGolden("ObjectLiterals.golden")));
1150 } 1204 }
1151 1205
1152 TEST(ObjectLiteralsWide) { 1206 TEST(ObjectLiteralsWide) {
1153 InitializedIgnitionHandleScope scope; 1207 InitializedIgnitionHandleScope scope;
1154 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1208 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1155 ConstantPoolType::kMixed); 1209 ConstantPoolType::kMixed);
1156 const char* snippets[] = { 1210 const char* snippets[] = {
1157 "var a;" // 1211 "var a;" //
1158 REPEAT_256("\na = 1.23;") // 1212 REPEAT_256("\na = 1.23;") //
1159 "\nreturn { name: 'string', val: 9.2 };", 1213 "\nreturn { name: 'string', val: 9.2 };\n",
1160 }; 1214 };
1161 1215
1162 CHECK_EQ(BuildActual(printer, snippets), 1216 CHECK(CompareTexts(BuildActual(printer, snippets),
1163 LoadGolden("ObjectLiteralsWide.golden")); 1217 LoadGolden("ObjectLiteralsWide.golden")));
1164 } 1218 }
1165 1219
1166 TEST(TopLevelObjectLiterals) { 1220 TEST(TopLevelObjectLiterals) {
1167 InitializedIgnitionHandleScope scope; 1221 InitializedIgnitionHandleScope scope;
1168 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1222 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1169 ConstantPoolType::kMixed); 1223 ConstantPoolType::kMixed);
1170 printer.set_wrap(false); 1224 printer.set_wrap(false);
1171 printer.set_test_function_name("f"); 1225 printer.set_test_function_name("f");
1172 printer.set_execute(false); 1226 printer.set_execute(false);
1173 printer.set_top_level(true); 1227 printer.set_top_level(true);
1174 1228
1175 const char* snippets[] = { 1229 const char* snippets[] = {
1176 "var a = { func: function() { } };", 1230 "var a = { func: function() { } };\n",
1177 }; 1231 };
1178 1232
1179 CHECK_EQ(BuildActual(printer, snippets), 1233 CHECK(CompareTexts(BuildActual(printer, snippets),
1180 LoadGolden("TopLevelObjectLiterals.golden")); 1234 LoadGolden("TopLevelObjectLiterals.golden")));
1181 } 1235 }
1182 1236
1183 TEST(TryCatch) { 1237 TEST(TryCatch) {
1184 InitializedIgnitionHandleScope scope; 1238 InitializedIgnitionHandleScope scope;
1185 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1239 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1186 ConstantPoolType::kString); 1240 ConstantPoolType::kString);
1187 1241
1188 const char* snippets[] = { 1242 const char* snippets[] = {
1189 "try { return 1; } catch(e) { return 2; }", 1243 "try { return 1; } catch(e) { return 2; }\n",
1190 1244
1191 "var a;\n" 1245 "var a;\n"
1192 "try { a = 1 } catch(e1) {};\n" 1246 "try { a = 1 } catch(e1) {};\n"
1193 "try { a = 2 } catch(e2) { a = 3 }", 1247 "try { a = 2 } catch(e2) { a = 3 }\n",
1194 }; 1248 };
1195 1249
1196 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("TryCatch.golden")); 1250 CHECK(CompareTexts(BuildActual(printer, snippets),
1251 LoadGolden("TryCatch.golden")));
1197 } 1252 }
1198 1253
1199 TEST(TryFinally) { 1254 TEST(TryFinally) {
1200 InitializedIgnitionHandleScope scope; 1255 InitializedIgnitionHandleScope scope;
1201 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1256 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1202 ConstantPoolType::kString); 1257 ConstantPoolType::kString);
1203 const char* snippets[] = { 1258 const char* snippets[] = {
1204 "var a = 1;\n" 1259 "var a = 1;\n"
1205 "try { a = 2; } finally { a = 3; }", 1260 "try { a = 2; } finally { a = 3; }\n",
1206 1261
1207 "var a = 1;\n" 1262 "var a = 1;\n"
1208 "try { a = 2; } catch(e) { a = 20 } finally { a = 3; }", 1263 "try { a = 2; } catch(e) { a = 20 } finally { a = 3; }\n",
1209 1264
1210 "var a; try {\n" 1265 "var a; try {\n"
1211 " try { a = 1 } catch(e) { a = 2 }\n" 1266 " try { a = 1 } catch(e) { a = 2 }\n"
1212 "} catch(e) { a = 20 } finally { a = 3; }", 1267 "} catch(e) { a = 20 } finally { a = 3; }\n",
1213 }; 1268 };
1214 1269
1215 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("TryFinally.golden")); 1270 CHECK(CompareTexts(BuildActual(printer, snippets),
1271 LoadGolden("TryFinally.golden")));
1216 } 1272 }
1217 1273
1218 TEST(Throw) { 1274 TEST(Throw) {
1219 InitializedIgnitionHandleScope scope; 1275 InitializedIgnitionHandleScope scope;
1220 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1276 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1221 ConstantPoolType::kString); 1277 ConstantPoolType::kString);
1222 const char* snippets[] = { 1278 const char* snippets[] = {
1223 "throw 1;", 1279 "throw 1;\n",
1224 1280
1225 "throw 'Error';", 1281 "throw 'Error';\n",
1226 1282
1227 "var a = 1; if (a) { throw 'Error'; };", 1283 "var a = 1; if (a) { throw 'Error'; };\n",
1228 }; 1284 };
1229 1285
1230 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Throw.golden")); 1286 CHECK(
1287 CompareTexts(BuildActual(printer, snippets), LoadGolden("Throw.golden")));
1231 } 1288 }
1232 1289
1233 TEST(CallNew) { 1290 TEST(CallNew) {
1234 InitializedIgnitionHandleScope scope; 1291 InitializedIgnitionHandleScope scope;
1235 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1292 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1236 ConstantPoolType::kMixed); 1293 ConstantPoolType::kMixed);
1237 printer.set_wrap(false); 1294 printer.set_wrap(false);
1238 printer.set_test_function_name("f"); 1295 printer.set_test_function_name("f");
1239 1296
1240 const char* snippets[] = { 1297 const char* snippets[] = {
1241 "function bar() { this.value = 0; }\n" 1298 "function bar() { this.value = 0; }\n"
1242 "function f() { return new bar(); }\n" 1299 "function f() { return new bar(); }\n"
1243 "f();", 1300 "f();\n",
1244 1301
1245 "function bar(x) { this.value = 18; this.x = x;}\n" 1302 "function bar(x) { this.value = 18; this.x = x;}\n"
1246 "function f() { return new bar(3); }\n" 1303 "function f() { return new bar(3); }\n"
1247 "f();", 1304 "f();\n",
1248 1305
1249 "function bar(w, x, y, z) {\n" 1306 "function bar(w, x, y, z) {\n"
1250 " this.value = 18;\n" 1307 " this.value = 18;\n"
1251 " this.x = x;\n" 1308 " this.x = x;\n"
1252 " this.y = y;\n" 1309 " this.y = y;\n"
1253 " this.z = z;\n" 1310 " this.z = z;\n"
1254 "}\n" 1311 "}\n"
1255 "function f() { return new bar(3, 4, 5); }\n" 1312 "function f() { return new bar(3, 4, 5); }\n"
1256 "f();", 1313 "f();\n",
1257 }; 1314 };
1258 1315
1259 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("CallNew.golden")); 1316 CHECK(CompareTexts(BuildActual(printer, snippets),
1317 LoadGolden("CallNew.golden")));
1260 } 1318 }
1261 1319
1262 TEST(ContextVariables) { 1320 TEST(ContextVariables) {
1263 // The wide check below relies on MIN_CONTEXT_SLOTS + 3 + 249 == 256, if this 1321 // The wide check below relies on MIN_CONTEXT_SLOTS + 3 + 249 == 256, if this
1264 // ever changes, the REPEAT_XXX should be changed to output the correct number 1322 // ever changes, the REPEAT_XXX should be changed to output the correct number
1265 // of unique variables to trigger the wide slot load / store. 1323 // of unique variables to trigger the wide slot load / store.
1266 STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS + 3 + 249 == 256); 1324 STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS + 3 + 249 == 256);
1267 1325
1268 InitializedIgnitionHandleScope scope; 1326 InitializedIgnitionHandleScope scope;
1269 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1327 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1270 ConstantPoolType::kMixed); 1328 ConstantPoolType::kMixed);
1271 const char* snippets[] = { 1329 const char* snippets[] = {
1272 "var a; return function() { a = 1; };", 1330 "var a; return function() { a = 1; };\n",
1273 1331
1274 "var a = 1; return function() { a = 2; };", 1332 "var a = 1; return function() { a = 2; };\n",
1275 1333
1276 "var a = 1; var b = 2; return function() { a = 2; b = 3 };", 1334 "var a = 1; var b = 2; return function() { a = 2; b = 3 };\n",
1277 1335
1278 "var a; (function() { a = 2; })(); return a;", 1336 "var a; (function() { a = 2; })(); return a;\n",
1279 1337
1280 "'use strict';\n" 1338 "'use strict';\n"
1281 "let a = 1;\n" 1339 "let a = 1;\n"
1282 "{ let b = 2; return function() { a + b; }; }", 1340 "{ let b = 2; return function() { a + b; }; }\n",
1283 1341
1284 "'use strict';\n" 1342 "'use strict';\n"
1285 REPEAT_249_UNIQUE_VARS() 1343 REPEAT_249_UNIQUE_VARS()
1286 "eval();\n" 1344 "eval();\n"
1287 "var b = 100;\n" 1345 "var b = 100;\n"
1288 "return b", 1346 "return b\n",
1289 }; 1347 };
1290 1348
1291 CHECK_EQ(BuildActual(printer, snippets), 1349 CHECK(CompareTexts(BuildActual(printer, snippets),
1292 LoadGolden("ContextVariables.golden")); 1350 LoadGolden("ContextVariables.golden")));
1293 } 1351 }
1294 1352
1295 TEST(ContextParameters) { 1353 TEST(ContextParameters) {
1296 InitializedIgnitionHandleScope scope; 1354 InitializedIgnitionHandleScope scope;
1297 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1355 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1298 ConstantPoolType::kMixed); 1356 ConstantPoolType::kMixed);
1299 printer.set_wrap(false); 1357 printer.set_wrap(false);
1300 printer.set_test_function_name("f"); 1358 printer.set_test_function_name("f");
1301 1359
1302 const char* snippets[] = { 1360 const char* snippets[] = {
1303 "function f(arg1) { return function() { arg1 = 2; }; }", 1361 "function f(arg1) { return function() { arg1 = 2; }; }",
1304 1362
1305 "function f(arg1) { var a = function() { arg1 = 2; }; return arg1; }", 1363 "function f(arg1) { var a = function() { arg1 = 2; }; return arg1; }",
1306 1364
1307 "function f(a1, a2, a3, a4) { return function() { a1 = a3; }; }", 1365 "function f(a1, a2, a3, a4) { return function() { a1 = a3; }; }",
1308 1366
1309 "function f() { var self = this; return function() { self = 2; }; }", 1367 "function f() { var self = this; return function() { self = 2; }; }",
1310 }; 1368 };
1311 1369
1312 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1370 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
1313 LoadGolden("ContextParameters.golden")); 1371 LoadGolden("ContextParameters.golden")));
1314 } 1372 }
1315 1373
1316 TEST(OuterContextVariables) { 1374 TEST(OuterContextVariables) {
1317 InitializedIgnitionHandleScope scope; 1375 InitializedIgnitionHandleScope scope;
1318 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1376 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1319 ConstantPoolType::kMixed); 1377 ConstantPoolType::kMixed);
1320 printer.set_wrap(false); 1378 printer.set_wrap(false);
1321 printer.set_test_function_name("f"); 1379 printer.set_test_function_name("f");
1322 1380
1323 const char* snippets[] = { 1381 const char* snippets[] = {
1324 "function Outer() {\n" 1382 "function Outer() {\n"
1325 " var outerVar = 1;\n" 1383 " var outerVar = 1;\n"
1326 " function Inner(innerArg) {\n" 1384 " function Inner(innerArg) {\n"
1327 " this.innerFunc = function() { return outerVar * innerArg; }\n" 1385 " this.innerFunc = function() { return outerVar * innerArg; }\n"
1328 " }\n" 1386 " }\n"
1329 " this.getInnerFunc = function() { return new Inner(1).innerFunc; }\n" 1387 " this.getInnerFunc = function() { return new Inner(1).innerFunc; }\n"
1330 "}\n" 1388 "}\n"
1331 "var f = new Outer().getInnerFunc();", 1389 "var f = new Outer().getInnerFunc();",
1332 1390
1333 "function Outer() {\n" 1391 "function Outer() {\n"
1334 " var outerVar = 1;\n" 1392 " var outerVar = 1;\n"
1335 " function Inner(innerArg) {\n" 1393 " function Inner(innerArg) {\n"
1336 " this.innerFunc = function() { outerVar = innerArg; }\n" 1394 " this.innerFunc = function() { outerVar = innerArg; }\n"
1337 " }\n" 1395 " }\n"
1338 " this.getInnerFunc = function() { return new Inner(1).innerFunc; }\n" 1396 " this.getInnerFunc = function() { return new Inner(1).innerFunc; }\n"
1339 "}\n" 1397 "}\n"
1340 "var f = new Outer().getInnerFunc();", 1398 "var f = new Outer().getInnerFunc();",
1341 }; 1399 };
1342 1400
1343 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1401 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
1344 LoadGolden("OuterContextVariables.golden")); 1402 LoadGolden("OuterContextVariables.golden")));
1345 } 1403 }
1346 1404
1347 TEST(CountOperators) { 1405 TEST(CountOperators) {
1348 InitializedIgnitionHandleScope scope; 1406 InitializedIgnitionHandleScope scope;
1349 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1407 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1350 ConstantPoolType::kMixed); 1408 ConstantPoolType::kMixed);
1351 const char* snippets[] = { 1409 const char* snippets[] = {
1352 "var a = 1; return ++a;", 1410 "var a = 1; return ++a;\n",
1353 1411
1354 "var a = 1; return a++;", 1412 "var a = 1; return a++;\n",
1355 1413
1356 "var a = 1; return --a;", 1414 "var a = 1; return --a;\n",
1357 1415
1358 "var a = 1; return a--;", 1416 "var a = 1; return a--;\n",
1359 1417
1360 "var a = { val: 1 }; return a.val++;", 1418 "var a = { val: 1 }; return a.val++;\n",
1361 1419
1362 "var a = { val: 1 }; return --a.val;", 1420 "var a = { val: 1 }; return --a.val;\n",
1363 1421
1364 "var name = 'var'; var a = { val: 1 }; return a[name]--;", 1422 "var name = 'var'; var a = { val: 1 }; return a[name]--;\n",
1365 1423
1366 "var name = 'var'; var a = { val: 1 }; return ++a[name];", 1424 "var name = 'var'; var a = { val: 1 }; return ++a[name];\n",
1367 1425
1368 "var a = 1; var b = function() { return a }; return ++a;", 1426 "var a = 1; var b = function() { return a }; return ++a;\n",
1369 1427
1370 "var a = 1; var b = function() { return a }; return a--;", 1428 "var a = 1; var b = function() { return a }; return a--;\n",
1371 1429
1372 "var idx = 1; var a = [1, 2]; return a[idx++] = 2;", 1430 "var idx = 1; var a = [1, 2]; return a[idx++] = 2;\n",
1373 }; 1431 };
1374 1432
1375 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("CountOperators.golden")); 1433 CHECK(CompareTexts(BuildActual(printer, snippets),
1434 LoadGolden("CountOperators.golden")));
1376 } 1435 }
1377 1436
1378 TEST(GlobalCountOperators) { 1437 TEST(GlobalCountOperators) {
1379 InitializedIgnitionHandleScope scope; 1438 InitializedIgnitionHandleScope scope;
1380 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1439 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1381 ConstantPoolType::kString); 1440 ConstantPoolType::kString);
1382 printer.set_wrap(false); 1441 printer.set_wrap(false);
1383 printer.set_test_function_name("f"); 1442 printer.set_test_function_name("f");
1384 1443
1385 const char* snippets[] = { 1444 const char* snippets[] = {
1386 "var global = 1;\n" 1445 "var global = 1;\n"
1387 "function f() { return ++global; }\n" 1446 "function f() { return ++global; }\n"
1388 "f();", 1447 "f();\n",
1389 1448
1390 "var global = 1;\n" 1449 "var global = 1;\n"
1391 "function f() { return global--; }\n" 1450 "function f() { return global--; }\n"
1392 "f();", 1451 "f();\n",
1393 1452
1394 "unallocated = 1;\n" 1453 "unallocated = 1;\n"
1395 "function f() { 'use strict'; return --unallocated; }\n" 1454 "function f() { 'use strict'; return --unallocated; }\n"
1396 "f();", 1455 "f();\n",
1397 1456
1398 "unallocated = 1;\n" 1457 "unallocated = 1;\n"
1399 "function f() { return unallocated++; }\n" 1458 "function f() { return unallocated++; }\n"
1400 "f();", 1459 "f();\n",
1401 }; 1460 };
1402 1461
1403 CHECK_EQ(BuildActual(printer, snippets), 1462 CHECK(CompareTexts(BuildActual(printer, snippets),
1404 LoadGolden("GlobalCountOperators.golden")); 1463 LoadGolden("GlobalCountOperators.golden")));
1405 } 1464 }
1406 1465
1407 TEST(CompoundExpressions) { 1466 TEST(CompoundExpressions) {
1408 InitializedIgnitionHandleScope scope; 1467 InitializedIgnitionHandleScope scope;
1409 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1468 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1410 ConstantPoolType::kMixed); 1469 ConstantPoolType::kMixed);
1411 const char* snippets[] = { 1470 const char* snippets[] = {
1412 "var a = 1; a += 2;", 1471 "var a = 1; a += 2;\n",
1413 1472
1414 "var a = 1; a /= 2;", 1473 "var a = 1; a /= 2;\n",
1415 1474
1416 "var a = { val: 2 }; a.name *= 2;", 1475 "var a = { val: 2 }; a.name *= 2;\n",
1417 1476
1418 "var a = { 1: 2 }; a[1] ^= 2;", 1477 "var a = { 1: 2 }; a[1] ^= 2;\n",
1419 1478
1420 "var a = 1; (function f() { return a; }); a |= 24;", 1479 "var a = 1; (function f() { return a; }); a |= 24;\n",
1421 }; 1480 };
1422 1481
1423 CHECK_EQ(BuildActual(printer, snippets), 1482 CHECK(CompareTexts(BuildActual(printer, snippets),
1424 LoadGolden("CompoundExpressions.golden")); 1483 LoadGolden("CompoundExpressions.golden")));
1425 } 1484 }
1426 1485
1427 TEST(GlobalCompoundExpressions) { 1486 TEST(GlobalCompoundExpressions) {
1428 InitializedIgnitionHandleScope scope; 1487 InitializedIgnitionHandleScope scope;
1429 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1488 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1430 ConstantPoolType::kString); 1489 ConstantPoolType::kString);
1431 printer.set_wrap(false); 1490 printer.set_wrap(false);
1432 printer.set_test_function_name("f"); 1491 printer.set_test_function_name("f");
1433 1492
1434 const char* snippets[] = { 1493 const char* snippets[] = {
1435 "var global = 1;\n" 1494 "var global = 1;\n"
1436 "function f() { return global &= 1; }\n" 1495 "function f() { return global &= 1; }\n"
1437 "f();", 1496 "f();\n",
1438 1497
1439 "unallocated = 1;\n" 1498 "unallocated = 1;\n"
1440 "function f() { return unallocated += 1; }\n" 1499 "function f() { return unallocated += 1; }\n"
1441 "f();", 1500 "f();\n",
1442 }; 1501 };
1443 1502
1444 CHECK_EQ(BuildActual(printer, snippets), 1503 CHECK(CompareTexts(BuildActual(printer, snippets),
1445 LoadGolden("GlobalCompoundExpressions.golden")); 1504 LoadGolden("GlobalCompoundExpressions.golden")));
1446 } 1505 }
1447 1506
1448 TEST(CreateArguments) { 1507 TEST(CreateArguments) {
1449 InitializedIgnitionHandleScope scope; 1508 InitializedIgnitionHandleScope scope;
1450 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1509 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1451 ConstantPoolType::kString); 1510 ConstantPoolType::kString);
1452 printer.set_wrap(false); 1511 printer.set_wrap(false);
1453 printer.set_test_function_name("f"); 1512 printer.set_test_function_name("f");
1454 1513
1455 const char* snippets[] = { 1514 const char* snippets[] = {
1456 "function f() { return arguments; }", 1515 "function f() { return arguments; }",
1457 1516
1458 "function f() { return arguments[0]; }", 1517 "function f() { return arguments[0]; }",
1459 1518
1460 "function f() { 'use strict'; return arguments; }", 1519 "function f() { 'use strict'; return arguments; }",
1461 1520
1462 "function f(a) { return arguments[0]; }", 1521 "function f(a) { return arguments[0]; }",
1463 1522
1464 "function f(a, b, c) { return arguments; }", 1523 "function f(a, b, c) { return arguments; }",
1465 1524
1466 "function f(a, b, c) { 'use strict'; return arguments; }", 1525 "function f(a, b, c) { 'use strict'; return arguments; }",
1467 }; 1526 };
1468 1527
1469 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1528 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
1470 LoadGolden("CreateArguments.golden")); 1529 LoadGolden("CreateArguments.golden")));
1471 } 1530 }
1472 1531
1473 TEST(CreateRestParameter) { 1532 TEST(CreateRestParameter) {
1474 InitializedIgnitionHandleScope scope; 1533 InitializedIgnitionHandleScope scope;
1475 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1534 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1476 ConstantPoolType::kNumber); 1535 ConstantPoolType::kNumber);
1477 printer.set_wrap(false); 1536 printer.set_wrap(false);
1478 printer.set_test_function_name("f"); 1537 printer.set_test_function_name("f");
1479 1538
1480 const char* snippets[] = { 1539 const char* snippets[] = {
1481 "function f(...restArgs) { return restArgs; }", 1540 "function f(...restArgs) { return restArgs; }",
1482 1541
1483 "function f(a, ...restArgs) { return restArgs; }", 1542 "function f(a, ...restArgs) { return restArgs; }",
1484 1543
1485 "function f(a, ...restArgs) { return restArgs[0]; }", 1544 "function f(a, ...restArgs) { return restArgs[0]; }",
1486 1545
1487 "function f(a, ...restArgs) { return restArgs[0] + arguments[0]; }", 1546 "function f(a, ...restArgs) { return restArgs[0] + arguments[0]; }",
1488 }; 1547 };
1489 1548
1490 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1549 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
1491 LoadGolden("CreateRestParameter.golden")); 1550 LoadGolden("CreateRestParameter.golden")));
1492 } 1551 }
1493 1552
1494 TEST(ForIn) { 1553 TEST(ForIn) {
1495 InitializedIgnitionHandleScope scope; 1554 InitializedIgnitionHandleScope scope;
1496 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1555 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1497 ConstantPoolType::kMixed); 1556 ConstantPoolType::kMixed);
1498 const char* snippets[] = { 1557 const char* snippets[] = {
1499 "for (var p in null) {}", 1558 "for (var p in null) {}\n",
1500 1559
1501 "for (var p in undefined) {}", 1560 "for (var p in undefined) {}\n",
1502 1561
1503 "for (var p in undefined) {}", 1562 "for (var p in undefined) {}\n",
1504 1563
1505 "var x = 'potatoes';\n" 1564 "var x = 'potatoes';\n"
1506 "for (var p in x) { return p; }", 1565 "for (var p in x) { return p; }\n",
1507 1566
1508 "var x = 0;\n" 1567 "var x = 0;\n"
1509 "for (var p in [1,2,3]) { x += p; }", 1568 "for (var p in [1,2,3]) { x += p; }\n",
1510 1569
1511 "var x = { 'a': 1, 'b': 2 };\n" 1570 "var x = { 'a': 1, 'b': 2 };\n"
1512 "for (x['a'] in [10, 20, 30]) {\n" 1571 "for (x['a'] in [10, 20, 30]) {\n"
1513 " if (x['a'] == 10) continue;\n" 1572 " if (x['a'] == 10) continue;\n"
1514 " if (x['a'] == 20) break;\n" 1573 " if (x['a'] == 20) break;\n"
1515 "}", 1574 "}\n",
1516 1575
1517 "var x = [ 10, 11, 12 ] ;\n" 1576 "var x = [ 10, 11, 12 ] ;\n"
1518 "for (x[0] in [1,2,3]) { return x[3]; }", 1577 "for (x[0] in [1,2,3]) { return x[3]; }\n",
1519 }; 1578 };
1520 1579
1521 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("ForIn.golden")); 1580 CHECK(
1581 CompareTexts(BuildActual(printer, snippets), LoadGolden("ForIn.golden")));
1522 } 1582 }
1523 1583
1524 TEST(ForOf) { 1584 TEST(ForOf) {
1525 InitializedIgnitionHandleScope scope; 1585 InitializedIgnitionHandleScope scope;
1526 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1586 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1527 ConstantPoolType::kMixed); 1587 ConstantPoolType::kMixed);
1528 const char* snippets[] = { 1588 const char* snippets[] = {
1529 "for (var p of [0, 1, 2]) {}", 1589 "for (var p of [0, 1, 2]) {}\n",
1530 1590
1531 "var x = 'potatoes';\n" 1591 "var x = 'potatoes';\n"
1532 "for (var p of x) { return p; }", 1592 "for (var p of x) { return p; }\n",
1533 1593
1534 "for (var x of [10, 20, 30]) {\n" 1594 "for (var x of [10, 20, 30]) {\n"
1535 " if (x == 10) continue;\n" 1595 " if (x == 10) continue;\n"
1536 " if (x == 20) break;\n" 1596 " if (x == 20) break;\n"
1537 "}", 1597 "}\n",
1538 1598
1539 "var x = { 'a': 1, 'b': 2 };\n" 1599 "var x = { 'a': 1, 'b': 2 };\n"
1540 "for (x['a'] of [1,2,3]) { return x['a']; }", 1600 "for (x['a'] of [1,2,3]) { return x['a']; }\n",
1541 }; 1601 };
1542 1602
1543 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("ForOf.golden")); 1603 CHECK(
1604 CompareTexts(BuildActual(printer, snippets), LoadGolden("ForOf.golden")));
1544 } 1605 }
1545 1606
1546 TEST(Conditional) { 1607 TEST(Conditional) {
1547 InitializedIgnitionHandleScope scope; 1608 InitializedIgnitionHandleScope scope;
1548 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1609 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1549 ConstantPoolType::kNumber); 1610 ConstantPoolType::kNumber);
1550 const char* snippets[] = { 1611 const char* snippets[] = {
1551 "return 1 ? 2 : 3;", 1612 "return 1 ? 2 : 3;\n",
1552 1613
1553 "return 1 ? 2 ? 3 : 4 : 5;", 1614 "return 1 ? 2 ? 3 : 4 : 5;\n",
1554 }; 1615 };
1555 1616
1556 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Conditional.golden")); 1617 CHECK(CompareTexts(BuildActual(printer, snippets),
1618 LoadGolden("Conditional.golden")));
1557 } 1619 }
1558 1620
1559 TEST(Switch) { 1621 TEST(Switch) {
1560 InitializedIgnitionHandleScope scope; 1622 InitializedIgnitionHandleScope scope;
1561 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1623 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1562 ConstantPoolType::kNumber); 1624 ConstantPoolType::kNumber);
1563 const char* snippets[] = { 1625 const char* snippets[] = {
1564 "var a = 1;\n" 1626 "var a = 1;\n"
1565 "switch(a) {\n" 1627 "switch(a) {\n"
1566 " case 1: return 2;\n" 1628 " case 1: return 2;\n"
1567 " case 2: return 3;\n" 1629 " case 2: return 3;\n"
1568 "}", 1630 "}\n",
1569 1631
1570 "var a = 1;\n" 1632 "var a = 1;\n"
1571 "switch(a) {\n" 1633 "switch(a) {\n"
1572 " case 1: a = 2; break;\n" 1634 " case 1: a = 2; break;\n"
1573 " case 2: a = 3; break;\n" 1635 " case 2: a = 3; break;\n"
1574 "}", 1636 "}\n",
1575 1637
1576 "var a = 1;\n" 1638 "var a = 1;\n"
1577 "switch(a) {\n" 1639 "switch(a) {\n"
1578 " case 1: a = 2; // fall-through\n" 1640 " case 1: a = 2; // fall-through\n"
1579 " case 2: a = 3; break;\n" 1641 " case 2: a = 3; break;\n"
1580 "}", 1642 "}\n",
1581 1643
1582 "var a = 1;\n" 1644 "var a = 1;\n"
1583 "switch(a) {\n" 1645 "switch(a) {\n"
1584 " case 2: break;\n" 1646 " case 2: break;\n"
1585 " case 3: break;\n" 1647 " case 3: break;\n"
1586 " default: a = 1; break;\n" 1648 " default: a = 1; break;\n"
1587 "}", 1649 "}\n",
1588 1650
1589 "var a = 1;\n" 1651 "var a = 1;\n"
1590 "switch(typeof(a)) {\n" 1652 "switch(typeof(a)) {\n"
1591 " case 2: a = 1; break;\n" 1653 " case 2: a = 1; break;\n"
1592 " case 3: a = 2; break;\n" 1654 " case 3: a = 2; break;\n"
1593 " default: a = 3; break;\n" 1655 " default: a = 3; break;\n"
1594 "}", 1656 "}\n",
1595 1657
1596 "var a = 1;\n" 1658 "var a = 1;\n"
1597 "switch(a) {\n" 1659 "switch(a) {\n"
1598 " case typeof(a): a = 1; break;\n" 1660 " case typeof(a): a = 1; break;\n"
1599 " default: a = 2; break;\n" 1661 " default: a = 2; break;\n"
1600 "}", 1662 "}\n",
1601 1663
1602 "var a = 1;\n" 1664 "var a = 1;\n"
1603 "switch(a) {\n" 1665 "switch(a) {\n"
1604 " case 1:\n" 1666 " case 1:\n"
1605 REPEAT_64(" a = 2;\n") 1667 REPEAT_64(" a = 2;\n")
1606 " break;\n" 1668 " break;\n"
1607 " case 2:\n" 1669 " case 2:\n"
1608 " a = 3;\n" 1670 " a = 3;\n"
1609 " break;\n" 1671 " break;\n"
1610 "}", 1672 "}\n",
1611 1673
1612 "var a = 1;\n" 1674 "var a = 1;\n"
1613 "switch(a) {\n" 1675 "switch(a) {\n"
1614 " case 1: \n" 1676 " case 1: \n"
1615 " switch(a + 1) {\n" 1677 " switch(a + 1) {\n"
1616 " case 2 : a = 1; break;\n" 1678 " case 2 : a = 1; break;\n"
1617 " default : a = 2; break;\n" 1679 " default : a = 2; break;\n"
1618 " } // fall-through\n" 1680 " } // fall-through\n"
1619 " case 2: a = 3;\n" 1681 " case 2: a = 3;\n"
1620 "}", 1682 "}\n",
1621 }; 1683 };
1622 1684
1623 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Switch.golden")); 1685 CHECK(CompareTexts(BuildActual(printer, snippets),
1686 LoadGolden("Switch.golden")));
1624 } 1687 }
1625 1688
1626 TEST(BasicBlockToBoolean) { 1689 TEST(BasicBlockToBoolean) {
1627 InitializedIgnitionHandleScope scope; 1690 InitializedIgnitionHandleScope scope;
1628 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1691 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1629 ConstantPoolType::kNumber); 1692 ConstantPoolType::kNumber);
1630 const char* snippets[] = { 1693 const char* snippets[] = {
1631 "var a = 1; if (a || a < 0) { return 1; }", 1694 "var a = 1; if (a || a < 0) { return 1; }\n",
1632 1695
1633 "var a = 1; if (a && a < 0) { return 1; }", 1696 "var a = 1; if (a && a < 0) { return 1; }\n",
1634 1697
1635 "var a = 1; a = (a || a < 0) ? 2 : 3;", 1698 "var a = 1; a = (a || a < 0) ? 2 : 3;\n",
1636 }; 1699 };
1637 1700
1638 CHECK_EQ(BuildActual(printer, snippets), 1701 CHECK(CompareTexts(BuildActual(printer, snippets),
1639 LoadGolden("BasicBlockToBoolean.golden")); 1702 LoadGolden("BasicBlockToBoolean.golden")));
1640 } 1703 }
1641 1704
1642 TEST(DeadCodeRemoval) { 1705 TEST(DeadCodeRemoval) {
1643 InitializedIgnitionHandleScope scope; 1706 InitializedIgnitionHandleScope scope;
1644 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1707 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1645 ConstantPoolType::kNumber); 1708 ConstantPoolType::kNumber);
1646 const char* snippets[] = { 1709 const char* snippets[] = {
1647 "return; var a = 1; a();", 1710 "return; var a = 1; a();\n",
1648 1711
1649 "if (false) { return; }; var a = 1;", 1712 "if (false) { return; }; var a = 1;\n",
1650 1713
1651 "if (true) { return 1; } else { return 2; };", 1714 "if (true) { return 1; } else { return 2; };\n",
1652 1715
1653 "var a = 1; if (a) { return 1; }; return 2;", 1716 "var a = 1; if (a) { return 1; }; return 2;\n",
1654 }; 1717 };
1655 1718
1656 CHECK_EQ(BuildActual(printer, snippets), 1719 CHECK(CompareTexts(BuildActual(printer, snippets),
1657 LoadGolden("DeadCodeRemoval.golden")); 1720 LoadGolden("DeadCodeRemoval.golden")));
1658 } 1721 }
1659 1722
1660 TEST(ThisFunction) { 1723 TEST(ThisFunction) {
1661 InitializedIgnitionHandleScope scope; 1724 InitializedIgnitionHandleScope scope;
1662 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1725 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1663 ConstantPoolType::kNumber); 1726 ConstantPoolType::kNumber);
1664 printer.set_wrap(false); 1727 printer.set_wrap(false);
1665 printer.set_test_function_name("f"); 1728 printer.set_test_function_name("f");
1666 1729
1667 const char* snippets[] = { 1730 const char* snippets[] = {
1668 "var f;\n" 1731 "var f;\n"
1669 "f = function f() {};", 1732 "f = function f() {};",
1670 1733
1671 "var f;\n" 1734 "var f;\n"
1672 "f = function f() { return f; };", 1735 "f = function f() { return f; };",
1673 }; 1736 };
1674 1737
1675 CHECK_EQ(BuildActual(printer, snippets, "", "\nf();"), 1738 CHECK(CompareTexts(BuildActual(printer, snippets, "", "\nf();"),
1676 LoadGolden("ThisFunction.golden")); 1739 LoadGolden("ThisFunction.golden")));
1677 } 1740 }
1678 1741
1679 TEST(NewTarget) { 1742 TEST(NewTarget) {
1680 InitializedIgnitionHandleScope scope; 1743 InitializedIgnitionHandleScope scope;
1681 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1744 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1682 ConstantPoolType::kMixed); 1745 ConstantPoolType::kMixed);
1683 1746
1684 const char* snippets[] = { 1747 const char* snippets[] = {
1685 "return new.target;", 1748 "return new.target;\n",
1686 1749
1687 "new.target;", 1750 "new.target;\n",
1688 }; 1751 };
1689 1752
1690 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("NewTarget.golden")); 1753 CHECK(CompareTexts(BuildActual(printer, snippets),
1754 LoadGolden("NewTarget.golden")));
1691 } 1755 }
1692 1756
1693 TEST(RemoveRedundantLdar) { 1757 TEST(RemoveRedundantLdar) {
1694 InitializedIgnitionHandleScope scope; 1758 InitializedIgnitionHandleScope scope;
1695 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1759 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1696 ConstantPoolType::kNumber); 1760 ConstantPoolType::kNumber);
1697 const char* snippets[] = { 1761 const char* snippets[] = {
1698 "var ld_a = 1;\n" // This test is to check Ldar does not 1762 "var ld_a = 1;\n" // This test is to check Ldar does not
1699 "while(true) {\n" // get removed if the preceding Star is 1763 "while(true) {\n" // get removed if the preceding Star is
1700 " ld_a = ld_a + ld_a;\n" // in a different basicblock. 1764 " ld_a = ld_a + ld_a;\n" // in a different basicblock.
1701 " if (ld_a > 10) break;\n" 1765 " if (ld_a > 10) break;\n"
1702 "}\n" 1766 "}\n"
1703 "return ld_a;", 1767 "return ld_a;\n",
1704 1768
1705 "var ld_a = 1;\n" 1769 "var ld_a = 1;\n"
1706 "do {\n" 1770 "do {\n"
1707 " ld_a = ld_a + ld_a;\n" 1771 " ld_a = ld_a + ld_a;\n"
1708 " if (ld_a > 10) continue;\n" 1772 " if (ld_a > 10) continue;\n"
1709 "} while(false);\n" 1773 "} while(false);\n"
1710 "return ld_a;", 1774 "return ld_a;\n",
1711 1775
1712 "var ld_a = 1;\n" 1776 "var ld_a = 1;\n"
1713 " ld_a = ld_a + ld_a;\n" 1777 " ld_a = ld_a + ld_a;\n"
1714 " return ld_a;", 1778 " return ld_a;\n",
1715 }; 1779 };
1716 1780
1717 CHECK_EQ(BuildActual(printer, snippets), 1781 CHECK(CompareTexts(BuildActual(printer, snippets),
1718 LoadGolden("RemoveRedundantLdar.golden")); 1782 LoadGolden("RemoveRedundantLdar.golden")));
1719 } 1783 }
1720 1784
1721 TEST(AssignmentsInBinaryExpression) { 1785 TEST(AssignmentsInBinaryExpression) {
1722 InitializedIgnitionHandleScope scope; 1786 InitializedIgnitionHandleScope scope;
1723 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1787 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1724 ConstantPoolType::kString); 1788 ConstantPoolType::kString);
1725 const char* snippets[] = { 1789 const char* snippets[] = {
1726 "var x = 0, y = 1;\n" 1790 "var x = 0, y = 1;\n"
1727 "return (x = 2, y = 3, x = 4, y = 5);", 1791 "return (x = 2, y = 3, x = 4, y = 5);\n",
1728 1792
1729 "var x = 55;\n" 1793 "var x = 55;\n"
1730 "var y = (x = 100);\n" 1794 "var y = (x = 100);\n"
1731 "return y;", 1795 "return y;\n",
1732 1796
1733 "var x = 55;\n" 1797 "var x = 55;\n"
1734 "x = x + (x = 100) + (x = 101);\n" 1798 "x = x + (x = 100) + (x = 101);\n"
1735 "return x;", 1799 "return x;\n",
1736 1800
1737 "var x = 55;\n" 1801 "var x = 55;\n"
1738 "x = (x = 56) - x + (x = 57);\n" 1802 "x = (x = 56) - x + (x = 57);\n"
1739 "x++;\n" 1803 "x++;\n"
1740 "return x;", 1804 "return x;\n",
1741 1805
1742 "var x = 55;\n" 1806 "var x = 55;\n"
1743 "var y = x + (x = 1) + (x = 2) + (x = 3);\n" 1807 "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
1744 "return y;", 1808 "return y;\n",
1745 1809
1746 "var x = 55;\n" 1810 "var x = 55;\n"
1747 "var x = x + (x = 1) + (x = 2) + (x = 3);\n" 1811 "var x = x + (x = 1) + (x = 2) + (x = 3);\n"
1748 "return x;", 1812 "return x;\n",
1749 1813
1750 "var x = 10, y = 20;\n" 1814 "var x = 10, y = 20;\n"
1751 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + " 1815 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + "
1752 "y;\n", 1816 "y;\n",
1753 1817
1754 "var x = 17;\n" 1818 "var x = 17;\n"
1755 "return 1 + x + (x++) + (++x);\n", 1819 "return 1 + x + (x++) + (++x);\n",
1756 }; 1820 };
1757 1821
1758 CHECK_EQ(BuildActual(printer, snippets), 1822 CHECK(CompareTexts(BuildActual(printer, snippets),
1759 LoadGolden("AssignmentsInBinaryExpression.golden")); 1823 LoadGolden("AssignmentsInBinaryExpression.golden")));
1760 } 1824 }
1761 1825
1762 TEST(Eval) { 1826 TEST(Eval) {
1763 InitializedIgnitionHandleScope scope; 1827 InitializedIgnitionHandleScope scope;
1764 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1828 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1765 ConstantPoolType::kString); 1829 ConstantPoolType::kString);
1766 const char* snippets[] = { 1830 const char* snippets[] = {
1767 "return eval('1;');", 1831 "return eval('1;');\n",
1768 }; 1832 };
1769 1833
1770 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Eval.golden")); 1834 CHECK(
1835 CompareTexts(BuildActual(printer, snippets), LoadGolden("Eval.golden")));
1771 } 1836 }
1772 1837
1773 TEST(LookupSlot) { 1838 TEST(LookupSlot) {
1774 InitializedIgnitionHandleScope scope; 1839 InitializedIgnitionHandleScope scope;
1775 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1840 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1776 ConstantPoolType::kString); 1841 ConstantPoolType::kString);
1777 1842
1778 const char* snippets[] = { 1843 const char* snippets[] = {
1779 "eval('var x = 10;'); return x;", 1844 "eval('var x = 10;'); return x;\n",
1780 1845
1781 "eval('var x = 10;'); return typeof x;", 1846 "eval('var x = 10;'); return typeof x;\n",
1782 1847
1783 "x = 20; return eval('');", 1848 "x = 20; return eval('');\n",
1784 }; 1849 };
1785 1850
1786 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("LookupSlot.golden")); 1851 CHECK(CompareTexts(BuildActual(printer, snippets),
1852 LoadGolden("LookupSlot.golden")));
1787 } 1853 }
1788 1854
1789 TEST(CallLookupSlot) { 1855 TEST(CallLookupSlot) {
1790 InitializedIgnitionHandleScope scope; 1856 InitializedIgnitionHandleScope scope;
1791 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1857 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1792 ConstantPoolType::kMixed); 1858 ConstantPoolType::kMixed);
1793 const char* snippets[] = { 1859 const char* snippets[] = {
1794 "g = function(){}; eval(''); return g();", 1860 "g = function(){}; eval(''); return g();\n",
1795 }; 1861 };
1796 1862
1797 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("CallLookupSlot.golden")); 1863 CHECK(CompareTexts(BuildActual(printer, snippets),
1864 LoadGolden("CallLookupSlot.golden")));
1798 } 1865 }
1799 1866
1800 // TODO(mythria): tests for variable/function declaration in lookup slots. 1867 // TODO(mythria): tests for variable/function declaration in lookup slots.
1801 1868
1802 TEST(LookupSlotInEval) { 1869 TEST(LookupSlotInEval) {
1803 InitializedIgnitionHandleScope scope; 1870 InitializedIgnitionHandleScope scope;
1804 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1871 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1805 ConstantPoolType::kString); 1872 ConstantPoolType::kString);
1806 printer.set_wrap(false); 1873 printer.set_wrap(false);
1807 printer.set_test_function_name("f"); 1874 printer.set_test_function_name("f");
(...skipping 11 matching lines...) Expand all
1819 std::string actual = BuildActual(printer, snippets, 1886 std::string actual = BuildActual(printer, snippets,
1820 "var f;\n" 1887 "var f;\n"
1821 "var x = 1;\n" 1888 "var x = 1;\n"
1822 "function f1() {\n" 1889 "function f1() {\n"
1823 " eval(\"function t() { ", 1890 " eval(\"function t() { ",
1824 1891
1825 " }; f = t; f();\");\n" 1892 " }; f = t; f();\");\n"
1826 "}\n" 1893 "}\n"
1827 "f1();"); 1894 "f1();");
1828 1895
1829 CHECK_EQ(actual, LoadGolden("LookupSlotInEval.golden")); 1896 CHECK(CompareTexts(actual, LoadGolden("LookupSlotInEval.golden")));
1830 } 1897 }
1831 1898
1832 TEST(LookupSlotWideInEval) { 1899 TEST(LookupSlotWideInEval) {
1833 InitializedIgnitionHandleScope scope; 1900 InitializedIgnitionHandleScope scope;
1834 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1901 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1835 ConstantPoolType::kMixed); 1902 ConstantPoolType::kMixed);
1836 printer.set_wrap(false); 1903 printer.set_wrap(false);
1837 printer.set_test_function_name("f"); 1904 printer.set_test_function_name("f");
1838 1905
1839 const char* snippets[] = { 1906 const char* snippets[] = {
(...skipping 15 matching lines...) Expand all
1855 "var f;\n" 1922 "var f;\n"
1856 "var x = 1;\n" 1923 "var x = 1;\n"
1857 "function f1() {\n" 1924 "function f1() {\n"
1858 " eval(\"function t() {\" +\n", 1925 " eval(\"function t() {\" +\n",
1859 1926
1860 " \"};\" +\n" 1927 " \"};\" +\n"
1861 " \"f = t; f();\"\n);\n" 1928 " \"f = t; f();\"\n);\n"
1862 "}\n" 1929 "}\n"
1863 "f1();"); 1930 "f1();");
1864 1931
1865 CHECK_EQ(actual, LoadGolden("LookupSlotWideInEval.golden")); 1932 CHECK(CompareTexts(actual, LoadGolden("LookupSlotWideInEval.golden")));
1866 } 1933 }
1867 1934
1868 TEST(DeleteLookupSlotInEval) { 1935 TEST(DeleteLookupSlotInEval) {
1869 InitializedIgnitionHandleScope scope; 1936 InitializedIgnitionHandleScope scope;
1870 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1937 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1871 ConstantPoolType::kString); 1938 ConstantPoolType::kString);
1872 printer.set_wrap(false); 1939 printer.set_wrap(false);
1873 printer.set_test_function_name("f"); 1940 printer.set_test_function_name("f");
1874 1941
1875 const char* snippets[] = { 1942 const char* snippets[] = {
1876 "delete x;", 1943 "delete x;",
1877 1944
1878 "return delete y;", 1945 "return delete y;",
1879 1946
1880 "return delete z;", 1947 "return delete z;",
1881 }; 1948 };
1882 1949
1883 std::string actual = BuildActual(printer, snippets, 1950 std::string actual = BuildActual(printer, snippets,
1884 "var f;\n" 1951 "var f;\n"
1885 "var x = 1;\n" 1952 "var x = 1;\n"
1886 "z = 10;\n" 1953 "z = 10;\n"
1887 "function f1() {\n" 1954 "function f1() {\n"
1888 " var y;\n" 1955 " var y;\n"
1889 " eval(\"function t() { ", 1956 " eval(\"function t() { ",
1890 1957
1891 " }; f = t; f();\");\n" 1958 " }; f = t; f();\");\n"
1892 "}\n" 1959 "}\n"
1893 "f1();"); 1960 "f1();");
1894 1961
1895 CHECK_EQ(actual, LoadGolden("DeleteLookupSlotInEval.golden")); 1962 CHECK(CompareTexts(actual, LoadGolden("DeleteLookupSlotInEval.golden")));
1896 } 1963 }
1897 1964
1898 TEST(WideRegisters) { 1965 TEST(WideRegisters) {
1899 // Prepare prologue that creates frame for lots of registers. 1966 // Prepare prologue that creates frame for lots of registers.
1900 std::ostringstream os; 1967 std::ostringstream os;
1901 for (size_t i = 0; i < 157; ++i) { 1968 for (size_t i = 0; i < 157; ++i) {
1902 os << "var x" << i << ";\n"; 1969 os << "var x" << i << ";\n";
1903 } 1970 }
1904 std::string prologue(os.str()); 1971 std::string prologue(os.str());
1905 1972
1906 InitializedIgnitionHandleScope scope; 1973 InitializedIgnitionHandleScope scope;
1907 BytecodeExpectationsPrinter printer(CcTest::isolate(), 1974 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1908 ConstantPoolType::kNumber); 1975 ConstantPoolType::kNumber);
1909 const char* snippets[] = { 1976 const char* snippets[] = {
1910 "x0 = x127;\n" 1977 "x0 = x127;\n"
1911 "return x0;", 1978 "return x0;\n",
1912 1979
1913 "x127 = x126;\n" 1980 "x127 = x126;\n"
1914 "return x127;", 1981 "return x127;\n",
1915 1982
1916 "if (x2 > 3) { return x129; }\n" 1983 "if (x2 > 3) { return x129; }\n"
1917 "return x128;", 1984 "return x128;\n",
1918 1985
1919 "var x0 = 0;\n" 1986 "var x0 = 0;\n"
1920 "if (x129 == 3) { var x129 = x0; }\n" 1987 "if (x129 == 3) { var x129 = x0; }\n"
1921 "if (x2 > 3) { return x0; }\n" 1988 "if (x2 > 3) { return x0; }\n"
1922 "return x129;", 1989 "return x129;\n",
1923 1990
1924 "var x0 = 0;\n" 1991 "var x0 = 0;\n"
1925 "var x1 = 0;\n" 1992 "var x1 = 0;\n"
1926 "for (x128 = 0; x128 < 64; x128++) {" 1993 "for (x128 = 0; x128 < 64; x128++) {"
1927 " x1 += x128;" 1994 " x1 += x128;"
1928 "}" 1995 "}"
1929 "return x128;", 1996 "return x128;\n",
1930 1997
1931 "var x0 = 1234;\n" 1998 "var x0 = 1234;\n"
1932 "var x1 = 0;\n" 1999 "var x1 = 0;\n"
1933 "for (x128 in x0) {" 2000 "for (x128 in x0) {"
1934 " x1 += x128;" 2001 " x1 += x128;"
1935 "}" 2002 "}"
1936 "return x1;", 2003 "return x1;\n",
1937 2004
1938 "x0 = %Add(x64, x63);\n" 2005 "x0 = %Add(x64, x63);\n"
1939 "x1 = %Add(x27, x143);\n" 2006 "x1 = %Add(x27, x143);\n"
1940 "%TheHole();\n" 2007 "%TheHole();\n"
1941 "return x1;", 2008 "return x1;\n",
1942 }; 2009 };
1943 2010
1944 CHECK_EQ(BuildActual(printer, snippets, prologue.c_str()), 2011 CHECK(CompareTexts(BuildActual(printer, snippets, prologue.c_str()),
1945 LoadGolden("WideRegisters.golden")); 2012 LoadGolden("WideRegisters.golden")));
1946 } 2013 }
1947 2014
1948 TEST(ConstVariable) { 2015 TEST(ConstVariable) {
1949 InitializedIgnitionHandleScope scope; 2016 InitializedIgnitionHandleScope scope;
1950 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2017 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1951 ConstantPoolType::kString); 2018 ConstantPoolType::kString);
1952 const char* snippets[] = { 2019 const char* snippets[] = {
1953 "const x = 10;", 2020 "const x = 10;\n",
1954 2021
1955 "const x = 10; return x;", 2022 "const x = 10; return x;\n",
1956 2023
1957 "const x = ( x = 20);", 2024 "const x = ( x = 20);\n",
1958 2025
1959 "const x = 10; x = 20;", 2026 "const x = 10; x = 20;\n",
1960 }; 2027 };
1961 2028
1962 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("ConstVariable.golden")); 2029 CHECK(CompareTexts(BuildActual(printer, snippets),
2030 LoadGolden("ConstVariable.golden")));
1963 } 2031 }
1964 2032
1965 TEST(LetVariable) { 2033 TEST(LetVariable) {
1966 InitializedIgnitionHandleScope scope; 2034 InitializedIgnitionHandleScope scope;
1967 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2035 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1968 ConstantPoolType::kString); 2036 ConstantPoolType::kString);
1969 const char* snippets[] = { 2037 const char* snippets[] = {
1970 "let x = 10;", 2038 "let x = 10;\n",
1971 2039
1972 "let x = 10; return x;", 2040 "let x = 10; return x;\n",
1973 2041
1974 "let x = (x = 20);", 2042 "let x = (x = 20);\n",
1975 2043
1976 "let x = 10; x = 20;", 2044 "let x = 10; x = 20;\n",
1977 }; 2045 };
1978 2046
1979 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("LetVariable.golden")); 2047 CHECK(CompareTexts(BuildActual(printer, snippets),
2048 LoadGolden("LetVariable.golden")));
1980 } 2049 }
1981 2050
1982 TEST(ConstVariableContextSlot) { 2051 TEST(ConstVariableContextSlot) {
1983 // TODO(mythria): Add tests for initialization of this via super calls. 2052 // TODO(mythria): Add tests for initialization of this via super calls.
1984 // TODO(mythria): Add tests that walk the context chain. 2053 // TODO(mythria): Add tests that walk the context chain.
1985 InitializedIgnitionHandleScope scope; 2054 InitializedIgnitionHandleScope scope;
1986 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2055 BytecodeExpectationsPrinter printer(CcTest::isolate(),
1987 ConstantPoolType::kMixed); 2056 ConstantPoolType::kMixed);
1988 const char* snippets[] = { 2057 const char* snippets[] = {
1989 "const x = 10; function f1() {return x;}", 2058 "const x = 10; function f1() {return x;}\n",
1990 2059
1991 "const x = 10; function f1() {return x;} return x;", 2060 "const x = 10; function f1() {return x;} return x;\n",
1992 2061
1993 "const x = (x = 20); function f1() {return x;}", 2062 "const x = (x = 20); function f1() {return x;}\n",
1994 2063
1995 "const x = 10; x = 20; function f1() {return x;}", 2064 "const x = 10; x = 20; function f1() {return x;}\n",
1996 }; 2065 };
1997 2066
1998 CHECK_EQ(BuildActual(printer, snippets), 2067 CHECK(CompareTexts(BuildActual(printer, snippets),
1999 LoadGolden("ConstVariableContextSlot.golden")); 2068 LoadGolden("ConstVariableContextSlot.golden")));
2000 } 2069 }
2001 2070
2002 TEST(LetVariableContextSlot) { 2071 TEST(LetVariableContextSlot) {
2003 InitializedIgnitionHandleScope scope; 2072 InitializedIgnitionHandleScope scope;
2004 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2073 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2005 ConstantPoolType::kMixed); 2074 ConstantPoolType::kMixed);
2006 const char* snippets[] = { 2075 const char* snippets[] = {
2007 "let x = 10; function f1() {return x;}", 2076 "let x = 10; function f1() {return x;}\n",
2008 2077
2009 "let x = 10; function f1() {return x;} return x;", 2078 "let x = 10; function f1() {return x;} return x;\n",
2010 2079
2011 "let x = (x = 20); function f1() {return x;}", 2080 "let x = (x = 20); function f1() {return x;}\n",
2012 2081
2013 "let x = 10; x = 20; function f1() {return x;}", 2082 "let x = 10; x = 20; function f1() {return x;}\n",
2014 }; 2083 };
2015 2084
2016 CHECK_EQ(BuildActual(printer, snippets), 2085 CHECK(CompareTexts(BuildActual(printer, snippets),
2017 LoadGolden("LetVariableContextSlot.golden")); 2086 LoadGolden("LetVariableContextSlot.golden")));
2018 } 2087 }
2019 2088
2020 TEST(DoExpression) { 2089 TEST(DoExpression) {
2021 bool old_flag = FLAG_harmony_do_expressions; 2090 bool old_flag = FLAG_harmony_do_expressions;
2022 FLAG_harmony_do_expressions = true; 2091 FLAG_harmony_do_expressions = true;
2023 2092
2024 InitializedIgnitionHandleScope scope; 2093 InitializedIgnitionHandleScope scope;
2025 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2094 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2026 ConstantPoolType::kString); 2095 ConstantPoolType::kString);
2027 const char* snippets[] = { 2096 const char* snippets[] = {
2028 "var a = do { }; return a;", 2097 "var a = do { }; return a;\n",
2029 2098
2030 "var a = do { var x = 100; }; return a;", 2099 "var a = do { var x = 100; }; return a;\n",
2031 2100
2032 "while(true) { var a = 10; a = do { ++a; break; }; a = 20; }", 2101 "while(true) { var a = 10; a = do { ++a; break; }; a = 20; }\n",
2033 }; 2102 };
2034 2103
2035 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("DoExpression.golden")); 2104 CHECK(CompareTexts(BuildActual(printer, snippets),
2105 LoadGolden("DoExpression.golden")));
2036 2106
2037 FLAG_harmony_do_expressions = old_flag; 2107 FLAG_harmony_do_expressions = old_flag;
2038 } 2108 }
2039 2109
2040 TEST(WithStatement) { 2110 TEST(WithStatement) {
2041 InitializedIgnitionHandleScope scope; 2111 InitializedIgnitionHandleScope scope;
2042 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2112 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2043 ConstantPoolType::kMixed); 2113 ConstantPoolType::kMixed);
2044 const char* snippets[] = { 2114 const char* snippets[] = {
2045 "with ({x:42}) { return x; }", 2115 "with ({x:42}) { return x; }\n",
2046 }; 2116 };
2047 2117
2048 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("WithStatement.golden")); 2118 CHECK(CompareTexts(BuildActual(printer, snippets),
2119 LoadGolden("WithStatement.golden")));
2049 } 2120 }
2050 2121
2051 TEST(DoDebugger) { 2122 TEST(DoDebugger) {
2052 InitializedIgnitionHandleScope scope; 2123 InitializedIgnitionHandleScope scope;
2053 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2124 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2054 ConstantPoolType::kString); 2125 ConstantPoolType::kString);
2055 const char* snippets[] = { 2126 const char* snippets[] = {
2056 "debugger;", 2127 "debugger;\n",
2057 }; 2128 };
2058 2129
2059 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("DoDebugger.golden")); 2130 CHECK(CompareTexts(BuildActual(printer, snippets),
2131 LoadGolden("DoDebugger.golden")));
2060 } 2132 }
2061 2133
2062 TEST(ClassDeclarations) { 2134 TEST(ClassDeclarations) {
2063 InitializedIgnitionHandleScope scope; 2135 InitializedIgnitionHandleScope scope;
2064 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2136 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2065 ConstantPoolType::kMixed); 2137 ConstantPoolType::kMixed);
2066 const char* snippets[] = { 2138 const char* snippets[] = {
2067 "class Person {\n" 2139 "class Person {\n"
2068 " constructor(name) { this.name = name; }\n" 2140 " constructor(name) { this.name = name; }\n"
2069 " speak() { console.log(this.name + ' is speaking.'); }\n" 2141 " speak() { console.log(this.name + ' is speaking.'); }\n"
2070 "}", 2142 "}\n",
2071 2143
2072 "class person {\n" 2144 "class person {\n"
2073 " constructor(name) { this.name = name; }\n" 2145 " constructor(name) { this.name = name; }\n"
2074 " speak() { console.log(this.name + ' is speaking.'); }\n" 2146 " speak() { console.log(this.name + ' is speaking.'); }\n"
2075 "}", 2147 "}\n",
2076 2148
2077 "var n0 = 'a';\n" 2149 "var n0 = 'a';\n"
2078 "var n1 = 'b';\n" 2150 "var n1 = 'b';\n"
2079 "class N {\n" 2151 "class N {\n"
2080 " [n0]() { return n0; }\n" 2152 " [n0]() { return n0; }\n"
2081 " static [n1]() { return n1; }\n" 2153 " static [n1]() { return n1; }\n"
2082 "}", 2154 "}\n",
2083 2155
2084 "var count = 0;\n" 2156 "var count = 0;\n"
2085 "class C { constructor() { count++; }}\n" 2157 "class C { constructor() { count++; }}\n"
2086 "return new C();\n", 2158 "return new C();\n",
2087 }; 2159 };
2088 2160
2089 CHECK_EQ(BuildActual(printer, snippets), 2161 CHECK(CompareTexts(BuildActual(printer, snippets),
2090 LoadGolden("ClassDeclarations.golden")); 2162 LoadGolden("ClassDeclarations.golden")));
2091 } 2163 }
2092 2164
2093 TEST(ClassAndSuperClass) { 2165 TEST(ClassAndSuperClass) {
2094 InitializedIgnitionHandleScope scope; 2166 InitializedIgnitionHandleScope scope;
2095 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2167 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2096 ConstantPoolType::kMixed); 2168 ConstantPoolType::kMixed);
2097 printer.set_wrap(false); 2169 printer.set_wrap(false);
2098 printer.set_test_function_name("test"); 2170 printer.set_test_function_name("test");
2099 const char* snippets[] = { 2171 const char* snippets[] = {
2100 "var test;\n" 2172 "var test;\n"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2138 " class A {\n" 2210 " class A {\n"
2139 " constructor() { this.x_ = 1; }\n" 2211 " constructor() { this.x_ = 1; }\n"
2140 " }\n" 2212 " }\n"
2141 " class B extends A {\n" 2213 " class B extends A {\n"
2142 " constructor() { super(); this.y_ = 2; }\n" 2214 " constructor() { super(); this.y_ = 2; }\n"
2143 " }\n" 2215 " }\n"
2144 " test = new B().constructor;\n" 2216 " test = new B().constructor;\n"
2145 "})();\n", 2217 "})();\n",
2146 }; 2218 };
2147 2219
2148 CHECK_EQ(BuildActual(printer, snippets), 2220 CHECK(CompareTexts(BuildActual(printer, snippets),
2149 LoadGolden("ClassAndSuperClass.golden")); 2221 LoadGolden("ClassAndSuperClass.golden")));
2150 } 2222 }
2151 2223
2152 TEST(Generators) { 2224 TEST(Generators) {
2153 bool old_flag = FLAG_ignition_generators; 2225 bool old_flag = FLAG_ignition_generators;
2154 FLAG_ignition_generators = true; 2226 FLAG_ignition_generators = true;
2155 2227
2156 InitializedIgnitionHandleScope scope; 2228 InitializedIgnitionHandleScope scope;
2157 BytecodeExpectationsPrinter printer(CcTest::isolate(), 2229 BytecodeExpectationsPrinter printer(CcTest::isolate(),
2158 ConstantPoolType::kMixed); 2230 ConstantPoolType::kMixed);
2159 printer.set_wrap(false); 2231 printer.set_wrap(false);
2160 printer.set_test_function_name("f"); 2232 printer.set_test_function_name("f");
2161 2233
2162 const char* snippets[] = { 2234 const char* snippets[] = {
2163 "function* f() { }", 2235 "function* f() { }\n",
2164 2236
2165 "function* f() { yield 42 }", 2237 "function* f() { yield 42 }\n",
2166 2238
2167 "function* f() { for (let x of [42]) yield x }", 2239 "function* f() { for (let x of [42]) yield x }\n",
2168 }; 2240 };
2169 2241
2170 CHECK_EQ(BuildActual(printer, snippets), LoadGolden("Generators.golden")); 2242 CHECK(CompareTexts(BuildActual(printer, snippets),
2243 LoadGolden("Generators.golden")));
2171 2244
2172 FLAG_ignition_generators = old_flag; 2245 FLAG_ignition_generators = old_flag;
2173 } 2246 }
2174 2247
2175 } // namespace interpreter 2248 } // namespace interpreter
2176 } // namespace internal 2249 } // namespace internal
2177 } // namespace v8 2250 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/WithStatement.golden ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698