Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 2544123004: [fullcodegen] Remove super property access support. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/ast/compile-time-value.h" 7 #include "src/ast/compile-time-value.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler.h" 10 #include "src/compiler.h"
(...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 environment()->Push(value); 1550 environment()->Push(value);
1551 VisitForValue(property->obj()); 1551 VisitForValue(property->obj());
1552 VisitForValue(property->key()); 1552 VisitForValue(property->key());
1553 Node* key = environment()->Pop(); 1553 Node* key = environment()->Pop();
1554 Node* object = environment()->Pop(); 1554 Node* object = environment()->Pop();
1555 value = environment()->Pop(); 1555 value = environment()->Pop();
1556 Node* store = BuildKeyedStore(object, key, value, feedback); 1556 Node* store = BuildKeyedStore(object, key, value, feedback);
1557 PrepareFrameState(store, bailout_id, OutputFrameStateCombine::Ignore()); 1557 PrepareFrameState(store, bailout_id, OutputFrameStateCombine::Ignore());
1558 break; 1558 break;
1559 } 1559 }
1560 case NAMED_SUPER_PROPERTY: { 1560 case NAMED_SUPER_PROPERTY:
1561 environment()->Push(value); 1561 case KEYED_SUPER_PROPERTY:
1562 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var()); 1562 UNREACHABLE();
1563 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object());
1564 Node* home_object = environment()->Pop();
1565 Node* receiver = environment()->Pop();
1566 value = environment()->Pop();
1567 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
1568 Node* store = BuildNamedSuperStore(receiver, home_object, name, value);
1569 PrepareFrameState(store, bailout_id, OutputFrameStateCombine::Ignore());
1570 break; 1563 break;
1571 }
1572 case KEYED_SUPER_PROPERTY: {
1573 environment()->Push(value);
1574 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var());
1575 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object());
1576 VisitForValue(property->key());
1577 Node* key = environment()->Pop();
1578 Node* home_object = environment()->Pop();
1579 Node* receiver = environment()->Pop();
1580 value = environment()->Pop();
1581 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value);
1582 PrepareFrameState(store, bailout_id, OutputFrameStateCombine::Ignore());
1583 break;
1584 }
1585 } 1564 }
1586 } 1565 }
1587 1566
1588 1567
1589 void AstGraphBuilder::VisitAssignment(Assignment* expr) { 1568 void AstGraphBuilder::VisitAssignment(Assignment* expr) {
1590 DCHECK(expr->target()->IsValidReferenceExpressionOrThis()); 1569 DCHECK(expr->target()->IsValidReferenceExpressionOrThis());
1591 1570
1592 // Left-hand side can only be a property, a global or a variable slot. 1571 // Left-hand side can only be a property, a global or a variable slot.
1593 Property* property = expr->target()->AsProperty(); 1572 Property* property = expr->target()->AsProperty();
1594 LhsKind assign_type = Property::GetAssignType(property); 1573 LhsKind assign_type = Property::GetAssignType(property);
(...skipping 11 matching lines...) Expand all
1606 break; 1585 break;
1607 } 1586 }
1608 case NAMED_PROPERTY: 1587 case NAMED_PROPERTY:
1609 VisitForValue(property->obj()); 1588 VisitForValue(property->obj());
1610 break; 1589 break;
1611 case KEYED_PROPERTY: 1590 case KEYED_PROPERTY:
1612 VisitForValue(property->obj()); 1591 VisitForValue(property->obj());
1613 VisitForValue(property->key()); 1592 VisitForValue(property->key());
1614 break; 1593 break;
1615 case NAMED_SUPER_PROPERTY: 1594 case NAMED_SUPER_PROPERTY:
1616 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var());
1617 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object());
1618 break;
1619 case KEYED_SUPER_PROPERTY: 1595 case KEYED_SUPER_PROPERTY:
1620 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var()); 1596 UNREACHABLE();
1621 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object());
1622 VisitForValue(property->key());
1623 break; 1597 break;
1624 } 1598 }
1625 1599
1626 // Evaluate the value and potentially handle compound assignments by loading 1600 // Evaluate the value and potentially handle compound assignments by loading
1627 // the left-hand side value and performing a binary operation. 1601 // the left-hand side value and performing a binary operation.
1628 if (expr->is_compound()) { 1602 if (expr->is_compound()) {
1629 Node* old_value = nullptr; 1603 Node* old_value = nullptr;
1630 switch (assign_type) { 1604 switch (assign_type) {
1631 case VARIABLE: { 1605 case VARIABLE: {
1632 VariableProxy* proxy = expr->target()->AsVariableProxy(); 1606 VariableProxy* proxy = expr->target()->AsVariableProxy();
(...skipping 17 matching lines...) Expand all
1650 case KEYED_PROPERTY: { 1624 case KEYED_PROPERTY: {
1651 Node* key = environment()->Top(); 1625 Node* key = environment()->Top();
1652 Node* object = environment()->Peek(1); 1626 Node* object = environment()->Peek(1);
1653 VectorSlotPair pair = 1627 VectorSlotPair pair =
1654 CreateVectorSlotPair(property->PropertyFeedbackSlot()); 1628 CreateVectorSlotPair(property->PropertyFeedbackSlot());
1655 old_value = BuildKeyedLoad(object, key, pair); 1629 old_value = BuildKeyedLoad(object, key, pair);
1656 PrepareFrameState(old_value, property->LoadId(), 1630 PrepareFrameState(old_value, property->LoadId(),
1657 OutputFrameStateCombine::Push()); 1631 OutputFrameStateCombine::Push());
1658 break; 1632 break;
1659 } 1633 }
1660 case NAMED_SUPER_PROPERTY: { 1634 case NAMED_SUPER_PROPERTY:
1661 Node* home_object = environment()->Top(); 1635 case KEYED_SUPER_PROPERTY:
1662 Node* receiver = environment()->Peek(1); 1636 UNREACHABLE();
1663 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
1664 VectorSlotPair pair =
1665 CreateVectorSlotPair(property->PropertyFeedbackSlot());
1666 old_value = BuildNamedSuperLoad(receiver, home_object, name, pair);
1667 PrepareFrameState(old_value, property->LoadId(),
1668 OutputFrameStateCombine::Push());
1669 break; 1637 break;
1670 }
1671 case KEYED_SUPER_PROPERTY: {
1672 Node* key = environment()->Top();
1673 Node* home_object = environment()->Peek(1);
1674 Node* receiver = environment()->Peek(2);
1675 VectorSlotPair pair =
1676 CreateVectorSlotPair(property->PropertyFeedbackSlot());
1677 old_value = BuildKeyedSuperLoad(receiver, home_object, key, pair);
1678 PrepareFrameState(old_value, property->LoadId(),
1679 OutputFrameStateCombine::Push());
1680 break;
1681 }
1682 } 1638 }
1683 environment()->Push(old_value); 1639 environment()->Push(old_value);
1684 VisitForValue(expr->value()); 1640 VisitForValue(expr->value());
1685 Node* right = environment()->Pop(); 1641 Node* right = environment()->Pop();
1686 Node* left = environment()->Pop(); 1642 Node* left = environment()->Pop();
1687 Node* value = 1643 Node* value =
1688 BuildBinaryOp(left, right, expr->binary_op(), 1644 BuildBinaryOp(left, right, expr->binary_op(),
1689 expr->binary_operation()->BinaryOperationFeedbackId()); 1645 expr->binary_operation()->BinaryOperationFeedbackId());
1690 PrepareFrameState(value, expr->binary_operation()->id(), 1646 PrepareFrameState(value, expr->binary_operation()->id(),
1691 OutputFrameStateCombine::Push()); 1647 OutputFrameStateCombine::Push());
(...skipping 24 matching lines...) Expand all
1716 break; 1672 break;
1717 } 1673 }
1718 case KEYED_PROPERTY: { 1674 case KEYED_PROPERTY: {
1719 Node* key = environment()->Pop(); 1675 Node* key = environment()->Pop();
1720 Node* object = environment()->Pop(); 1676 Node* object = environment()->Pop();
1721 Node* store = BuildKeyedStore(object, key, value, feedback); 1677 Node* store = BuildKeyedStore(object, key, value, feedback);
1722 PrepareFrameState(store, expr->AssignmentId(), 1678 PrepareFrameState(store, expr->AssignmentId(),
1723 OutputFrameStateCombine::Push()); 1679 OutputFrameStateCombine::Push());
1724 break; 1680 break;
1725 } 1681 }
1726 case NAMED_SUPER_PROPERTY: { 1682 case NAMED_SUPER_PROPERTY:
1727 Node* home_object = environment()->Pop(); 1683 case KEYED_SUPER_PROPERTY:
1728 Node* receiver = environment()->Pop(); 1684 UNREACHABLE();
1729 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
1730 Node* store = BuildNamedSuperStore(receiver, home_object, name, value);
1731 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine());
1732 break; 1685 break;
1733 }
1734 case KEYED_SUPER_PROPERTY: {
1735 Node* key = environment()->Pop();
1736 Node* home_object = environment()->Pop();
1737 Node* receiver = environment()->Pop();
1738 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value);
1739 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine());
1740 break;
1741 }
1742 } 1686 }
1743 1687
1744 ast_context()->ProduceValue(expr, value); 1688 ast_context()->ProduceValue(expr, value);
1745 } 1689 }
1746 1690
1747 1691
1748 void AstGraphBuilder::VisitYield(Yield* expr) { 1692 void AstGraphBuilder::VisitYield(Yield* expr) {
1749 // Generator functions are supported only by going through Ignition first. 1693 // Generator functions are supported only by going through Ignition first.
1750 UNREACHABLE(); 1694 UNREACHABLE();
1751 } 1695 }
(...skipping 25 matching lines...) Expand all
1777 } 1721 }
1778 case KEYED_PROPERTY: { 1722 case KEYED_PROPERTY: {
1779 VisitForValue(expr->obj()); 1723 VisitForValue(expr->obj());
1780 VisitForValue(expr->key()); 1724 VisitForValue(expr->key());
1781 Node* key = environment()->Pop(); 1725 Node* key = environment()->Pop();
1782 Node* object = environment()->Pop(); 1726 Node* object = environment()->Pop();
1783 value = BuildKeyedLoad(object, key, pair); 1727 value = BuildKeyedLoad(object, key, pair);
1784 PrepareFrameState(value, expr->LoadId(), OutputFrameStateCombine::Push()); 1728 PrepareFrameState(value, expr->LoadId(), OutputFrameStateCombine::Push());
1785 break; 1729 break;
1786 } 1730 }
1787 case NAMED_SUPER_PROPERTY: { 1731 case NAMED_SUPER_PROPERTY:
1788 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); 1732 case KEYED_SUPER_PROPERTY:
1789 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); 1733 UNREACHABLE();
1790 Node* home_object = environment()->Pop();
1791 Node* receiver = environment()->Pop();
1792 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName();
1793 value = BuildNamedSuperLoad(receiver, home_object, name, pair);
1794 PrepareFrameState(value, expr->LoadId(), OutputFrameStateCombine::Push());
1795 break; 1734 break;
1796 }
1797 case KEYED_SUPER_PROPERTY: {
1798 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var());
1799 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object());
1800 VisitForValue(expr->key());
1801 Node* key = environment()->Pop();
1802 Node* home_object = environment()->Pop();
1803 Node* receiver = environment()->Pop();
1804 value = BuildKeyedSuperLoad(receiver, home_object, key, pair);
1805 PrepareFrameState(value, expr->LoadId(), OutputFrameStateCombine::Push());
1806 break;
1807 }
1808 } 1735 }
1809 ast_context()->ProduceValue(expr, value); 1736 ast_context()->ProduceValue(expr, value);
1810 } 1737 }
1811 1738
1812 1739
1813 void AstGraphBuilder::VisitCall(Call* expr) { 1740 void AstGraphBuilder::VisitCall(Call* expr) {
1814 Expression* callee = expr->expression(); 1741 Expression* callee = expr->expression();
1815 Call::CallType call_type = expr->GetCallType(); 1742 Call::CallType call_type = expr->GetCallType();
1816 CHECK(!expr->is_possibly_eval()); 1743 CHECK(!expr->is_possibly_eval());
1817 1744
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1859 callee_value = BuildKeyedLoad(object, key, feedback); 1786 callee_value = BuildKeyedLoad(object, key, feedback);
1860 PrepareFrameState(callee_value, property->LoadId(), 1787 PrepareFrameState(callee_value, property->LoadId(),
1861 OutputFrameStateCombine::Push()); 1788 OutputFrameStateCombine::Push());
1862 // Note that a property call requires the receiver to be wrapped into 1789 // Note that a property call requires the receiver to be wrapped into
1863 // an object for sloppy callees. However the receiver is guaranteed 1790 // an object for sloppy callees. However the receiver is guaranteed
1864 // not to be null or undefined at this point. 1791 // not to be null or undefined at this point.
1865 receiver_hint = ConvertReceiverMode::kNotNullOrUndefined; 1792 receiver_hint = ConvertReceiverMode::kNotNullOrUndefined;
1866 receiver_value = environment()->Pop(); 1793 receiver_value = environment()->Pop();
1867 break; 1794 break;
1868 } 1795 }
1869 case Call::NAMED_SUPER_PROPERTY_CALL: {
1870 Property* property = callee->AsProperty();
1871 SuperPropertyReference* super_ref =
1872 property->obj()->AsSuperPropertyReference();
1873 VisitForValue(super_ref->home_object());
1874 VisitForValue(super_ref->this_var());
1875 Node* home = environment()->Peek(1);
1876 Node* object = environment()->Top();
1877 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
1878 callee_value = BuildNamedSuperLoad(object, home, name, VectorSlotPair());
1879 PrepareFrameState(callee_value, property->LoadId(),
1880 OutputFrameStateCombine::Push());
1881 // Note that a property call requires the receiver to be wrapped into
1882 // an object for sloppy callees. Since the receiver is not the target of
1883 // the load, it could very well be null or undefined at this point.
1884 receiver_value = environment()->Pop();
1885 environment()->Drop(1);
1886 break;
1887 }
1888 case Call::KEYED_SUPER_PROPERTY_CALL: {
1889 Property* property = callee->AsProperty();
1890 SuperPropertyReference* super_ref =
1891 property->obj()->AsSuperPropertyReference();
1892 VisitForValue(super_ref->home_object());
1893 VisitForValue(super_ref->this_var());
1894 environment()->Push(environment()->Top()); // Duplicate this_var.
1895 environment()->Push(environment()->Peek(2)); // Duplicate home_obj.
1896 VisitForValue(property->key());
1897 Node* key = environment()->Pop();
1898 Node* home = environment()->Pop();
1899 Node* object = environment()->Pop();
1900 callee_value = BuildKeyedSuperLoad(object, home, key, VectorSlotPair());
1901 PrepareFrameState(callee_value, property->LoadId(),
1902 OutputFrameStateCombine::Push());
1903 // Note that a property call requires the receiver to be wrapped into
1904 // an object for sloppy callees. Since the receiver is not the target of
1905 // the load, it could very well be null or undefined at this point.
1906 receiver_value = environment()->Pop();
1907 environment()->Drop(1);
1908 break;
1909 }
1910 case Call::OTHER_CALL: 1796 case Call::OTHER_CALL:
1911 VisitForValue(callee); 1797 VisitForValue(callee);
1912 callee_value = environment()->Pop(); 1798 callee_value = environment()->Pop();
1913 receiver_hint = ConvertReceiverMode::kNullOrUndefined; 1799 receiver_hint = ConvertReceiverMode::kNullOrUndefined;
1914 receiver_value = jsgraph()->UndefinedConstant(); 1800 receiver_value = jsgraph()->UndefinedConstant();
1915 break; 1801 break;
1802 case Call::NAMED_SUPER_PROPERTY_CALL:
1803 case Call::KEYED_SUPER_PROPERTY_CALL:
1916 case Call::SUPER_CALL: 1804 case Call::SUPER_CALL:
1917 case Call::WITH_CALL: 1805 case Call::WITH_CALL:
1918 UNREACHABLE(); 1806 UNREACHABLE();
1919 } 1807 }
1920 1808
1921 // The callee and the receiver both have to be pushed onto the operand stack 1809 // The callee and the receiver both have to be pushed onto the operand stack
1922 // before arguments are being evaluated. 1810 // before arguments are being evaluated.
1923 environment()->Push(callee_value); 1811 environment()->Push(callee_value);
1924 environment()->Push(receiver_value); 1812 environment()->Push(receiver_value);
1925 1813
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2100 Node* key = environment()->Top(); 1988 Node* key = environment()->Top();
2101 Node* object = environment()->Peek(1); 1989 Node* object = environment()->Peek(1);
2102 VectorSlotPair pair = 1990 VectorSlotPair pair =
2103 CreateVectorSlotPair(property->PropertyFeedbackSlot()); 1991 CreateVectorSlotPair(property->PropertyFeedbackSlot());
2104 old_value = BuildKeyedLoad(object, key, pair); 1992 old_value = BuildKeyedLoad(object, key, pair);
2105 PrepareFrameState(old_value, property->LoadId(), 1993 PrepareFrameState(old_value, property->LoadId(),
2106 OutputFrameStateCombine::Push()); 1994 OutputFrameStateCombine::Push());
2107 stack_depth = 2; 1995 stack_depth = 2;
2108 break; 1996 break;
2109 } 1997 }
2110 case NAMED_SUPER_PROPERTY: { 1998 case NAMED_SUPER_PROPERTY:
2111 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var()); 1999 case KEYED_SUPER_PROPERTY:
2112 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object()); 2000 UNREACHABLE();
2113 Node* home_object = environment()->Top();
2114 Node* receiver = environment()->Peek(1);
2115 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2116 VectorSlotPair pair =
2117 CreateVectorSlotPair(property->PropertyFeedbackSlot());
2118 old_value = BuildNamedSuperLoad(receiver, home_object, name, pair);
2119 PrepareFrameState(old_value, property->LoadId(),
2120 OutputFrameStateCombine::Push());
2121 stack_depth = 2;
2122 break; 2001 break;
2123 }
2124 case KEYED_SUPER_PROPERTY: {
2125 VisitForValue(property->obj()->AsSuperPropertyReference()->this_var());
2126 VisitForValue(property->obj()->AsSuperPropertyReference()->home_object());
2127 VisitForValue(property->key());
2128 Node* key = environment()->Top();
2129 Node* home_object = environment()->Peek(1);
2130 Node* receiver = environment()->Peek(2);
2131 VectorSlotPair pair =
2132 CreateVectorSlotPair(property->PropertyFeedbackSlot());
2133 old_value = BuildKeyedSuperLoad(receiver, home_object, key, pair);
2134 PrepareFrameState(old_value, property->LoadId(),
2135 OutputFrameStateCombine::Push());
2136 stack_depth = 3;
2137 break;
2138 }
2139 } 2002 }
2140 2003
2141 // Convert old value into a number. 2004 // Convert old value into a number.
2142 old_value = NewNode(javascript()->ToNumber(), old_value); 2005 old_value = NewNode(javascript()->ToNumber(), old_value);
2143 PrepareFrameState(old_value, expr->ToNumberId(), 2006 PrepareFrameState(old_value, expr->ToNumberId(),
2144 OutputFrameStateCombine::Push()); 2007 OutputFrameStateCombine::Push());
2145 2008
2146 // Create a proper eager frame state for the stores. 2009 // Create a proper eager frame state for the stores.
2147 environment()->Push(old_value); 2010 environment()->Push(old_value);
2148 PrepareEagerCheckpoint(expr->ToNumberId()); 2011 PrepareEagerCheckpoint(expr->ToNumberId());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 break; 2046 break;
2184 } 2047 }
2185 case KEYED_PROPERTY: { 2048 case KEYED_PROPERTY: {
2186 Node* key = environment()->Pop(); 2049 Node* key = environment()->Pop();
2187 Node* object = environment()->Pop(); 2050 Node* object = environment()->Pop();
2188 Node* store = BuildKeyedStore(object, key, value, feedback); 2051 Node* store = BuildKeyedStore(object, key, value, feedback);
2189 PrepareFrameState(store, expr->AssignmentId(), 2052 PrepareFrameState(store, expr->AssignmentId(),
2190 OutputFrameStateCombine::Push()); 2053 OutputFrameStateCombine::Push());
2191 break; 2054 break;
2192 } 2055 }
2193 case NAMED_SUPER_PROPERTY: { 2056 case NAMED_SUPER_PROPERTY:
2194 Node* home_object = environment()->Pop(); 2057 case KEYED_SUPER_PROPERTY:
2195 Node* receiver = environment()->Pop(); 2058 UNREACHABLE();
2196 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName();
2197 Node* store = BuildNamedSuperStore(receiver, home_object, name, value);
2198 PrepareFrameState(store, expr->AssignmentId(),
2199 OutputFrameStateCombine::Push());
2200 break; 2059 break;
2201 }
2202 case KEYED_SUPER_PROPERTY: {
2203 Node* key = environment()->Pop();
2204 Node* home_object = environment()->Pop();
2205 Node* receiver = environment()->Pop();
2206 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value);
2207 PrepareFrameState(store, expr->AssignmentId(),
2208 OutputFrameStateCombine::Push());
2209 break;
2210 }
2211 } 2060 }
2212 2061
2213 // Restore old value for postfix expressions. 2062 // Restore old value for postfix expressions.
2214 if (is_postfix) value = environment()->Pop(); 2063 if (is_postfix) value = environment()->Pop();
2215 2064
2216 ast_context()->ProduceValue(expr, value); 2065 ast_context()->ProduceValue(expr, value);
2217 } 2066 }
2218 2067
2219 2068
2220 void AstGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) { 2069 void AstGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2346 2195
2347 2196
2348 void AstGraphBuilder::VisitThisFunction(ThisFunction* expr) { 2197 void AstGraphBuilder::VisitThisFunction(ThisFunction* expr) {
2349 Node* value = GetFunctionClosure(); 2198 Node* value = GetFunctionClosure();
2350 ast_context()->ProduceValue(expr, value); 2199 ast_context()->ProduceValue(expr, value);
2351 } 2200 }
2352 2201
2353 2202
2354 void AstGraphBuilder::VisitSuperPropertyReference( 2203 void AstGraphBuilder::VisitSuperPropertyReference(
2355 SuperPropertyReference* expr) { 2204 SuperPropertyReference* expr) {
2356 Node* value = BuildThrowUnsupportedSuperError(expr->id()); 2205 UNREACHABLE();
2357 ast_context()->ProduceValue(expr, value);
2358 } 2206 }
2359 2207
2360 2208
2361 void AstGraphBuilder::VisitSuperCallReference(SuperCallReference* expr) { 2209 void AstGraphBuilder::VisitSuperCallReference(SuperCallReference* expr) {
2362 // Handled by VisitCall 2210 // Handled by VisitCall
2363 UNREACHABLE(); 2211 UNREACHABLE();
2364 } 2212 }
2365 2213
2366 2214
2367 void AstGraphBuilder::VisitCaseClause(CaseClause* expr) { 2215 void AstGraphBuilder::VisitCaseClause(CaseClause* expr) {
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
2918 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, 2766 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name,
2919 Node* value, 2767 Node* value,
2920 const VectorSlotPair& feedback) { 2768 const VectorSlotPair& feedback) {
2921 const Operator* op = 2769 const Operator* op =
2922 javascript()->StoreNamed(language_mode(), name, feedback); 2770 javascript()->StoreNamed(language_mode(), name, feedback);
2923 Node* node = NewNode(op, object, value); 2771 Node* node = NewNode(op, object, value);
2924 return node; 2772 return node;
2925 } 2773 }
2926 2774
2927 2775
2928 Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object,
2929 Handle<Name> name,
2930 const VectorSlotPair& feedback) {
2931 Node* name_node = jsgraph()->Constant(name);
2932 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper);
2933 Node* node = NewNode(op, receiver, home_object, name_node);
2934 return node;
2935 }
2936
2937
2938 Node* AstGraphBuilder::BuildKeyedSuperLoad(Node* receiver, Node* home_object,
2939 Node* key,
2940 const VectorSlotPair& feedback) {
2941 const Operator* op = javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper);
2942 Node* node = NewNode(op, receiver, home_object, key);
2943 return node;
2944 }
2945
2946
2947 Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object,
2948 Node* key, Node* value) {
2949 Runtime::FunctionId function_id = is_strict(language_mode())
2950 ? Runtime::kStoreKeyedToSuper_Strict
2951 : Runtime::kStoreKeyedToSuper_Sloppy;
2952 const Operator* op = javascript()->CallRuntime(function_id, 4);
2953 Node* node = NewNode(op, receiver, home_object, key, value);
2954 return node;
2955 }
2956
2957
2958 Node* AstGraphBuilder::BuildNamedSuperStore(Node* receiver, Node* home_object,
2959 Handle<Name> name, Node* value) {
2960 Node* name_node = jsgraph()->Constant(name);
2961 Runtime::FunctionId function_id = is_strict(language_mode())
2962 ? Runtime::kStoreToSuper_Strict
2963 : Runtime::kStoreToSuper_Sloppy;
2964 const Operator* op = javascript()->CallRuntime(function_id, 4);
2965 Node* node = NewNode(op, receiver, home_object, name_node, value);
2966 return node;
2967 }
2968
2969
2970 Node* AstGraphBuilder::BuildGlobalLoad(Handle<Name> name, 2776 Node* AstGraphBuilder::BuildGlobalLoad(Handle<Name> name,
2971 const VectorSlotPair& feedback, 2777 const VectorSlotPair& feedback,
2972 TypeofMode typeof_mode) { 2778 TypeofMode typeof_mode) {
2973 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode); 2779 const Operator* op = javascript()->LoadGlobal(name, feedback, typeof_mode);
2974 Node* node = NewNode(op); 2780 Node* node = NewNode(op);
2975 return node; 2781 return node;
2976 } 2782 }
2977 2783
2978 2784
2979 Node* AstGraphBuilder::BuildGlobalStore(Handle<Name> name, Node* value, 2785 Node* AstGraphBuilder::BuildGlobalStore(Handle<Name> name, Node* value,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
3052 Node* AstGraphBuilder::BuildThrowConstAssignError(BailoutId bailout_id) { 2858 Node* AstGraphBuilder::BuildThrowConstAssignError(BailoutId bailout_id) {
3053 const Operator* op = 2859 const Operator* op =
3054 javascript()->CallRuntime(Runtime::kThrowConstAssignError); 2860 javascript()->CallRuntime(Runtime::kThrowConstAssignError);
3055 Node* call = NewNode(op); 2861 Node* call = NewNode(op);
3056 PrepareFrameState(call, bailout_id); 2862 PrepareFrameState(call, bailout_id);
3057 Node* control = NewNode(common()->Throw(), call); 2863 Node* control = NewNode(common()->Throw(), call);
3058 UpdateControlDependencyToLeaveFunction(control); 2864 UpdateControlDependencyToLeaveFunction(control);
3059 return call; 2865 return call;
3060 } 2866 }
3061 2867
3062 Node* AstGraphBuilder::BuildThrowUnsupportedSuperError(BailoutId bailout_id) {
3063 const Operator* op =
3064 javascript()->CallRuntime(Runtime::kThrowUnsupportedSuperError);
3065 Node* call = NewNode(op);
3066 PrepareFrameState(call, bailout_id);
3067 Node* control = NewNode(common()->Throw(), call);
3068 UpdateControlDependencyToLeaveFunction(control);
3069 return call;
3070 }
3071
3072 2868
3073 Node* AstGraphBuilder::BuildReturn(Node* return_value) { 2869 Node* AstGraphBuilder::BuildReturn(Node* return_value) {
3074 // Emit tracing call if requested to do so. 2870 // Emit tracing call if requested to do so.
3075 if (FLAG_trace) { 2871 if (FLAG_trace) {
3076 return_value = 2872 return_value =
3077 NewNode(javascript()->CallRuntime(Runtime::kTraceExit), return_value); 2873 NewNode(javascript()->CallRuntime(Runtime::kTraceExit), return_value);
3078 } 2874 }
3079 Node* pop_node = jsgraph()->ZeroConstant(); 2875 Node* pop_node = jsgraph()->ZeroConstant();
3080 Node* control = NewNode(common()->Return(), pop_node, return_value); 2876 Node* control = NewNode(common()->Return(), pop_node, return_value);
3081 UpdateControlDependencyToLeaveFunction(control); 2877 UpdateControlDependencyToLeaveFunction(control);
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
3525 float invocation_frequency, LoopAssignmentAnalysis* loop_assignment, 3321 float invocation_frequency, LoopAssignmentAnalysis* loop_assignment,
3526 SourcePositionTable* source_positions, int inlining_id) 3322 SourcePositionTable* source_positions, int inlining_id)
3527 : AstGraphBuilder(local_zone, info, jsgraph, invocation_frequency, 3323 : AstGraphBuilder(local_zone, info, jsgraph, invocation_frequency,
3528 loop_assignment), 3324 loop_assignment),
3529 source_positions_(source_positions), 3325 source_positions_(source_positions),
3530 start_position_(info->shared_info()->start_position(), inlining_id) {} 3326 start_position_(info->shared_info()->start_position(), inlining_id) {}
3531 3327
3532 } // namespace compiler 3328 } // namespace compiler
3533 } // namespace internal 3329 } // namespace internal
3534 } // namespace v8 3330 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698