Chromium Code Reviews| 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 |