Changeset 229608 in webkit for trunk/Source/JavaScriptCore/parser/Nodes.h
- Timestamp:
- Mar 14, 2018, 1:00:21 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/Nodes.h
r227692 r229608 696 696 }; 697 697 698 enum class ClassElementTag { No, Instance, Static, LastTag }; 698 699 class PropertyNode : public ParserArenaFreeable { 699 700 public: … … 701 702 enum PutType { Unknown, KnownDirect }; 702 703 703 PropertyNode(const Identifier&, ExpressionNode*, Type, PutType, SuperBinding, bool isClassProperty);704 PropertyNode(ExpressionNode*, Type, PutType, SuperBinding, bool isClassProperty);705 PropertyNode(ExpressionNode* propertyName, ExpressionNode*, Type, PutType, SuperBinding, bool isClassProperty);704 PropertyNode(const Identifier&, ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag); 705 PropertyNode(ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag); 706 PropertyNode(ExpressionNode* propertyName, ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag); 706 707 707 708 ExpressionNode* expressionName() const { return m_expression; } … … 710 711 Type type() const { return static_cast<Type>(m_type); } 711 712 bool needsSuperBinding() const { return m_needsSuperBinding; } 712 bool isClassProperty() const { return m_isClassProperty; } 713 bool isClassProperty() const { return static_cast<ClassElementTag>(m_classElementTag) != ClassElementTag::No; } 714 bool isStaticClassProperty() const { return static_cast<ClassElementTag>(m_classElementTag) == ClassElementTag::Static; } 715 bool isInstanceClassProperty() const { return static_cast<ClassElementTag>(m_classElementTag) == ClassElementTag::Instance; } 713 716 bool isOverriddenByDuplicate() const { return m_isOverriddenByDuplicate; } 714 717 void setIsOverriddenByDuplicate() { m_isOverriddenByDuplicate = true; } … … 723 726 unsigned m_needsSuperBinding : 1; 724 727 unsigned m_putType : 1; 725 unsigned m_isClassProperty: 1; 728 static_assert(1 << 2 > static_cast<unsigned>(ClassElementTag::LastTag), "ClassElementTag shouldn't use more than two bits"); 729 unsigned m_classElementTag : 2; 726 730 unsigned m_isOverriddenByDuplicate: 1; 727 731 }; … … 734 738 bool hasStaticallyNamedProperty(const Identifier& propName); 735 739 736 private: 737 RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override; 740 RegisterID* emitBytecode(BytecodeGenerator&, RegisterID*, RegisterID*); 741 742 private: 743 RegisterID* emitBytecode(BytecodeGenerator& generator, RegisterID* dst = nullptr) override 744 { 745 return emitBytecode(generator, dst, nullptr); 746 } 738 747 void emitPutConstantProperty(BytecodeGenerator&, RegisterID*, PropertyNode&); 739 748 … … 2140 2149 ClassExprNode(const JSTokenLocation&, const Identifier&, const SourceCode& classSource, 2141 2150 VariableEnvironment& classEnvironment, ExpressionNode* constructorExpresssion, 2142 ExpressionNode* parentClass, PropertyListNode* instanceMethods, PropertyListNode* staticMethods);2151 ExpressionNode* parentClass, PropertyListNode* classElements); 2143 2152 2144 2153 const Identifier& name() { return m_name; } … … 2146 2155 void setEcmaName(const Identifier& name) { m_ecmaName = m_name.isNull() ? &name : &m_name; } 2147 2156 2148 bool hasStaticProperty(const Identifier& propName) { return m_ staticMethods ? m_staticMethods->hasStaticallyNamedProperty(propName) : false; }2157 bool hasStaticProperty(const Identifier& propName) { return m_classElements ? m_classElements->hasStaticallyNamedProperty(propName) : false; } 2149 2158 2150 2159 private: … … 2158 2167 ExpressionNode* m_constructorExpression; 2159 2168 ExpressionNode* m_classHeritage; 2160 PropertyListNode* m_instanceMethods; 2161 PropertyListNode* m_staticMethods; 2169 PropertyListNode* m_classElements; 2162 2170 }; 2163 2171
Note:
See TracChangeset
for help on using the changeset viewer.