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 // TODO(rmcilroy): Remove this define after this flag is turned on globally | 5 // TODO(rmcilroy): Remove this define after this flag is turned on globally |
6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/compiler.h" | 10 #include "src/compiler.h" |
(...skipping 1587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1598 TEST(IfConditions) { | 1598 TEST(IfConditions) { |
1599 InitializedHandleScope handle_scope; | 1599 InitializedHandleScope handle_scope; |
1600 BytecodeGeneratorHelper helper; | 1600 BytecodeGeneratorHelper helper; |
1601 | 1601 |
1602 Handle<Object> unused = helper.factory()->undefined_value(); | 1602 Handle<Object> unused = helper.factory()->undefined_value(); |
1603 | 1603 |
1604 ExpectedSnippet<Handle<Object>> snippets[] = { | 1604 ExpectedSnippet<Handle<Object>> snippets[] = { |
1605 {"function f() { if (0) { return 1; } else { return -1; } } f()", | 1605 {"function f() { if (0) { return 1; } else { return -1; } } f()", |
1606 0, | 1606 0, |
1607 1, | 1607 1, |
1608 5, | 1608 3, |
1609 {B(LdaSmi8), U8(-1), // | 1609 { |
1610 B(Return), // | 1610 B(LdaSmi8), U8(-1), // |
1611 B(LdaUndefined), // TODO(mythria) redundant return statement | 1611 B(Return), // |
1612 B(Return)}, // could be eliminated. | 1612 }, |
1613 0, | 1613 0, |
1614 {unused, unused, unused, unused, unused, unused}}, | 1614 {unused, unused, unused, unused, unused, unused}}, |
1615 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", | 1615 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", |
1616 0, | 1616 0, |
1617 1, | 1617 1, |
1618 5, | 1618 3, |
1619 {B(LdaSmi8), U8(1), // | 1619 { |
1620 B(Return), // | 1620 B(LdaSmi8), U8(1), // |
1621 B(LdaUndefined), // TODO(mythria) redundant return statement | 1621 B(Return), // |
1622 B(Return)}, // could be eliminated. | 1622 }, |
1623 0, | 1623 0, |
1624 {unused, unused, unused, unused, unused, unused}}, | 1624 {unused, unused, unused, unused, unused, unused}}, |
1625 {"function f() { if (false) { return 1; } else { return -1; } } f();", | 1625 {"function f() { if (false) { return 1; } else { return -1; } } f();", |
1626 0, | 1626 0, |
1627 1, | 1627 1, |
1628 5, | 1628 3, |
1629 {B(LdaSmi8), U8(-1), // | 1629 { |
1630 B(Return), // | 1630 B(LdaSmi8), U8(-1), // |
1631 B(LdaUndefined), // TODO(mythria) redundant return statement | 1631 B(Return), // |
1632 B(Return)}, // could be eliminated. | 1632 }, |
1633 0, | 1633 0, |
1634 {unused, unused, unused, unused, unused, unused}}, | 1634 {unused, unused, unused, unused, unused, unused}}, |
1635 {"function f() { if (false) { return 1; } } f();", | 1635 {"function f() { if (false) { return 1; } } f();", |
1636 0, | 1636 0, |
1637 1, | 1637 1, |
1638 2, | 1638 2, |
1639 {B(LdaUndefined), // | 1639 { |
1640 B(Return)}, | 1640 B(LdaUndefined), // |
1641 B(Return), // | |
1642 }, | |
1641 0, | 1643 0, |
1642 {unused, unused, unused, unused, unused, unused}}, | 1644 {unused, unused, unused, unused, unused, unused}}, |
1643 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" | 1645 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" |
1644 "f(99);", | 1646 "f(99);", |
1645 0, | 1647 0, |
1646 2, | 1648 2, |
1647 15, | 1649 13, |
1648 {B(LdaZero), // | 1650 { |
1649 B(TestLessThanOrEqual), A(1, 2), // | 1651 B(LdaZero), // |
1650 B(JumpIfFalse), U8(7), // | 1652 B(TestLessThanOrEqual), A(1, 2), // |
1651 B(LdaConstant), U8(0), // | 1653 B(JumpIfFalse), U8(5), // |
1652 B(Return), // | 1654 B(LdaConstant), U8(0), // |
1653 B(Jump), U8(5), // | 1655 B(Return), // |
1654 B(LdaConstant), U8(1), // | 1656 B(LdaConstant), U8(1), // |
1655 B(Return), // | 1657 B(Return), // |
1656 B(LdaUndefined), // | 1658 B(LdaUndefined), // |
1657 B(Return)}, // | 1659 B(Return), // |
1660 }, | |
1658 2, | 1661 2, |
1659 {helper.factory()->NewNumberFromInt(200), | 1662 {helper.factory()->NewNumberFromInt(200), |
1660 helper.factory()->NewNumberFromInt(-200), unused, unused, unused, | 1663 helper.factory()->NewNumberFromInt(-200), unused, unused, unused, |
1661 unused}}, | 1664 unused}}, |
1662 {"function f(a, b) { if (a in b) { return 200; } }" | 1665 {"function f(a, b) { if (a in b) { return 200; } }" |
1663 "f('prop', { prop: 'yes'});", | 1666 "f('prop', { prop: 'yes'});", |
1664 0, | 1667 0, |
1665 3, | 1668 3, |
1666 11, | 1669 11, |
1667 {B(Ldar), A(2, 3), // | 1670 { |
1668 B(TestIn), A(1, 3), // | 1671 B(Ldar), A(2, 3), // |
1669 B(JumpIfFalse), U8(5), // | 1672 B(TestIn), A(1, 3), // |
1670 B(LdaConstant), U8(0), // | 1673 B(JumpIfFalse), U8(5), // |
1671 B(Return), // | 1674 B(LdaConstant), U8(0), // |
1672 B(LdaUndefined), // | 1675 B(Return), // |
1673 B(Return)}, // | 1676 B(LdaUndefined), // |
1677 B(Return), // | |
1678 }, | |
mythria
2015/11/03 11:01:59
May be we can have another test where we have retu
rmcilroy
2015/11/03 11:10:12
SGTM, done.
| |
1674 1, | 1679 1, |
1675 {helper.factory()->NewNumberFromInt(200), unused, unused, unused, unused, | 1680 {helper.factory()->NewNumberFromInt(200), unused, unused, unused, unused, |
1676 unused}}, | 1681 unused}}, |
1677 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " | 1682 {"function f(z) { var a = 0; var b = 0; if (a === 0.01) { " |
1678 REPEAT_32(SPACE, "b = a; a = b; ") | 1683 REPEAT_32(SPACE, "b = a; a = b; ") |
1679 " return 200; } else { return -200; } } f(0.001)", | 1684 " return 200; } else { return -200; } } f(0.001)", |
1680 2 * kPointerSize, | 1685 2 * kPointerSize, |
1681 2, | 1686 2, |
1682 278, | 1687 276, |
1683 { | 1688 { |
1684 B(LdaZero), // | 1689 B(LdaZero), // |
1685 B(Star), R(0), // | 1690 B(Star), R(0), // |
1686 B(LdaZero), // | 1691 B(LdaZero), // |
1687 B(Star), R(1), // | 1692 B(Star), R(1), // |
1688 B(LdaConstant), U8(0), // | 1693 B(LdaConstant), U8(0), // |
1689 B(TestEqualStrict), R(0), // | 1694 B(TestEqualStrict), R(0), // |
1690 B(JumpIfFalseConstant), U8(2), // | 1695 B(JumpIfFalseConstant), U8(2), // |
1691 REPEAT_32(COMMA, // | 1696 REPEAT_32(COMMA, // |
1692 B(Ldar), R(0), // | 1697 B(Ldar), R(0), // |
1693 B(Star), R(1), // | 1698 B(Star), R(1), // |
1694 B(Ldar), R(1), // | 1699 B(Ldar), R(1), // |
1695 B(Star), R(0)), // | 1700 B(Star), R(0)), // |
1696 B(LdaConstant), U8(1), // | 1701 B(LdaConstant), U8(1), // |
1697 B(Return), // | 1702 B(Return), // |
1698 B(Jump), U8(5), // | |
1699 B(LdaConstant), U8(3), // | 1703 B(LdaConstant), U8(3), // |
1700 B(Return), // | 1704 B(Return), // |
1701 B(LdaUndefined), // | 1705 B(LdaUndefined), // |
1702 B(Return)}, // | 1706 B(Return)}, // |
1703 4, | 1707 4, |
1704 {helper.factory()->NewHeapNumber(0.01), | 1708 {helper.factory()->NewHeapNumber(0.01), |
1705 helper.factory()->NewNumberFromInt(200), | 1709 helper.factory()->NewNumberFromInt(200), |
1706 helper.factory()->NewNumberFromInt(263), | 1710 helper.factory()->NewNumberFromInt(261), |
1707 helper.factory()->NewNumberFromInt(-200), unused, unused}}, | 1711 helper.factory()->NewNumberFromInt(-200), unused, unused}}, |
1708 {"function f() { var a = 0; var b = 0; if (a) { " | 1712 {"function f() { var a = 0; var b = 0; if (a) { " |
1709 REPEAT_32(SPACE, "b = a; a = b; ") | 1713 REPEAT_32(SPACE, "b = a; a = b; ") |
1710 " return 200; } else { return -200; } } f()", | 1714 " return 200; } else { return -200; } } f()", |
1711 2 * kPointerSize, | 1715 2 * kPointerSize, |
1712 1, | 1716 1, |
1713 276, | 1717 274, |
1714 { | 1718 { |
1715 B(LdaZero), // | 1719 B(LdaZero), // |
1716 B(Star), R(0), // | 1720 B(Star), R(0), // |
1717 B(LdaZero), // | 1721 B(LdaZero), // |
1718 B(Star), R(1), // | 1722 B(Star), R(1), // |
1719 B(Ldar), R(0), // | 1723 B(Ldar), R(0), // |
1720 B(JumpIfToBooleanFalseConstant), U8(1), // | 1724 B(JumpIfToBooleanFalseConstant), U8(1), // |
1721 REPEAT_32(COMMA, // | 1725 REPEAT_32(COMMA, // |
1722 B(Ldar), R(0), // | 1726 B(Ldar), R(0), // |
1723 B(Star), R(1), // | 1727 B(Star), R(1), // |
1724 B(Ldar), R(1), // | 1728 B(Ldar), R(1), // |
1725 B(Star), R(0)), // | 1729 B(Star), R(0)), // |
1726 B(LdaConstant), U8(0), // | 1730 B(LdaConstant), U8(0), // |
1727 B(Return), // | 1731 B(Return), // |
1728 B(Jump), U8(5), // | |
1729 B(LdaConstant), U8(2), // | 1732 B(LdaConstant), U8(2), // |
1730 B(Return), // | 1733 B(Return), // |
1731 B(LdaUndefined), // | 1734 B(LdaUndefined), // |
1732 B(Return)}, // | 1735 B(Return)}, // |
1733 3, | 1736 3, |
1734 {helper.factory()->NewNumberFromInt(200), | 1737 {helper.factory()->NewNumberFromInt(200), |
1735 helper.factory()->NewNumberFromInt(263), | 1738 helper.factory()->NewNumberFromInt(261), |
1736 helper.factory()->NewNumberFromInt(-200), unused, unused, unused}}, | 1739 helper.factory()->NewNumberFromInt(-200), unused, unused, unused}}, |
1737 | 1740 |
1738 {"function f(a, b) {\n" | 1741 {"function f(a, b) {\n" |
1739 " if (a == b) { return 1; }\n" | 1742 " if (a == b) { return 1; }\n" |
1740 " if (a === b) { return 1; }\n" | 1743 " if (a === b) { return 1; }\n" |
1741 " if (a < b) { return 1; }\n" | 1744 " if (a < b) { return 1; }\n" |
1742 " if (a > b) { return 1; }\n" | 1745 " if (a > b) { return 1; }\n" |
1743 " if (a <= b) { return 1; }\n" | 1746 " if (a <= b) { return 1; }\n" |
1744 " if (a >= b) { return 1; }\n" | 1747 " if (a >= b) { return 1; }\n" |
1745 " if (a in b) { return 1; }\n" | 1748 " if (a in b) { return 1; }\n" |
(...skipping 26 matching lines...) Expand all Loading... | |
1772 {"function f() {" | 1775 {"function f() {" |
1773 " var a = 0;" | 1776 " var a = 0;" |
1774 " if (a) {" | 1777 " if (a) {" |
1775 " return 20;" | 1778 " return 20;" |
1776 "} else {" | 1779 "} else {" |
1777 " return -20;}" | 1780 " return -20;}" |
1778 "};" | 1781 "};" |
1779 "f();", | 1782 "f();", |
1780 1 * kPointerSize, | 1783 1 * kPointerSize, |
1781 1, | 1784 1, |
1782 17, | 1785 15, |
1783 { | 1786 { |
1784 B(LdaZero), // | 1787 B(LdaZero), // |
1785 B(Star), R(0), // | 1788 B(Star), R(0), // |
1786 B(Ldar), R(0), // | 1789 B(Ldar), R(0), // |
1787 B(JumpIfToBooleanFalse), U8(7), // | 1790 B(JumpIfToBooleanFalse), U8(5), // |
1788 B(LdaSmi8), U8(20), // | 1791 B(LdaSmi8), U8(20), // |
1789 B(Return), // | 1792 B(Return), // |
1790 B(Jump), U8(5), // | |
1791 B(LdaSmi8), U8(-20), // | 1793 B(LdaSmi8), U8(-20), // |
1792 B(Return), // | 1794 B(Return), // |
1793 B(LdaUndefined), // | 1795 B(LdaUndefined), // |
1794 B(Return) | 1796 B(Return) |
1795 }, | 1797 }, |
1796 0, | 1798 0, |
1797 {unused, unused, unused, unused, unused, unused}} | 1799 {unused, unused, unused, unused, unused, unused}} |
1798 }; | 1800 }; |
1799 | 1801 |
1800 for (size_t i = 0; i < arraysize(snippets); i++) { | 1802 for (size_t i = 0; i < arraysize(snippets); i++) { |
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3341 | 3343 |
3342 TEST(TryCatch) { | 3344 TEST(TryCatch) { |
3343 InitializedHandleScope handle_scope; | 3345 InitializedHandleScope handle_scope; |
3344 BytecodeGeneratorHelper helper; | 3346 BytecodeGeneratorHelper helper; |
3345 | 3347 |
3346 // TODO(rmcilroy): modify tests when we have real try catch support. | 3348 // TODO(rmcilroy): modify tests when we have real try catch support. |
3347 ExpectedSnippet<int> snippets[] = { | 3349 ExpectedSnippet<int> snippets[] = { |
3348 {"try { return 1; } catch(e) { return 2; }", | 3350 {"try { return 1; } catch(e) { return 2; }", |
3349 kPointerSize, | 3351 kPointerSize, |
3350 1, | 3352 1, |
3351 5, | 3353 3, |
3352 { | 3354 { |
3353 B(LdaSmi8), U8(1), // | 3355 B(LdaSmi8), U8(1), // |
3354 B(Return), // | 3356 B(Return), // |
3355 B(LdaUndefined), // | |
3356 B(Return), // | |
3357 }, | 3357 }, |
3358 0}, | 3358 0}, |
3359 }; | 3359 }; |
3360 | 3360 |
3361 for (size_t i = 0; i < arraysize(snippets); i++) { | 3361 for (size_t i = 0; i < arraysize(snippets); i++) { |
3362 Handle<BytecodeArray> bytecode_array = | 3362 Handle<BytecodeArray> bytecode_array = |
3363 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3363 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3364 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3364 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3365 } | 3365 } |
3366 } | 3366 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3430 {"throw 'Error';", | 3430 {"throw 'Error';", |
3431 0, | 3431 0, |
3432 1, | 3432 1, |
3433 3, | 3433 3, |
3434 { | 3434 { |
3435 B(LdaConstant), U8(0), // | 3435 B(LdaConstant), U8(0), // |
3436 B(Throw), // | 3436 B(Throw), // |
3437 }, | 3437 }, |
3438 1, | 3438 1, |
3439 {"Error"}}, | 3439 {"Error"}}, |
3440 {"if ('test') { throw 'Error'; };", | 3440 {"var a = 1; if (a) { throw 'Error'; };", |
3441 0, | 3441 1 * kPointerSize, |
3442 1, | 3442 1, |
3443 5, | 3443 13, |
3444 { | 3444 { |
3445 B(LdaConstant), U8(0), // | 3445 B(LdaSmi8), U8(1), // |
3446 B(Throw), // | 3446 B(Star), R(0), // |
3447 B(LdaUndefined), // | 3447 B(Ldar), R(0), // |
3448 B(Return), // | 3448 B(JumpIfToBooleanFalse), U8(5), // |
3449 B(LdaConstant), U8(0), // | |
3450 B(Throw), // | |
3451 B(LdaUndefined), // | |
3452 B(Return), // | |
3449 }, | 3453 }, |
3450 1, | 3454 1, |
3451 {"Error"}}, | 3455 {"Error"}}, |
3452 }; | 3456 }; |
3453 | 3457 |
3454 for (size_t i = 0; i < arraysize(snippets); i++) { | 3458 for (size_t i = 0; i < arraysize(snippets); i++) { |
3455 Handle<BytecodeArray> bytecode_array = | 3459 Handle<BytecodeArray> bytecode_array = |
3456 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3460 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3457 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3461 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3458 } | 3462 } |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3608 B(Star), R(1), // | 3612 B(Star), R(1), // |
3609 B(Call), R(1), R(2), U8(0), // | 3613 B(Call), R(1), R(2), U8(0), // |
3610 B(LdaContextSlot), R(0), U8(first_context_slot), // | 3614 B(LdaContextSlot), R(0), U8(first_context_slot), // |
3611 B(Return), // | 3615 B(Return), // |
3612 }, | 3616 }, |
3613 1, | 3617 1, |
3614 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3618 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3615 {"'use strict'; let a = 1; { let b = 2; return function() { a + b; }; }", | 3619 {"'use strict'; let a = 1; { let b = 2; return function() { a + b; }; }", |
3616 4 * kPointerSize, | 3620 4 * kPointerSize, |
3617 1, | 3621 1, |
3618 49, | 3622 45, |
3619 { | 3623 { |
3620 B(CallRuntime), U16(Runtime::kNewFunctionContext), // | 3624 B(CallRuntime), U16(Runtime::kNewFunctionContext), // |
3621 R(closure), U8(1), // | 3625 R(closure), U8(1), // |
3622 B(PushContext), R(0), // | 3626 B(PushContext), R(0), // |
3623 B(LdaTheHole), // | 3627 B(LdaTheHole), // |
3624 B(StaContextSlot), R(0), U8(first_context_slot), // | 3628 B(StaContextSlot), R(0), U8(first_context_slot), // |
3625 B(LdaSmi8), U8(1), // | 3629 B(LdaSmi8), U8(1), // |
3626 B(StaContextSlot), R(0), U8(first_context_slot), // | 3630 B(StaContextSlot), R(0), U8(first_context_slot), // |
3627 B(LdaConstant), U8(0), // | 3631 B(LdaConstant), U8(0), // |
3628 B(Star), R(2), // | 3632 B(Star), R(2), // |
3629 B(Ldar), R(closure), // | 3633 B(Ldar), R(closure), // |
3630 B(Star), R(3), // | 3634 B(Star), R(3), // |
3631 B(CallRuntime), U16(Runtime::kPushBlockContext), R(2), U8(2), // | 3635 B(CallRuntime), U16(Runtime::kPushBlockContext), R(2), U8(2), // |
3632 B(PushContext), R(1), // | 3636 B(PushContext), R(1), // |
3633 B(LdaTheHole), // | 3637 B(LdaTheHole), // |
3634 B(StaContextSlot), R(1), U8(first_context_slot), // | 3638 B(StaContextSlot), R(1), U8(first_context_slot), // |
3635 B(LdaSmi8), U8(2), // | 3639 B(LdaSmi8), U8(2), // |
3636 B(StaContextSlot), R(1), U8(first_context_slot), // | 3640 B(StaContextSlot), R(1), U8(first_context_slot), // |
3637 B(LdaConstant), U8(1), // | 3641 B(LdaConstant), U8(1), // |
3638 B(CreateClosure), U8(0), // | 3642 B(CreateClosure), U8(0), // |
3639 B(Return), // | 3643 B(Return), // |
3640 // TODO(rmcilroy): Dead code after this point due to return in nested | |
3641 // block - investigate eliminating this. | |
3642 B(PopContext), R(0), | |
3643 B(LdaUndefined), // | |
3644 B(Return), // | |
3645 }, | 3644 }, |
3646 2, | 3645 2, |
3647 {InstanceType::FIXED_ARRAY_TYPE, | 3646 {InstanceType::FIXED_ARRAY_TYPE, |
3648 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3647 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3649 }; | 3648 }; |
3650 | 3649 |
3651 for (size_t i = 0; i < arraysize(snippets); i++) { | 3650 for (size_t i = 0; i < arraysize(snippets); i++) { |
3652 Handle<BytecodeArray> bytecode_array = | 3651 Handle<BytecodeArray> bytecode_array = |
3653 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3652 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3654 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3653 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4924 }}, | 4923 }}, |
4925 }; | 4924 }; |
4926 | 4925 |
4927 for (size_t i = 0; i < arraysize(snippets); i++) { | 4926 for (size_t i = 0; i < arraysize(snippets); i++) { |
4928 Handle<BytecodeArray> bytecode_array = | 4927 Handle<BytecodeArray> bytecode_array = |
4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4928 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4929 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
4931 } | 4930 } |
4932 } | 4931 } |
4933 | 4932 |
4933 | |
4934 TEST(BasicBlockToBoolean) { | |
4935 InitializedHandleScope handle_scope; | |
4936 BytecodeGeneratorHelper helper; | |
4937 | |
4938 // Check that we don't omit ToBoolean calls if they are at the start of basic | |
4939 // blocks. | |
4940 ExpectedSnippet<int> snippets[] = { | |
4941 {"var a = 1; if (a || a < 0) { return 1 }", | |
oth
2015/11/02 20:45:58
missing semi-colon
rmcilroy
2015/11/03 11:10:12
Done.
| |
4942 1 * kPointerSize, | |
4943 1, | |
4944 18, | |
4945 { | |
4946 B(LdaSmi8), U8(1), // | |
4947 B(Star), R(0), // | |
4948 B(Ldar), R(0), // | |
4949 B(JumpIfToBooleanTrue), U8(5), // | |
4950 B(LdaZero), // | |
4951 B(TestLessThan), R(0), // | |
4952 B(JumpIfToBooleanFalse), U8(5), // | |
4953 B(LdaSmi8), U8(1), // | |
4954 B(Return), // | |
4955 B(LdaUndefined), // | |
4956 B(Return), // | |
4957 }}, | |
4958 {"var a = 1; if (a && a < 0) { return 1 }", | |
oth
2015/11/02 20:45:58
missing semi-colon
rmcilroy
2015/11/03 11:10:12
Done.
| |
4959 1 * kPointerSize, | |
4960 1, | |
4961 18, | |
4962 { | |
4963 B(LdaSmi8), U8(1), // | |
4964 B(Star), R(0), // | |
4965 B(Ldar), R(0), // | |
4966 B(JumpIfToBooleanFalse), U8(5), // | |
4967 B(LdaZero), // | |
4968 B(TestLessThan), R(0), // | |
4969 B(JumpIfToBooleanFalse), U8(5), // | |
4970 B(LdaSmi8), U8(1), // | |
4971 B(Return), // | |
4972 B(LdaUndefined), // | |
4973 B(Return), // | |
4974 }}, | |
4975 {"var a = 1; a = (a || a < 0) ? 2 : 3", | |
oth
2015/11/02 20:45:58
missing semi-colon
rmcilroy
2015/11/03 11:10:12
Done.
| |
4976 1 * kPointerSize, | |
4977 1, | |
4978 23, | |
4979 { | |
4980 B(LdaSmi8), U8(1), // | |
4981 B(Star), R(0), // | |
4982 B(Ldar), R(0), // | |
4983 B(JumpIfToBooleanTrue), U8(5), // | |
4984 B(LdaZero), // | |
4985 B(TestLessThan), R(0), // | |
4986 B(JumpIfToBooleanFalse), U8(6), // | |
4987 B(LdaSmi8), U8(2), // | |
4988 B(Jump), U8(4), // | |
4989 B(LdaSmi8), U8(3), // | |
4990 B(Star), R(0), // | |
4991 B(LdaUndefined), // | |
4992 B(Return), // | |
4993 }}, | |
4994 }; | |
4995 | |
4996 for (size_t i = 0; i < arraysize(snippets); i++) { | |
4997 Handle<BytecodeArray> bytecode_array = | |
4998 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | |
4999 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | |
5000 } | |
5001 } | |
5002 | |
5003 | |
5004 TEST(DeadCodeRemoval) { | |
5005 InitializedHandleScope handle_scope; | |
5006 BytecodeGeneratorHelper helper; | |
5007 | |
5008 ExpectedSnippet<int> snippets[] = { | |
5009 {"return; var a = 1; a();", | |
5010 1 * kPointerSize, | |
5011 1, | |
5012 2, | |
5013 { | |
5014 B(LdaUndefined), // | |
5015 B(Return), // | |
5016 }}, | |
5017 {"if (false) { return; }; var a = 1;", | |
5018 1 * kPointerSize, | |
5019 1, | |
5020 6, | |
5021 { | |
5022 B(LdaSmi8), U8(1), // | |
5023 B(Star), R(0), // | |
5024 B(LdaUndefined), // | |
5025 B(Return), // | |
5026 }}, | |
5027 {"if (true) { return 1; } else { return 2; };", | |
5028 0, | |
5029 1, | |
5030 3, | |
5031 { | |
5032 B(LdaSmi8), U8(1), // | |
5033 B(Return), // | |
5034 }}, | |
5035 {"var a = 1; if (a) { return 1; }; return 2;", | |
5036 1 * kPointerSize, | |
5037 1, | |
5038 14, | |
5039 { | |
5040 B(LdaSmi8), U8(1), // | |
5041 B(Star), R(0), // | |
5042 B(Ldar), R(0), // | |
5043 B(JumpIfToBooleanFalse), U8(5), // | |
5044 B(LdaSmi8), U8(1), // | |
5045 B(Return), // | |
5046 B(LdaSmi8), U8(2), // | |
5047 B(Return), // | |
5048 }}, | |
5049 }; | |
5050 | |
5051 for (size_t i = 0; i < arraysize(snippets); i++) { | |
5052 Handle<BytecodeArray> bytecode_array = | |
5053 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | |
5054 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | |
5055 } | |
5056 } | |
5057 | |
4934 } // namespace interpreter | 5058 } // namespace interpreter |
4935 } // namespace internal | 5059 } // namespace internal |
4936 } // namespace v8 | 5060 } // namespace v8 |
OLD | NEW |