OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/ast-value-factory.h" | 9 #include "src/ast-value-factory.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 1621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1632 Handle<FixedArray> constant_elements_; | 1632 Handle<FixedArray> constant_elements_; |
1633 ZoneList<Expression*>* values_; | 1633 ZoneList<Expression*>* values_; |
1634 int first_spread_index_; | 1634 int first_spread_index_; |
1635 }; | 1635 }; |
1636 | 1636 |
1637 | 1637 |
1638 class VariableProxy final : public Expression { | 1638 class VariableProxy final : public Expression { |
1639 public: | 1639 public: |
1640 DECLARE_NODE_TYPE(VariableProxy) | 1640 DECLARE_NODE_TYPE(VariableProxy) |
1641 | 1641 |
1642 bool IsValidReferenceExpression() const override { return !is_this(); } | 1642 bool IsValidReferenceExpression() const override { |
| 1643 return !is_this() && !is_new_target(); |
| 1644 } |
1643 | 1645 |
1644 bool IsArguments() const { return is_resolved() && var()->is_arguments(); } | 1646 bool IsArguments() const { return is_resolved() && var()->is_arguments(); } |
1645 | 1647 |
1646 Handle<String> name() const { return raw_name()->string(); } | 1648 Handle<String> name() const { return raw_name()->string(); } |
1647 const AstRawString* raw_name() const { | 1649 const AstRawString* raw_name() const { |
1648 return is_resolved() ? var_->raw_name() : raw_name_; | 1650 return is_resolved() ? var_->raw_name() : raw_name_; |
1649 } | 1651 } |
1650 | 1652 |
1651 Variable* var() const { | 1653 Variable* var() const { |
1652 DCHECK(is_resolved()); | 1654 DCHECK(is_resolved()); |
(...skipping 10 matching lines...) Expand all Loading... |
1663 bool is_assigned() const { return IsAssignedField::decode(bit_field_); } | 1665 bool is_assigned() const { return IsAssignedField::decode(bit_field_); } |
1664 void set_is_assigned() { | 1666 void set_is_assigned() { |
1665 bit_field_ = IsAssignedField::update(bit_field_, true); | 1667 bit_field_ = IsAssignedField::update(bit_field_, true); |
1666 } | 1668 } |
1667 | 1669 |
1668 bool is_resolved() const { return IsResolvedField::decode(bit_field_); } | 1670 bool is_resolved() const { return IsResolvedField::decode(bit_field_); } |
1669 void set_is_resolved() { | 1671 void set_is_resolved() { |
1670 bit_field_ = IsResolvedField::update(bit_field_, true); | 1672 bit_field_ = IsResolvedField::update(bit_field_, true); |
1671 } | 1673 } |
1672 | 1674 |
| 1675 bool is_new_target() const { return IsNewTargetField::decode(bit_field_); } |
| 1676 void set_is_new_target() { |
| 1677 bit_field_ = IsNewTargetField::update(bit_field_, true); |
| 1678 } |
| 1679 |
1673 int end_position() const { return end_position_; } | 1680 int end_position() const { return end_position_; } |
1674 | 1681 |
1675 // Bind this proxy to the variable var. | 1682 // Bind this proxy to the variable var. |
1676 void BindTo(Variable* var); | 1683 void BindTo(Variable* var); |
1677 | 1684 |
1678 bool UsesVariableFeedbackSlot() const { | 1685 bool UsesVariableFeedbackSlot() const { |
1679 return var()->IsUnallocated() || var()->IsLookupSlot(); | 1686 return var()->IsUnallocated() || var()->IsLookupSlot(); |
1680 } | 1687 } |
1681 | 1688 |
1682 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 1689 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
(...skipping 15 matching lines...) Expand all Loading... |
1698 | 1705 |
1699 VariableProxy(Zone* zone, const AstRawString* name, | 1706 VariableProxy(Zone* zone, const AstRawString* name, |
1700 Variable::Kind variable_kind, int start_position, | 1707 Variable::Kind variable_kind, int start_position, |
1701 int end_position); | 1708 int end_position); |
1702 static int parent_num_ids() { return Expression::num_ids(); } | 1709 static int parent_num_ids() { return Expression::num_ids(); } |
1703 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 1710 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
1704 | 1711 |
1705 class IsThisField : public BitField8<bool, 0, 1> {}; | 1712 class IsThisField : public BitField8<bool, 0, 1> {}; |
1706 class IsAssignedField : public BitField8<bool, 1, 1> {}; | 1713 class IsAssignedField : public BitField8<bool, 1, 1> {}; |
1707 class IsResolvedField : public BitField8<bool, 2, 1> {}; | 1714 class IsResolvedField : public BitField8<bool, 2, 1> {}; |
| 1715 class IsNewTargetField : public BitField8<bool, 3, 1> {}; |
1708 | 1716 |
1709 // Start with 16-bit (or smaller) field, which should get packed together | 1717 // Start with 16-bit (or smaller) field, which should get packed together |
1710 // with Expression's trailing 16-bit field. | 1718 // with Expression's trailing 16-bit field. |
1711 uint8_t bit_field_; | 1719 uint8_t bit_field_; |
1712 FeedbackVectorICSlot variable_feedback_slot_; | 1720 FeedbackVectorICSlot variable_feedback_slot_; |
1713 union { | 1721 union { |
1714 const AstRawString* raw_name_; // if !is_resolved_ | 1722 const AstRawString* raw_name_; // if !is_resolved_ |
1715 Variable* var_; // if is_resolved_ | 1723 Variable* var_; // if is_resolved_ |
1716 }; | 1724 }; |
1717 // Position is stored in the AstNode superclass, but VariableProxy needs to | 1725 // Position is stored in the AstNode superclass, but VariableProxy needs to |
(...skipping 1909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3627 | 3635 |
3628 private: | 3636 private: |
3629 Zone* zone_; | 3637 Zone* zone_; |
3630 AstValueFactory* ast_value_factory_; | 3638 AstValueFactory* ast_value_factory_; |
3631 }; | 3639 }; |
3632 | 3640 |
3633 | 3641 |
3634 } } // namespace v8::internal | 3642 } } // namespace v8::internal |
3635 | 3643 |
3636 #endif // V8_AST_H_ | 3644 #endif // V8_AST_H_ |
OLD | NEW |