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 // 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 |