OLD | NEW |
---|---|
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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
388 13, | 388 13, |
389 { | 389 { |
390 B(LdaSmi8), U8(10), // | 390 B(LdaSmi8), U8(10), // |
391 B(Star), R(0), // | 391 B(Star), R(0), // |
392 B(Ldar), R(0), // Easy to spot r1 not really needed here. | 392 B(Ldar), R(0), // Easy to spot r1 not really needed here. |
393 B(Star), R(1), // Dead store. | 393 B(Star), R(1), // Dead store. |
394 B(LdaSmi8), U8(3), // | 394 B(LdaSmi8), U8(3), // |
395 B(ShiftRightLogical), R(1), // | 395 B(ShiftRightLogical), R(1), // |
396 B(Return) // | 396 B(Return) // |
397 }, | 397 }, |
398 0}, | |
399 {"var x = 0; return (x, 3);", | |
400 1 * kPointerSize, | |
401 1, | |
402 8, | |
403 { | |
404 B(LdaZero), // | |
405 B(Star), R(0), // | |
406 B(Ldar), R(0), // | |
407 B(LdaSmi8), U8(3), // | |
408 B(Return) // | |
409 }, | |
410 0}}; | |
411 | |
412 for (size_t i = 0; i < arraysize(snippets); i++) { | |
rmcilroy
2015/10/14 14:32:44
Weird indentation here?
mythria
2015/10/14 14:59:55
Done.
| |
413 Handle<BytecodeArray> bytecode_array = | |
414 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | |
415 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | |
416 } | |
417 } | |
418 | |
419 | |
420 TEST(LogicalExpressions) { | |
421 InitializedHandleScope handle_scope; | |
422 BytecodeGeneratorHelper helper; | |
423 | |
424 | |
425 ExpectedSnippet<int> snippets[] = { | |
426 {"var x = 0; return x || 3;", | |
427 1 * kPointerSize, | |
428 1, | |
429 10, | |
430 { | |
431 B(LdaZero), // | |
432 B(Star), R(0), // | |
433 B(Ldar), R(0), // | |
434 B(JumpIfToBooleanTrue), U8(4), // | |
435 B(LdaSmi8), U8(3), // | |
436 B(Return) // | |
437 }, | |
438 0}, | |
439 {"var x = 0; return x && 3;", | |
440 1 * kPointerSize, | |
441 1, | |
442 10, | |
443 { | |
444 B(LdaZero), // | |
445 B(Star), R(0), // | |
446 B(Ldar), R(0), // | |
447 B(JumpIfToBooleanFalse), U8(4), // | |
448 B(LdaSmi8), U8(3), // | |
449 B(Return) // | |
450 }, | |
451 0}, | |
452 {"var x = 1; var a = 2, b = 3; return x || (" | |
453 #define X "a, b, a, b, " | |
454 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X | |
455 #undef X | |
456 "3);", | |
457 3 * kPointerSize, | |
458 1, | |
459 283, | |
460 { | |
461 B(LdaSmi8), U8(1), // | |
462 B(Star), R(0), // | |
463 B(LdaSmi8), U8(2), // | |
464 B(Star), R(1), // | |
465 B(LdaSmi8), U8(3), // | |
466 B(Star), R(2), // | |
467 B(Ldar), R(0), // | |
468 B(JumpIfToBooleanTrueConstant), U8(0), // | |
469 #define X B(Ldar), R(1), B(Ldar), R(2), B(Ldar), R(1), B(Ldar), R(2), | |
470 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X // | |
471 #undef X // | |
472 B(LdaSmi8), U8(3), // | |
473 B(Return) // | |
474 }, | |
475 1, | |
476 {268, 0, 0, 0}}, | |
477 {"var x = 0; var a = 2, b = 3; return x && (" | |
478 #define X "a, b, a, b, " | |
479 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X | |
480 #undef X | |
481 "3);", | |
482 3 * kPointerSize, | |
483 1, | |
484 282, | |
485 { | |
486 B(LdaZero), // | |
487 B(Star), R(0), // | |
488 B(LdaSmi8), U8(2), // | |
489 B(Star), R(1), // | |
490 B(LdaSmi8), U8(3), // | |
491 B(Star), R(2), // | |
492 B(Ldar), R(0), // | |
493 B(JumpIfToBooleanFalseConstant), U8(0), // | |
494 #define X B(Ldar), R(1), B(Ldar), R(2), B(Ldar), R(1), B(Ldar), R(2), | |
495 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X // | |
496 #undef X // | |
497 B(LdaSmi8), U8(3), // | |
498 B(Return) // | |
499 }, | |
500 1, | |
501 {268, 0, 0, 0}}, | |
502 {"return 0 && 3;", | |
503 0 * kPointerSize, | |
504 1, | |
505 2, | |
506 { | |
507 B(LdaZero), // | |
508 B(Return) // | |
509 }, | |
510 0}, | |
511 {"return 1 || 3;", | |
512 0 * kPointerSize, | |
513 1, | |
514 3, | |
515 { | |
516 B(LdaSmi8), U8(1), // | |
517 B(Return) // | |
518 }, | |
519 0}, | |
520 {"var x = 1; return x && 3 || 0,1;", | |
rmcilroy
2015/10/14 14:32:44
nit - /s/0,1/0, 1
mythria
2015/10/14 14:59:55
Done.
| |
521 1 * kPointerSize, | |
522 1, | |
523 16, | |
524 { | |
525 B(LdaSmi8), U8(1), // | |
526 B(Star), R(0), // | |
527 B(Ldar), R(0), // | |
528 B(JumpIfToBooleanFalse), U8(4), // | |
529 B(LdaSmi8), U8(3), // | |
530 B(JumpIfToBooleanTrue), U8(3), // | |
531 B(LdaZero), // | |
532 B(LdaSmi8), U8(1), // | |
533 B(Return) // | |
534 }, | |
398 0}}; | 535 0}}; |
399 | 536 |
400 for (size_t i = 0; i < arraysize(snippets); i++) { | 537 for (size_t i = 0; i < arraysize(snippets); i++) { |
401 Handle<BytecodeArray> bytecode_array = | 538 Handle<BytecodeArray> bytecode_array = |
402 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 539 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
403 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 540 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
404 } | 541 } |
405 } | 542 } |
406 | 543 |
407 | 544 |
(...skipping 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2047 for (size_t i = 0; i < arraysize(snippets); i++) { | 2184 for (size_t i = 0; i < arraysize(snippets); i++) { |
2048 Handle<BytecodeArray> bytecode_array = | 2185 Handle<BytecodeArray> bytecode_array = |
2049 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 2186 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
2050 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 2187 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
2051 } | 2188 } |
2052 } | 2189 } |
2053 | 2190 |
2054 } // namespace interpreter | 2191 } // namespace interpreter |
2055 } // namespace internal | 2192 } // namespace internal |
2056 } // namespace v8 | 2193 } // namespace v8 |
OLD | NEW |