Changeset 147677 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Apr 4, 2013, 4:16:20 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r147658 r147677 1432 1432 // ------------------------------ ConstStatementNode ----------------------------- 1433 1433 1434 RegisterID*ConstStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)1434 void ConstStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1435 1435 { 1436 1436 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); 1437 returngenerator.emitNode(m_next);1437 generator.emitNode(m_next); 1438 1438 } 1439 1439 … … 1466 1466 } 1467 1467 1468 RegisterID*BlockNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1469 { 1470 if ( m_statements)1471 m_statements->emitBytecode(generator, dst);1472 return 0;1468 void BlockNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1469 { 1470 if (!m_statements) 1471 return; 1472 m_statements->emitBytecode(generator, dst); 1473 1473 } 1474 1474 1475 1475 // ------------------------------ EmptyStatementNode --------------------------- 1476 1476 1477 RegisterID* EmptyStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1477 void EmptyStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1478 1478 { 1479 1479 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); 1480 return dst;1481 1480 } 1482 1481 1483 1482 // ------------------------------ DebuggerStatementNode --------------------------- 1484 1483 1485 RegisterID* DebuggerStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1484 void DebuggerStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1486 1485 { 1487 1486 generator.emitDebugHook(DidReachBreakpoint, firstLine(), lastLine(), charPosition()); 1488 return dst;1489 1487 } 1490 1488 1491 1489 // ------------------------------ ExprStatementNode ---------------------------- 1492 1490 1493 RegisterID*ExprStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1491 void ExprStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1494 1492 { 1495 1493 ASSERT(m_expr); 1496 1494 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); 1497 returngenerator.emitNode(dst, m_expr);1495 generator.emitNode(dst, m_expr); 1498 1496 } 1499 1497 1500 1498 // ------------------------------ VarStatementNode ---------------------------- 1501 1499 1502 RegisterID*VarStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)1500 void VarStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1503 1501 { 1504 1502 ASSERT(m_expr); 1505 1503 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); 1506 returngenerator.emitNode(m_expr);1504 generator.emitNode(m_expr); 1507 1505 } 1508 1506 1509 1507 // ------------------------------ IfNode --------------------------------------- 1510 1508 1511 RegisterID*IfNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1509 void IfNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1512 1510 { 1513 1511 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1521 1519 generator.emitNode(dst, m_ifBlock); 1522 1520 generator.emitLabel(afterThen.get()); 1523 1524 // FIXME: This should return the last statement executed so that it can be returned as a Completion.1525 return 0;1526 1521 } 1527 1522 1528 1523 // ------------------------------ IfElseNode --------------------------------------- 1529 1524 1530 RegisterID*IfElseNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1525 void IfElseNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1531 1526 { 1532 1527 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1547 1542 1548 1543 generator.emitLabel(afterElse.get()); 1549 1550 // FIXME: This should return the last statement executed so that it can be returned as a Completion.1551 return 0;1552 1544 } 1553 1545 1554 1546 // ------------------------------ DoWhileNode ---------------------------------- 1555 1547 1556 RegisterID*DoWhileNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1548 void DoWhileNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1557 1549 { 1558 1550 LabelScopePtr scope = generator.newLabelScope(LabelScope::Loop); … … 1563 1555 generator.emitDebugHook(WillExecuteStatement, lastLine(), lastLine(), charPosition()); 1564 1556 1565 RefPtr<RegisterID> result =generator.emitNode(dst, m_statement);1557 generator.emitNode(dst, m_statement); 1566 1558 1567 1559 generator.emitLabel(scope->continueTarget()); … … 1570 1562 1571 1563 generator.emitLabel(scope->breakTarget()); 1572 return result.get();1573 1564 } 1574 1565 1575 1566 // ------------------------------ WhileNode ------------------------------------ 1576 1567 1577 RegisterID*WhileNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1568 void WhileNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1578 1569 { 1579 1570 LabelScopePtr scope = generator.newLabelScope(LabelScope::Loop); … … 1594 1585 1595 1586 generator.emitLabel(scope->breakTarget()); 1596 1597 // FIXME: This should return the last statement executed so that it can be returned as a Completion1598 return 0;1599 1587 } 1600 1588 1601 1589 // ------------------------------ ForNode -------------------------------------- 1602 1590 1603 RegisterID*ForNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1591 void ForNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1604 1592 { 1605 1593 LabelScopePtr scope = generator.newLabelScope(LabelScope::Loop); … … 1617 1605 generator.emitLoopHint(); 1618 1606 1619 RefPtr<RegisterID> result =generator.emitNode(dst, m_statement);1607 generator.emitNode(dst, m_statement); 1620 1608 1621 1609 generator.emitLabel(scope->continueTarget()); … … 1630 1618 1631 1619 generator.emitLabel(scope->breakTarget()); 1632 return result.get();1633 1620 } 1634 1621 1635 1622 // ------------------------------ ForInNode ------------------------------------ 1636 1623 1637 RegisterID*ForInNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1624 void ForInNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1638 1625 { 1639 1626 LabelScopePtr scope = generator.newLabelScope(LabelScope::Loop); 1640 1627 1641 if (!m_lexpr->isLocation()) 1642 return emitThrowReferenceError(generator, "Left side of for-in statement is not a reference."); 1628 if (!m_lexpr->isLocation()) { 1629 emitThrowReferenceError(generator, "Left side of for-in statement is not a reference."); 1630 return; 1631 } 1643 1632 1644 1633 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1708 1697 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); 1709 1698 generator.emitLabel(scope->breakTarget()); 1710 return dst;1711 1699 } 1712 1700 1713 1701 // ------------------------------ ContinueNode --------------------------------- 1714 1702 1715 // ECMA 12.7 1716 RegisterID* ContinueNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1703 void ContinueNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1717 1704 { 1718 1705 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1723 1710 generator.emitPopScopes(scope->scopeDepth()); 1724 1711 generator.emitJump(scope->continueTarget()); 1725 return dst;1726 1712 } 1727 1713 1728 1714 // ------------------------------ BreakNode ------------------------------------ 1729 1715 1730 // ECMA 12.8 1731 RegisterID* BreakNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1716 void BreakNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1732 1717 { 1733 1718 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1738 1723 generator.emitPopScopes(scope->scopeDepth()); 1739 1724 generator.emitJump(scope->breakTarget()); 1740 return dst;1741 1725 } 1742 1726 1743 1727 // ------------------------------ ReturnNode ----------------------------------- 1744 1728 1745 RegisterID*ReturnNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1729 void ReturnNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1746 1730 { 1747 1731 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1758 1742 1759 1743 generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine(), charPosition()); 1760 returngenerator.emitReturn(returnRegister.get());1744 generator.emitReturn(returnRegister.get()); 1761 1745 } 1762 1746 1763 1747 // ------------------------------ WithNode ------------------------------------- 1764 1748 1765 RegisterID*WithNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1749 void WithNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1766 1750 { 1767 1751 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1770 1754 generator.emitExpressionInfo(m_divot, m_expressionLength, 0); 1771 1755 generator.emitPushWithScope(scope.get()); 1772 RegisterID* result =generator.emitNode(dst, m_statement);1756 generator.emitNode(dst, m_statement); 1773 1757 generator.emitPopScope(); 1774 return result;1775 1758 } 1776 1759 … … 1779 1762 inline void CaseClauseNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1780 1763 { 1781 if (m_statements) 1782 m_statements->emitBytecode(generator, dst); 1764 if (!m_statements) 1765 return; 1766 m_statements->emitBytecode(generator, dst); 1783 1767 } 1784 1768 … … 1874 1858 } 1875 1859 1876 RegisterID*CaseBlockNode::emitBytecodeForBlock(BytecodeGenerator& generator, RegisterID* switchExpression, RegisterID* dst)1860 void CaseBlockNode::emitBytecodeForBlock(BytecodeGenerator& generator, RegisterID* switchExpression, RegisterID* dst) 1877 1861 { 1878 1862 RefPtr<Label> defaultLabel; … … 1910 1894 } 1911 1895 1912 RegisterID* result = 0;1913 1914 1896 size_t i = 0; 1915 1897 for (ClauseListNode* list = m_list1; list; list = list->getNext()) { … … 1935 1917 generator.endSwitch(labelVector.size(), labelVector.data(), literalVector.data(), defaultLabel.get(), min_num, max_num); 1936 1918 } 1937 return result;1938 1919 } 1939 1920 1940 1921 // ------------------------------ SwitchNode ----------------------------------- 1941 1922 1942 RegisterID*SwitchNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1923 void SwitchNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1943 1924 { 1944 1925 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1947 1928 1948 1929 RefPtr<RegisterID> r0 = generator.emitNode(m_expr); 1949 RegisterID* r1 =m_block->emitBytecodeForBlock(generator, r0.get(), dst);1930 m_block->emitBytecodeForBlock(generator, r0.get(), dst); 1950 1931 1951 1932 generator.emitLabel(scope->breakTarget()); 1952 return r1;1953 1933 } 1954 1934 1955 1935 // ------------------------------ LabelNode ------------------------------------ 1956 1936 1957 RegisterID*LabelNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1937 void LabelNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1958 1938 { 1959 1939 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1962 1942 1963 1943 LabelScopePtr scope = generator.newLabelScope(LabelScope::NamedLabel, &m_name); 1964 RegisterID* r0 =generator.emitNode(dst, m_statement);1944 generator.emitNode(dst, m_statement); 1965 1945 1966 1946 generator.emitLabel(scope->breakTarget()); 1967 return r0;1968 1947 } 1969 1948 1970 1949 // ------------------------------ ThrowNode ------------------------------------ 1971 1950 1972 RegisterID*ThrowNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1951 void ThrowNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1973 1952 { 1974 1953 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition()); … … 1979 1958 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1980 1959 generator.emitThrow(expr.get()); 1981 return 0;1982 1960 } 1983 1961 1984 1962 // ------------------------------ TryNode -------------------------------------- 1985 1963 1986 RegisterID*TryNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)1964 void TryNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1987 1965 { 1988 1966 // NOTE: The catch and finally blocks must be labeled explicitly, so the … … 2042 2020 generator.emitLabel(finallyEndLabel.get()); 2043 2021 } 2044 2045 return dst;2046 2022 } 2047 2023 … … 2050 2026 inline void ScopeNode::emitStatementsBytecode(BytecodeGenerator& generator, RegisterID* dst) 2051 2027 { 2052 if (m_statements) 2053 m_statements->emitBytecode(generator, dst); 2028 if (!m_statements) 2029 return; 2030 m_statements->emitBytecode(generator, dst); 2054 2031 } 2055 2032 2056 2033 // ------------------------------ ProgramNode ----------------------------- 2057 2034 2058 RegisterID*ProgramNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)2035 void ProgramNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2059 2036 { 2060 2037 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), startCharPosition()); … … 2066 2043 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), charPosition() - 1); 2067 2044 generator.emitEnd(dstRegister.get()); 2068 return 0;2069 2045 } 2070 2046 2071 2047 // ------------------------------ EvalNode ----------------------------- 2072 2048 2073 RegisterID*EvalNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)2049 void EvalNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2074 2050 { 2075 2051 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), startCharPosition()); … … 2081 2057 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), charPosition() - 1); 2082 2058 generator.emitEnd(dstRegister.get()); 2083 return 0;2084 2059 } 2085 2060 2086 2061 // ------------------------------ FunctionBodyNode ----------------------------- 2087 2062 2088 RegisterID*FunctionBodyNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)2063 void FunctionBodyNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2089 2064 { 2090 2065 generator.emitDebugHook(DidEnterCallFrame, startLine(), startLine(), startCharPosition()); … … 2107 2082 generator.emitDebugHook(WillLeaveCallFrame, lastLine(), lastLine(), charPosition() - 1); 2108 2083 generator.emitReturn(r0); 2109 return 0;2084 return; 2110 2085 } 2111 2086 … … 2125 2100 } 2126 2101 } 2127 2128 return 0;2129 2102 } 2130 2103 2131 2104 // ------------------------------ FuncDeclNode --------------------------------- 2132 2105 2133 RegisterID* FuncDeclNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2134 { 2135 if (dst == generator.ignoredResult()) 2136 dst = 0; 2137 return dst; 2106 void FuncDeclNode::emitBytecode(BytecodeGenerator&, RegisterID*) 2107 { 2138 2108 } 2139 2109
Note:
See TracChangeset
for help on using the changeset viewer.