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 }, | |
398 0}}; | 410 0}}; |
399 | 411 |
400 for (size_t i = 0; i < arraysize(snippets); i++) { | 412 for (size_t i = 0; i < arraysize(snippets); i++) { |
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), | |
rmcilroy
2015/10/14 15:34:01
Bytecode and operands on one line (I've noticed gi
| |
473 U8(3), // | |
474 B(Return) // | |
475 }, | |
476 1, | |
477 {268, 0, 0, 0}}, | |
478 {"var x = 0; var a = 2, b = 3; return x && (" | |
479 #define X "a, b, a, b, " | |
480 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 | |
481 #undef X | |
482 "3);", | |
483 3 * kPointerSize, | |
484 1, | |
485 282, | |
486 { | |
487 B(LdaZero), // | |
488 B(Star), R(0), // | |
489 B(LdaSmi8), U8(2), // | |
490 B(Star), R(1), // | |
491 B(LdaSmi8), U8(3), // | |
492 B(Star), R(2), // | |
493 B(Ldar), R(0), // | |
494 B(JumpIfToBooleanFalseConstant), U8(0), // | |
495 #define X B(Ldar), R(1), B(Ldar), R(2), B(Ldar), R(1), B(Ldar), R(2), | |
496 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 // | |
497 #undef X // | |
498 B(LdaSmi8), | |
rmcilroy
2015/10/14 15:34:01
ditto
| |
499 U8(3), // | |
500 B(Return) // | |
501 }, | |
502 1, | |
503 {268, 0, 0, 0}}, | |
504 {"return 0 && 3;", | |
505 0 * kPointerSize, | |
506 1, | |
507 2, | |
508 { | |
509 B(LdaZero), // | |
510 B(Return) // | |
511 }, | |
512 0}, | |
513 {"return 1 || 3;", | |
514 0 * kPointerSize, | |
515 1, | |
516 3, | |
517 { | |
518 B(LdaSmi8), U8(1), // | |
519 B(Return) // | |
520 }, | |
521 0}, | |
522 {"var x = 1; return x && 3 || 0, 1;", | |
523 1 * kPointerSize, | |
524 1, | |
525 16, | |
526 { | |
527 B(LdaSmi8), U8(1), // | |
528 B(Star), R(0), // | |
529 B(Ldar), R(0), // | |
530 B(JumpIfToBooleanFalse), U8(4), // | |
531 B(LdaSmi8), U8(3), // | |
532 B(JumpIfToBooleanTrue), U8(3), // | |
533 B(LdaZero), // | |
534 B(LdaSmi8), U8(1), // | |
535 B(Return) // | |
536 }, | |
537 0}}; | |
538 | |
539 for (size_t i = 0; i < arraysize(snippets); i++) { | |
401 Handle<BytecodeArray> bytecode_array = | 540 Handle<BytecodeArray> bytecode_array = |
402 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 541 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
403 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 542 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
404 } | 543 } |
405 } | 544 } |
406 | 545 |
407 | 546 |
408 TEST(Parameters) { | 547 TEST(Parameters) { |
409 InitializedHandleScope handle_scope; | 548 InitializedHandleScope handle_scope; |
410 BytecodeGeneratorHelper helper; | 549 BytecodeGeneratorHelper helper; |
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2047 for (size_t i = 0; i < arraysize(snippets); i++) { | 2186 for (size_t i = 0; i < arraysize(snippets); i++) { |
2048 Handle<BytecodeArray> bytecode_array = | 2187 Handle<BytecodeArray> bytecode_array = |
2049 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 2188 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
2050 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 2189 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
2051 } | 2190 } |
2052 } | 2191 } |
2053 | 2192 |
2054 } // namespace interpreter | 2193 } // namespace interpreter |
2055 } // namespace internal | 2194 } // namespace internal |
2056 } // namespace v8 | 2195 } // namespace v8 |
OLD | NEW |