Changeset 233937 in webkit
- Timestamp:
- Jul 18, 2018 3:36:34 PM (6 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r233924 r233937 1 2018-07-18 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 [JSC] Reduce size of AST nodes 4 https://bugs.webkit.org/show_bug.cgi?id=187689 5 6 Reviewed by Mark Lam. 7 8 We clean up AST nodes to reduce size. By doing so, we can reduce the memory consumption 9 of ParserArena at peak state. 10 11 1. Annotate `final` to AST nodes to make them solid. And it allows the compiler to 12 devirtualize a call to the function which are implemented in a final class. 13 14 2. Use default member initializers more. 15 16 3. And use `nullptr` instead of `0`. 17 18 4. Arrange the layout of AST nodes to reduce the size. It includes changing the order 19 of classes in multiple inheritance. In particular, StatementNode is decreased from 48 20 to 40. This decreases the sizes of all the derived Statement nodes. 21 22 * parser/NodeConstructors.h: 23 (JSC::Node::Node): 24 (JSC::StatementNode::StatementNode): 25 (JSC::ElementNode::ElementNode): 26 (JSC::ArrayNode::ArrayNode): 27 (JSC::PropertyListNode::PropertyListNode): 28 (JSC::ObjectLiteralNode::ObjectLiteralNode): 29 (JSC::ArgumentListNode::ArgumentListNode): 30 (JSC::ArgumentsNode::ArgumentsNode): 31 (JSC::NewExprNode::NewExprNode): 32 (JSC::BytecodeIntrinsicNode::BytecodeIntrinsicNode): 33 (JSC::BinaryOpNode::BinaryOpNode): 34 (JSC::LogicalOpNode::LogicalOpNode): 35 (JSC::CommaNode::CommaNode): 36 (JSC::SourceElements::SourceElements): 37 (JSC::ClauseListNode::ClauseListNode): 38 * parser/Nodes.cpp: 39 (JSC::FunctionMetadataNode::FunctionMetadataNode): 40 (JSC::FunctionMetadataNode::operator== const): 41 (JSC::FunctionMetadataNode::dump const): 42 * parser/Nodes.h: 43 (JSC::BooleanNode::value): Deleted. 44 (JSC::StringNode::value): Deleted. 45 (JSC::TemplateExpressionListNode::value): Deleted. 46 (JSC::TemplateExpressionListNode::next): Deleted. 47 (JSC::TemplateStringNode::cooked): Deleted. 48 (JSC::TemplateStringNode::raw): Deleted. 49 (JSC::TemplateStringListNode::value): Deleted. 50 (JSC::TemplateStringListNode::next): Deleted. 51 (JSC::TemplateLiteralNode::templateStrings const): Deleted. 52 (JSC::TemplateLiteralNode::templateExpressions const): Deleted. 53 (JSC::TaggedTemplateNode::templateLiteral const): Deleted. 54 (JSC::ResolveNode::identifier const): Deleted. 55 (JSC::ElementNode::elision const): Deleted. 56 (JSC::ElementNode::value): Deleted. 57 (JSC::ElementNode::next): Deleted. 58 (JSC::ArrayNode::elements const): Deleted. 59 (JSC::PropertyNode::expressionName const): Deleted. 60 (JSC::PropertyNode::name const): Deleted. 61 (JSC::PropertyNode::type const): Deleted. 62 (JSC::PropertyNode::needsSuperBinding const): Deleted. 63 (JSC::PropertyNode::isClassProperty const): Deleted. 64 (JSC::PropertyNode::isStaticClassProperty const): Deleted. 65 (JSC::PropertyNode::isInstanceClassProperty const): Deleted. 66 (JSC::PropertyNode::isOverriddenByDuplicate const): Deleted. 67 (JSC::PropertyNode::setIsOverriddenByDuplicate): Deleted. 68 (JSC::PropertyNode::putType const): Deleted. 69 (JSC::BracketAccessorNode::base const): Deleted. 70 (JSC::BracketAccessorNode::subscript const): Deleted. 71 (JSC::BracketAccessorNode::subscriptHasAssignments const): Deleted. 72 (JSC::DotAccessorNode::base const): Deleted. 73 (JSC::DotAccessorNode::identifier const): Deleted. 74 (JSC::SpreadExpressionNode::expression const): Deleted. 75 (JSC::ObjectSpreadExpressionNode::expression const): Deleted. 76 (JSC::BytecodeIntrinsicNode::type const): Deleted. 77 (JSC::BytecodeIntrinsicNode::emitter const): Deleted. 78 (JSC::BytecodeIntrinsicNode::identifier const): Deleted. 79 (JSC::TypeOfResolveNode::identifier const): Deleted. 80 (JSC::BitwiseNotNode::expr): Deleted. 81 (JSC::BitwiseNotNode::expr const): Deleted. 82 (JSC::AssignResolveNode::identifier const): Deleted. 83 (JSC::ExprStatementNode::expr const): Deleted. 84 (JSC::ForOfNode::isForAwait const): Deleted. 85 (JSC::ReturnNode::value): Deleted. 86 (JSC::ProgramNode::startColumn const): Deleted. 87 (JSC::ProgramNode::endColumn const): Deleted. 88 (JSC::EvalNode::startColumn const): Deleted. 89 (JSC::EvalNode::endColumn const): Deleted. 90 (JSC::ModuleProgramNode::startColumn const): Deleted. 91 (JSC::ModuleProgramNode::endColumn const): Deleted. 92 (JSC::ModuleProgramNode::moduleScopeData): Deleted. 93 (JSC::ModuleNameNode::moduleName): Deleted. 94 (JSC::ImportSpecifierNode::importedName): Deleted. 95 (JSC::ImportSpecifierNode::localName): Deleted. 96 (JSC::ImportSpecifierListNode::specifiers const): Deleted. 97 (JSC::ImportSpecifierListNode::append): Deleted. 98 (JSC::ImportDeclarationNode::specifierList const): Deleted. 99 (JSC::ImportDeclarationNode::moduleName const): Deleted. 100 (JSC::ExportAllDeclarationNode::moduleName const): Deleted. 101 (JSC::ExportDefaultDeclarationNode::declaration const): Deleted. 102 (JSC::ExportDefaultDeclarationNode::localName const): Deleted. 103 (JSC::ExportLocalDeclarationNode::declaration const): Deleted. 104 (JSC::ExportSpecifierNode::exportedName): Deleted. 105 (JSC::ExportSpecifierNode::localName): Deleted. 106 (JSC::ExportSpecifierListNode::specifiers const): Deleted. 107 (JSC::ExportSpecifierListNode::append): Deleted. 108 (JSC::ExportNamedDeclarationNode::specifierList const): Deleted. 109 (JSC::ExportNamedDeclarationNode::moduleName const): Deleted. 110 (JSC::ArrayPatternNode::appendIndex): Deleted. 111 (JSC::ObjectPatternNode::appendEntry): Deleted. 112 (JSC::ObjectPatternNode::setContainsRestElement): Deleted. 113 (JSC::ObjectPatternNode::setContainsComputedProperty): Deleted. 114 (JSC::DestructuringAssignmentNode::bindings): Deleted. 115 (JSC::FunctionParameters::size const): Deleted. 116 (JSC::FunctionParameters::append): Deleted. 117 (JSC::FunctionParameters::isSimpleParameterList const): Deleted. 118 (JSC::FuncDeclNode::metadata): Deleted. 119 (JSC::CaseClauseNode::expr const): Deleted. 120 (JSC::CaseClauseNode::setStartOffset): Deleted. 121 (JSC::ClauseListNode::getClause const): Deleted. 122 (JSC::ClauseListNode::getNext const): Deleted. 123 * runtime/ExceptionHelpers.cpp: 124 * runtime/JSObject.cpp: 125 1 126 2018-07-18 Yusuke Suzuki <utatane.tea@gmail.com> 2 127 -
trunk/Source/JavaScriptCore/parser/NodeConstructors.h
r232232 r233937 44 44 inline Node::Node(const JSTokenLocation& location) 45 45 : m_position(location.line, location.startOffset, location.lineStartOffset) 46 , m_endOffset(-1)47 46 { 48 47 ASSERT(location.startOffset >= location.lineStartOffset); … … 57 56 inline StatementNode::StatementNode(const JSTokenLocation& location) 58 57 : Node(location) 59 , m_next(nullptr)60 , m_lastLine(-1)61 58 { 62 59 } … … 214 211 215 212 inline ElementNode::ElementNode(int elision, ExpressionNode* node) 216 : m_n ext(0)213 : m_node(node) 217 214 , m_elision(elision) 218 , m_node(node)219 215 { 220 216 } 221 217 222 218 inline ElementNode::ElementNode(ElementNode* l, int elision, ExpressionNode* node) 223 : m_n ext(0)219 : m_node(node) 224 220 , m_elision(elision) 225 , m_node(node)226 221 { 227 222 l->m_next = this; … … 230 225 inline ArrayNode::ArrayNode(const JSTokenLocation& location, int elision) 231 226 : ExpressionNode(location) 232 , m_element( 0)227 , m_element(nullptr) 233 228 , m_elision(elision) 234 229 , m_optional(true) … … 289 284 : ExpressionNode(location) 290 285 , m_node(node) 291 , m_next(0)292 286 { 293 287 } … … 296 290 : ExpressionNode(location) 297 291 , m_node(node) 298 , m_next(0)299 292 { 300 293 list->m_next = this; … … 303 296 inline ObjectLiteralNode::ObjectLiteralNode(const JSTokenLocation& location) 304 297 : ExpressionNode(location) 305 , m_list( 0)298 , m_list(nullptr) 306 299 { 307 300 } … … 343 336 inline ArgumentListNode::ArgumentListNode(const JSTokenLocation& location, ExpressionNode* expr) 344 337 : ExpressionNode(location) 345 , m_next(0)346 338 , m_expr(expr) 347 339 { … … 350 342 inline ArgumentListNode::ArgumentListNode(const JSTokenLocation& location, ArgumentListNode* listNode, ExpressionNode* expr) 351 343 : ExpressionNode(location) 352 , m_next(0)353 344 , m_expr(expr) 354 345 { … … 357 348 358 349 inline ArgumentsNode::ArgumentsNode() 359 : m_listNode( 0)350 : m_listNode(nullptr) 360 351 { 361 352 } … … 369 360 : ExpressionNode(location) 370 361 , m_expr(expr) 371 , m_args( 0)362 , m_args(nullptr) 372 363 { 373 364 } … … 426 417 : ExpressionNode(location) 427 418 , ThrowableExpressionData(divot, divotStart, divotEnd) 419 , m_emitter(emitter) 420 , m_ident(ident) 421 , m_args(args) 428 422 , m_type(type) 429 , m_emitter(emitter)430 , m_ident(ident)431 , m_args(args)432 423 { 433 424 } … … 535 526 inline BinaryOpNode::BinaryOpNode(const JSTokenLocation& location, ExpressionNode* expr1, ExpressionNode* expr2, OpcodeID opcodeID, bool rightHasAssignments) 536 527 : ExpressionNode(location) 528 , m_rightHasAssignments(rightHasAssignments) 529 , m_opcodeID(opcodeID) 537 530 , m_expr1(expr1) 538 531 , m_expr2(expr2) 539 , m_opcodeID(opcodeID)540 , m_rightHasAssignments(rightHasAssignments)541 532 { 542 533 } … … 544 535 inline BinaryOpNode::BinaryOpNode(const JSTokenLocation& location, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, OpcodeID opcodeID, bool rightHasAssignments) 545 536 : ExpressionNode(location, type) 537 , m_rightHasAssignments(rightHasAssignments) 538 , m_opcodeID(opcodeID) 546 539 , m_expr1(expr1) 547 540 , m_expr2(expr2) 548 , m_opcodeID(opcodeID)549 , m_rightHasAssignments(rightHasAssignments)550 541 { 551 542 } … … 674 665 inline LogicalOpNode::LogicalOpNode(const JSTokenLocation& location, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator oper) 675 666 : ExpressionNode(location, ResultType::forLogicalOp(expr1->resultDescriptor(), expr2->resultDescriptor())) 667 , m_operator(oper) 676 668 , m_expr1(expr1) 677 669 , m_expr2(expr2) 678 , m_operator(oper)679 670 { 680 671 } … … 760 751 : ExpressionNode(location) 761 752 , m_expr(expr) 762 , m_next(nullptr)763 753 { 764 754 } 765 755 766 756 inline SourceElements::SourceElements() 767 : m_head(nullptr)768 , m_tail(nullptr)769 757 { 770 758 } … … 1023 1011 inline ClauseListNode::ClauseListNode(CaseClauseNode* clause) 1024 1012 : m_clause(clause) 1025 , m_next(0)1026 1013 { 1027 1014 } … … 1029 1016 inline ClauseListNode::ClauseListNode(ClauseListNode* clauseList, CaseClauseNode* clause) 1030 1017 : m_clause(clause) 1031 , m_next(0)1032 1018 { 1033 1019 clauseList->m_next = this; -
trunk/Source/JavaScriptCore/parser/Nodes.cpp
r233377 r233937 198 198 ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression) 199 199 : Node(endLocation) 200 , m_isInStrictContext(isInStrictContext) 201 , m_superBinding(static_cast<unsigned>(superBinding)) 202 , m_constructorKind(static_cast<unsigned>(constructorKind)) 203 , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression) 204 , m_parseMode(mode) 200 205 , m_startColumn(startColumn) 201 206 , m_endColumn(endColumn) … … 205 210 , m_startStartOffset(startLocation.startOffset) 206 211 , m_parameterCount(parameterCount) 207 , m_parseMode(mode)208 , m_isInStrictContext(isInStrictContext)209 , m_superBinding(static_cast<unsigned>(superBinding))210 , m_constructorKind(static_cast<unsigned>(constructorKind))211 , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)212 212 { 213 213 ASSERT(m_superBinding == static_cast<unsigned>(superBinding)); … … 221 221 ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression) 222 222 : Node(endLocation) 223 , m_isInStrictContext(isInStrictContext) 224 , m_superBinding(static_cast<unsigned>(superBinding)) 225 , m_constructorKind(static_cast<unsigned>(constructorKind)) 226 , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression) 227 , m_parseMode(mode) 223 228 , m_startColumn(startColumn) 224 229 , m_endColumn(endColumn) … … 228 233 , m_startStartOffset(startLocation.startOffset) 229 234 , m_parameterCount(parameterCount) 230 , m_parseMode(mode)231 , m_isInStrictContext(isInStrictContext)232 , m_superBinding(static_cast<unsigned>(superBinding))233 , m_constructorKind(static_cast<unsigned>(constructorKind))234 , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)235 235 { 236 236 ASSERT(m_superBinding == static_cast<unsigned>(superBinding)); … … 253 253 bool FunctionMetadataNode::operator==(const FunctionMetadataNode& other) const 254 254 { 255 return m_ident == other.m_ident 255 return m_parseMode== other.m_parseMode 256 && m_isInStrictContext == other.m_isInStrictContext 257 && m_superBinding == other.m_superBinding 258 && m_constructorKind == other.m_constructorKind 259 && m_isArrowFunctionBodyExpression == other.m_isArrowFunctionBodyExpression 260 && m_ident == other.m_ident 256 261 && m_ecmaName == other.m_ecmaName 257 262 && m_inferredName == other.m_inferredName … … 267 272 && m_parameterCount== other.m_parameterCount 268 273 && m_lastLine== other.m_lastLine 269 && m_parseMode== other.m_parseMode270 && m_isInStrictContext == other.m_isInStrictContext271 && m_superBinding == other.m_superBinding272 && m_constructorKind == other.m_constructorKind273 && m_isArrowFunctionBodyExpression == other.m_isArrowFunctionBodyExpression274 274 && m_position == other.m_position; 275 275 } … … 277 277 void FunctionMetadataNode::dump(PrintStream& stream) const 278 278 { 279 stream.println("m_parseMode ", static_cast<uint32_t>(m_parseMode)); 280 stream.println("m_isInStrictContext ", m_isInStrictContext); 281 stream.println("m_superBinding ", m_superBinding); 282 stream.println("m_constructorKind ", m_constructorKind); 283 stream.println("m_isArrowFunctionBodyExpression ", m_isArrowFunctionBodyExpression); 279 284 stream.println("m_ident ", m_ident); 280 285 stream.println("m_ecmaName ", m_ecmaName); … … 290 295 stream.println("m_parameterCount ", m_parameterCount); 291 296 stream.println("m_lastLine ", m_lastLine); 292 stream.println("m_parseMode ", static_cast<uint32_t>(m_parseMode));293 stream.println("m_isInStrictContext ", m_isInStrictContext);294 stream.println("m_superBinding ", m_superBinding);295 stream.println("m_constructorKind ", m_constructorKind);296 stream.println("m_isArrowFunctionBodyExpression ", m_isArrowFunctionBodyExpression);297 297 stream.println("position().line ", position().line); 298 298 stream.println("position().offset ", position().offset); -
trunk/Source/JavaScriptCore/parser/Nodes.h
r233377 r233937 56 56 typedef SmallPtrSet<UniquedStringImpl*> UniquedStringImplPtrSet; 57 57 58 enum Operator {58 enum Operator : uint8_t { 59 59 OpEqual, 60 60 OpPlusEq, … … 74 74 }; 75 75 76 enum LogicalOperator {76 enum LogicalOperator : uint8_t { 77 77 OpLogicalAnd, 78 78 OpLogicalOr 79 79 }; 80 80 81 enum FallThroughMode {81 enum FallThroughMode : uint8_t { 82 82 FallThroughMeansTrue = 0, 83 83 FallThroughMeansFalse = 1 … … 90 90 91 91 struct SwitchInfo { 92 enum SwitchType { SwitchNone, SwitchImmediate, SwitchCharacter, SwitchString };92 enum SwitchType : uint8_t { SwitchNone, SwitchImmediate, SwitchCharacter, SwitchString }; 93 93 uint32_t bytecodeOffset; 94 94 SwitchType switchType; 95 95 }; 96 96 97 enum class AssignmentContext {97 enum class AssignmentContext : uint8_t { 98 98 DeclarationStatement, 99 99 ConstDeclarationStatement, … … 162 162 protected: 163 163 JSTextPosition m_position; 164 int m_endOffset ;164 int m_endOffset { -1 }; 165 165 bool m_needsDebugHook { false }; 166 166 }; … … 246 246 247 247 protected: 248 StatementNode* m_next;249 int m_lastLine;248 int m_lastLine { -1 }; 249 StatementNode* m_next { nullptr }; 250 250 }; 251 251 … … 281 281 }; 282 282 283 class NullNode : public ConstantNode {283 class NullNode final : public ConstantNode { 284 284 public: 285 285 NullNode(const JSTokenLocation&); … … 290 290 }; 291 291 292 class BooleanNode : public ConstantNode {292 class BooleanNode final : public ConstantNode { 293 293 public: 294 294 BooleanNode(const JSTokenLocation&, bool value); … … 325 325 326 326 // An integer node represent a number represented as an integer (e.g. 42 instead of 42., 42.0, 42e0) 327 class IntegerNode : public DoubleNode {327 class IntegerNode final : public DoubleNode { 328 328 public: 329 329 IntegerNode(const JSTokenLocation&, double value); … … 331 331 }; 332 332 333 class StringNode : public ConstantNode {333 class StringNode final : public ConstantNode { 334 334 public: 335 335 StringNode(const JSTokenLocation&, const Identifier&); … … 514 514 }; 515 515 516 class TemplateExpressionListNode : public ParserArenaFreeable {516 class TemplateExpressionListNode final : public ParserArenaFreeable { 517 517 public: 518 518 TemplateExpressionListNode(ExpressionNode*); … … 527 527 }; 528 528 529 class TemplateStringNode : public ExpressionNode {529 class TemplateStringNode final : public ExpressionNode { 530 530 public: 531 531 TemplateStringNode(const JSTokenLocation&, const Identifier* cooked, const Identifier* raw); … … 541 541 }; 542 542 543 class TemplateStringListNode : public ParserArenaFreeable {543 class TemplateStringListNode final : public ParserArenaFreeable { 544 544 public: 545 545 TemplateStringListNode(TemplateStringNode*); … … 554 554 }; 555 555 556 class TemplateLiteralNode : public ExpressionNode {556 class TemplateLiteralNode final : public ExpressionNode { 557 557 public: 558 558 TemplateLiteralNode(const JSTokenLocation&, TemplateStringListNode*); … … 569 569 }; 570 570 571 class TaggedTemplateNode : public ExpressionNode, public ThrowableExpressionData {571 class TaggedTemplateNode final : public ExpressionNode, public ThrowableExpressionData { 572 572 public: 573 573 TaggedTemplateNode(const JSTokenLocation&, ExpressionNode*, TemplateLiteralNode*); … … 582 582 }; 583 583 584 class RegExpNode : public ExpressionNode, public ThrowableExpressionData {584 class RegExpNode final : public ExpressionNode, public ThrowableExpressionData { 585 585 public: 586 586 RegExpNode(const JSTokenLocation&, const Identifier& pattern, const Identifier& flags); … … 593 593 }; 594 594 595 class ThisNode : public ExpressionNode {595 class ThisNode final : public ExpressionNode { 596 596 public: 597 597 ThisNode(const JSTokenLocation&); … … 610 610 }; 611 611 612 class ImportNode : public ExpressionNode, public ThrowableExpressionData {612 class ImportNode final : public ExpressionNode, public ThrowableExpressionData { 613 613 public: 614 614 ImportNode(const JSTokenLocation&, ExpressionNode*); … … 649 649 }; 650 650 651 class ResolveNode : public ExpressionNode {651 class ResolveNode final : public ExpressionNode { 652 652 public: 653 653 ResolveNode(const JSTokenLocation&, const Identifier&, const JSTextPosition& start); … … 666 666 }; 667 667 668 class ElementNode : public ParserArenaFreeable {668 class ElementNode final : public ParserArenaFreeable { 669 669 public: 670 670 ElementNode(int elision, ExpressionNode*); … … 676 676 677 677 private: 678 ElementNode* m_next; 678 ElementNode* m_next { nullptr }; 679 ExpressionNode* m_node; 679 680 int m_elision; 680 ExpressionNode* m_node; 681 }; 682 683 class ArrayNode : public ExpressionNode { 681 }; 682 683 class ArrayNode final : public ExpressionNode { 684 684 public: 685 685 ArrayNode(const JSTokenLocation&, int elision); … … 702 702 }; 703 703 704 enum class ClassElementTag { No, Instance, Static, LastTag };705 class PropertyNode : public ParserArenaFreeable {706 public: 707 enum Type { Constant = 1, Getter = 2, Setter = 4, Computed = 8, Shorthand = 16, Spread = 32 };708 enum PutType { Unknown, KnownDirect };704 enum class ClassElementTag : uint8_t { No, Instance, Static, LastTag }; 705 class PropertyNode final : public ParserArenaFreeable { 706 public: 707 enum Type : uint8_t { Constant = 1, Getter = 2, Setter = 4, Computed = 8, Shorthand = 16, Spread = 32 }; 708 enum PutType : uint8_t { Unknown, KnownDirect }; 709 709 710 710 PropertyNode(const Identifier&, ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag); … … 737 737 }; 738 738 739 class PropertyListNode : public ExpressionNode {739 class PropertyListNode final : public ExpressionNode { 740 740 public: 741 741 PropertyListNode(const JSTokenLocation&, PropertyNode*); … … 754 754 755 755 PropertyNode* m_node; 756 PropertyListNode* m_next ;757 }; 758 759 class ObjectLiteralNode : public ExpressionNode {756 PropertyListNode* m_next { nullptr }; 757 }; 758 759 class ObjectLiteralNode final : public ExpressionNode { 760 760 public: 761 761 ObjectLiteralNode(const JSTokenLocation&); … … 769 769 }; 770 770 771 class BracketAccessorNode : public ExpressionNode, public ThrowableExpressionData {771 class BracketAccessorNode final : public ExpressionNode, public ThrowableExpressionData { 772 772 public: 773 773 BracketAccessorNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments); … … 789 789 }; 790 790 791 class DotAccessorNode : public ExpressionNode, public ThrowableExpressionData {791 class DotAccessorNode final : public ExpressionNode, public ThrowableExpressionData { 792 792 public: 793 793 DotAccessorNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&); … … 806 806 }; 807 807 808 class SpreadExpressionNode : public ExpressionNode, public ThrowableExpressionData {808 class SpreadExpressionNode final : public ExpressionNode, public ThrowableExpressionData { 809 809 public: 810 810 SpreadExpressionNode(const JSTokenLocation&, ExpressionNode*); … … 819 819 }; 820 820 821 class ObjectSpreadExpressionNode : public ExpressionNode, public ThrowableExpressionData {821 class ObjectSpreadExpressionNode final : public ExpressionNode, public ThrowableExpressionData { 822 822 public: 823 823 ObjectSpreadExpressionNode(const JSTokenLocation&, ExpressionNode*); … … 831 831 }; 832 832 833 class ArgumentListNode : public ExpressionNode {833 class ArgumentListNode final : public ExpressionNode { 834 834 public: 835 835 ArgumentListNode(const JSTokenLocation&, ExpressionNode*); 836 836 ArgumentListNode(const JSTokenLocation&, ArgumentListNode*, ExpressionNode*); 837 837 838 ArgumentListNode* m_next ;838 ArgumentListNode* m_next { nullptr }; 839 839 ExpressionNode* m_expr; 840 840 … … 843 843 }; 844 844 845 class ArgumentsNode : public ParserArenaFreeable {845 class ArgumentsNode final : public ParserArenaFreeable { 846 846 public: 847 847 ArgumentsNode(); … … 851 851 }; 852 852 853 class NewExprNode : public ExpressionNode, public ThrowableExpressionData {853 class NewExprNode final : public ExpressionNode, public ThrowableExpressionData { 854 854 public: 855 855 NewExprNode(const JSTokenLocation&, ExpressionNode*); … … 863 863 }; 864 864 865 class EvalFunctionCallNode : public ExpressionNode, public ThrowableExpressionData {865 class EvalFunctionCallNode final : public ExpressionNode, public ThrowableExpressionData { 866 866 public: 867 867 EvalFunctionCallNode(const JSTokenLocation&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 873 873 }; 874 874 875 class FunctionCallValueNode : public ExpressionNode, public ThrowableExpressionData {875 class FunctionCallValueNode final : public ExpressionNode, public ThrowableExpressionData { 876 876 public: 877 877 FunctionCallValueNode(const JSTokenLocation&, ExpressionNode*, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 884 884 }; 885 885 886 class FunctionCallResolveNode : public ExpressionNode, public ThrowableExpressionData {886 class FunctionCallResolveNode final : public ExpressionNode, public ThrowableExpressionData { 887 887 public: 888 888 FunctionCallResolveNode(const JSTokenLocation&, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 895 895 }; 896 896 897 class FunctionCallBracketNode : public ExpressionNode, public ThrowableSubExpressionData {897 class FunctionCallBracketNode final : public ExpressionNode, public ThrowableSubExpressionData { 898 898 public: 899 899 FunctionCallBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 921 921 }; 922 922 923 class BytecodeIntrinsicNode : public ExpressionNode, public ThrowableExpressionData {924 public: 925 enum class Type {923 class BytecodeIntrinsicNode final : public ExpressionNode, public ThrowableExpressionData { 924 public: 925 enum class Type : uint8_t { 926 926 Constant, 927 927 Function … … 946 946 RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override; 947 947 948 Type m_type;949 948 EmitterType m_emitter; 950 949 const Identifier& m_ident; 951 950 ArgumentsNode* m_args; 952 }; 953 954 class CallFunctionCallDotNode : public FunctionCallDotNode { 951 Type m_type; 952 }; 953 954 class CallFunctionCallDotNode final : public FunctionCallDotNode { 955 955 public: 956 956 CallFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply); … … 961 961 }; 962 962 963 class ApplyFunctionCallDotNode : public FunctionCallDotNode {963 class ApplyFunctionCallDotNode final : public FunctionCallDotNode { 964 964 public: 965 965 ApplyFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply); … … 970 970 }; 971 971 972 class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData {972 class DeleteResolveNode final : public ExpressionNode, public ThrowableExpressionData { 973 973 public: 974 974 DeleteResolveNode(const JSTokenLocation&, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 980 980 }; 981 981 982 class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData {982 class DeleteBracketNode final : public ExpressionNode, public ThrowableExpressionData { 983 983 public: 984 984 DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 991 991 }; 992 992 993 class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData {993 class DeleteDotNode final : public ExpressionNode, public ThrowableExpressionData { 994 994 public: 995 995 DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1002 1002 }; 1003 1003 1004 class DeleteValueNode : public ExpressionNode {1004 class DeleteValueNode final : public ExpressionNode { 1005 1005 public: 1006 1006 DeleteValueNode(const JSTokenLocation&, ExpressionNode*); … … 1012 1012 }; 1013 1013 1014 class VoidNode : public ExpressionNode {1014 class VoidNode final : public ExpressionNode { 1015 1015 public: 1016 1016 VoidNode(const JSTokenLocation&, ExpressionNode*); … … 1022 1022 }; 1023 1023 1024 class TypeOfResolveNode : public ExpressionNode {1024 class TypeOfResolveNode final : public ExpressionNode { 1025 1025 public: 1026 1026 TypeOfResolveNode(const JSTokenLocation&, const Identifier&); … … 1034 1034 }; 1035 1035 1036 class TypeOfValueNode : public ExpressionNode {1036 class TypeOfValueNode final : public ExpressionNode { 1037 1037 public: 1038 1038 TypeOfValueNode(const JSTokenLocation&, ExpressionNode*); … … 1058 1058 }; 1059 1059 1060 class PostfixNode : public PrefixNode {1060 class PostfixNode final : public PrefixNode { 1061 1061 public: 1062 1062 PostfixNode(const JSTokenLocation&, ExpressionNode*, Operator, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1085 1085 }; 1086 1086 1087 class UnaryPlusNode : public UnaryOpNode {1087 class UnaryPlusNode final : public UnaryOpNode { 1088 1088 public: 1089 1089 UnaryPlusNode(const JSTokenLocation&, ExpressionNode*); … … 1095 1095 }; 1096 1096 1097 class NegateNode : public UnaryOpNode {1097 class NegateNode final : public UnaryOpNode { 1098 1098 public: 1099 1099 NegateNode(const JSTokenLocation&, ExpressionNode*); 1100 1100 }; 1101 1101 1102 class BitwiseNotNode : public ExpressionNode {1102 class BitwiseNotNode final : public ExpressionNode { 1103 1103 public: 1104 1104 BitwiseNotNode(const JSTokenLocation&, ExpressionNode*); … … 1114 1114 }; 1115 1115 1116 class LogicalNotNode : public UnaryOpNode {1116 class LogicalNotNode final : public UnaryOpNode { 1117 1117 public: 1118 1118 LogicalNotNode(const JSTokenLocation&, ExpressionNode*); … … 1135 1135 1136 1136 private: 1137 enum class UInt32Result { UInt32, Constant, };1137 enum class UInt32Result : uint8_t { UInt32, Constant, }; 1138 1138 1139 1139 void tryFoldToBranch(BytecodeGenerator&, TriState& branchCondition, ExpressionNode*& branchExpression); … … 1143 1143 OpcodeID opcodeID() const { return m_opcodeID; } 1144 1144 1145 protected: 1146 bool m_rightHasAssignments; 1147 bool m_shouldToUnsignedResult { true }; 1148 private: 1149 OpcodeID m_opcodeID; 1145 1150 protected: 1146 1151 ExpressionNode* m_expr1; 1147 1152 ExpressionNode* m_expr2; 1148 private: 1149 OpcodeID m_opcodeID; 1150 protected: 1151 bool m_rightHasAssignments; 1152 bool m_shouldToUnsignedResult { true }; 1153 }; 1154 1155 class PowNode : public BinaryOpNode { 1153 }; 1154 1155 class PowNode final : public BinaryOpNode { 1156 1156 public: 1157 1157 PowNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1158 1158 }; 1159 1159 1160 class MultNode : public BinaryOpNode {1160 class MultNode final : public BinaryOpNode { 1161 1161 public: 1162 1162 MultNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1163 1163 }; 1164 1164 1165 class DivNode : public BinaryOpNode {1165 class DivNode final : public BinaryOpNode { 1166 1166 public: 1167 1167 DivNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1168 1168 }; 1169 1169 1170 class ModNode : public BinaryOpNode {1170 class ModNode final : public BinaryOpNode { 1171 1171 public: 1172 1172 ModNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1173 1173 }; 1174 1174 1175 class AddNode : public BinaryOpNode {1175 class AddNode final : public BinaryOpNode { 1176 1176 public: 1177 1177 AddNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1180 1180 }; 1181 1181 1182 class SubNode : public BinaryOpNode {1182 class SubNode final : public BinaryOpNode { 1183 1183 public: 1184 1184 SubNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1187 1187 }; 1188 1188 1189 class LeftShiftNode : public BinaryOpNode {1189 class LeftShiftNode final : public BinaryOpNode { 1190 1190 public: 1191 1191 LeftShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1192 1192 }; 1193 1193 1194 class RightShiftNode : public BinaryOpNode {1194 class RightShiftNode final : public BinaryOpNode { 1195 1195 public: 1196 1196 RightShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1197 1197 }; 1198 1198 1199 class UnsignedRightShiftNode : public BinaryOpNode {1199 class UnsignedRightShiftNode final : public BinaryOpNode { 1200 1200 public: 1201 1201 UnsignedRightShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1202 1202 }; 1203 1203 1204 class LessNode : public BinaryOpNode {1204 class LessNode final : public BinaryOpNode { 1205 1205 public: 1206 1206 LessNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1207 1207 }; 1208 1208 1209 class GreaterNode : public BinaryOpNode {1209 class GreaterNode final : public BinaryOpNode { 1210 1210 public: 1211 1211 GreaterNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1212 1212 }; 1213 1213 1214 class LessEqNode : public BinaryOpNode {1214 class LessEqNode final : public BinaryOpNode { 1215 1215 public: 1216 1216 LessEqNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1217 1217 }; 1218 1218 1219 class GreaterEqNode : public BinaryOpNode {1219 class GreaterEqNode final : public BinaryOpNode { 1220 1220 public: 1221 1221 GreaterEqNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1231 1231 }; 1232 1232 1233 class InstanceOfNode : public ThrowableBinaryOpNode {1233 class InstanceOfNode final : public ThrowableBinaryOpNode { 1234 1234 public: 1235 1235 InstanceOfNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1239 1239 }; 1240 1240 1241 class InNode : public ThrowableBinaryOpNode {1241 class InNode final : public ThrowableBinaryOpNode { 1242 1242 public: 1243 1243 InNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1247 1247 }; 1248 1248 1249 class EqualNode : public BinaryOpNode {1249 class EqualNode final : public BinaryOpNode { 1250 1250 public: 1251 1251 EqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1255 1255 }; 1256 1256 1257 class NotEqualNode : public BinaryOpNode {1257 class NotEqualNode final : public BinaryOpNode { 1258 1258 public: 1259 1259 NotEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1260 1260 }; 1261 1261 1262 class StrictEqualNode : public BinaryOpNode {1262 class StrictEqualNode final : public BinaryOpNode { 1263 1263 public: 1264 1264 StrictEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1268 1268 }; 1269 1269 1270 class NotStrictEqualNode : public BinaryOpNode {1270 class NotStrictEqualNode final : public BinaryOpNode { 1271 1271 public: 1272 1272 NotStrictEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1273 1273 }; 1274 1274 1275 class BitAndNode : public BinaryOpNode {1275 class BitAndNode final : public BinaryOpNode { 1276 1276 public: 1277 1277 BitAndNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1278 1278 }; 1279 1279 1280 class BitOrNode : public BinaryOpNode {1280 class BitOrNode final : public BinaryOpNode { 1281 1281 public: 1282 1282 BitOrNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); 1283 1283 }; 1284 1284 1285 class BitXOrNode : public BinaryOpNode {1285 class BitXOrNode final : public BinaryOpNode { 1286 1286 public: 1287 1287 BitXOrNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments); … … 1289 1289 1290 1290 // m_expr1 && m_expr2, m_expr1 || m_expr2 1291 class LogicalOpNode : public ExpressionNode {1291 class LogicalOpNode final : public ExpressionNode { 1292 1292 public: 1293 1293 LogicalOpNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator); … … 1297 1297 void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) override; 1298 1298 1299 LogicalOperator m_operator; 1299 1300 ExpressionNode* m_expr1; 1300 1301 ExpressionNode* m_expr2; 1301 LogicalOperator m_operator;1302 1302 }; 1303 1303 1304 1304 // The ternary operator, "m_logical ? m_expr1 : m_expr2" 1305 class ConditionalNode : public ExpressionNode {1305 class ConditionalNode final : public ExpressionNode { 1306 1306 public: 1307 1307 ConditionalNode(const JSTokenLocation&, ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2); … … 1315 1315 }; 1316 1316 1317 class ReadModifyResolveNode : public ExpressionNode, public ThrowableExpressionData {1317 class ReadModifyResolveNode final : public ExpressionNode, public ThrowableExpressionData { 1318 1318 public: 1319 1319 ReadModifyResolveNode(const JSTokenLocation&, const Identifier&, Operator, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1328 1328 }; 1329 1329 1330 class AssignResolveNode : public ExpressionNode, public ThrowableExpressionData {1330 class AssignResolveNode final : public ExpressionNode, public ThrowableExpressionData { 1331 1331 public: 1332 1332 AssignResolveNode(const JSTokenLocation&, const Identifier&, ExpressionNode* right, AssignmentContext); … … 1342 1342 }; 1343 1343 1344 class ReadModifyBracketNode : public ExpressionNode, public ThrowableSubExpressionData {1344 class ReadModifyBracketNode final : public ExpressionNode, public ThrowableSubExpressionData { 1345 1345 public: 1346 1346 ReadModifyBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1357 1357 }; 1358 1358 1359 class AssignBracketNode : public ExpressionNode, public ThrowableExpressionData {1359 class AssignBracketNode final : public ExpressionNode, public ThrowableExpressionData { 1360 1360 public: 1361 1361 AssignBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1371 1371 }; 1372 1372 1373 class AssignDotNode : public ExpressionNode, public ThrowableExpressionData {1373 class AssignDotNode final : public ExpressionNode, public ThrowableExpressionData { 1374 1374 public: 1375 1375 AssignDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1384 1384 }; 1385 1385 1386 class ReadModifyDotNode : public ExpressionNode, public ThrowableSubExpressionData {1386 class ReadModifyDotNode final : public ExpressionNode, public ThrowableSubExpressionData { 1387 1387 public: 1388 1388 ReadModifyDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1398 1398 }; 1399 1399 1400 class AssignErrorNode : public ExpressionNode, public ThrowableExpressionData {1400 class AssignErrorNode final : public ExpressionNode, public ThrowableExpressionData { 1401 1401 public: 1402 1402 AssignErrorNode(const JSTokenLocation&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd); … … 1418 1418 1419 1419 ExpressionNode* m_expr; 1420 CommaNode* m_next ;1420 CommaNode* m_next { nullptr }; 1421 1421 }; 1422 1422 … … 1437 1437 1438 1438 private: 1439 StatementNode* m_head ;1440 StatementNode* m_tail ;1441 }; 1442 1443 class BlockNode : public StatementNode, public VariableEnvironmentNode {1439 StatementNode* m_head { nullptr }; 1440 StatementNode* m_tail { nullptr }; 1441 }; 1442 1443 class BlockNode final : public StatementNode, public VariableEnvironmentNode { 1444 1444 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(BlockNode); 1445 1445 public: … … 1460 1460 }; 1461 1461 1462 class EmptyStatementNode : public StatementNode {1462 class EmptyStatementNode final : public StatementNode { 1463 1463 public: 1464 1464 EmptyStatementNode(const JSTokenLocation&); … … 1471 1471 }; 1472 1472 1473 class DebuggerStatementNode : public StatementNode {1473 class DebuggerStatementNode final : public StatementNode { 1474 1474 public: 1475 1475 DebuggerStatementNode(const JSTokenLocation&); … … 1482 1482 }; 1483 1483 1484 class ExprStatementNode : public StatementNode {1484 class ExprStatementNode final : public StatementNode { 1485 1485 public: 1486 1486 ExprStatementNode(const JSTokenLocation&, ExpressionNode*); … … 1496 1496 }; 1497 1497 1498 class DeclarationStatement : public StatementNode {1498 class DeclarationStatement final : public StatementNode { 1499 1499 public: 1500 1500 DeclarationStatement(const JSTokenLocation&, ExpressionNode*); … … 1507 1507 }; 1508 1508 1509 class EmptyVarExpression : public ExpressionNode {1509 class EmptyVarExpression final : public ExpressionNode { 1510 1510 public: 1511 1511 EmptyVarExpression(const JSTokenLocation&, const Identifier&); … … 1517 1517 }; 1518 1518 1519 class EmptyLetExpression : public ExpressionNode {1519 class EmptyLetExpression final : public ExpressionNode { 1520 1520 public: 1521 1521 EmptyLetExpression(const JSTokenLocation&, const Identifier&); … … 1527 1527 }; 1528 1528 1529 class IfElseNode : public StatementNode {1529 class IfElseNode final : public StatementNode { 1530 1530 public: 1531 1531 IfElseNode(const JSTokenLocation&, ExpressionNode* condition, StatementNode* ifBlock, StatementNode* elseBlock); … … 1541 1541 }; 1542 1542 1543 class DoWhileNode : public StatementNode {1543 class DoWhileNode final : public StatementNode { 1544 1544 public: 1545 1545 DoWhileNode(const JSTokenLocation&, StatementNode*, ExpressionNode*); … … 1552 1552 }; 1553 1553 1554 class WhileNode : public StatementNode {1554 class WhileNode final : public StatementNode { 1555 1555 public: 1556 1556 WhileNode(const JSTokenLocation&, ExpressionNode*, StatementNode*); … … 1563 1563 }; 1564 1564 1565 class ForNode : public StatementNode, public VariableEnvironmentNode {1565 class ForNode final : public StatementNode, public VariableEnvironmentNode { 1566 1566 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForNode); 1567 1567 public: … … 1593 1593 }; 1594 1594 1595 class ForInNode : public EnumerationNode {1595 class ForInNode final : public EnumerationNode { 1596 1596 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForInNode); 1597 1597 public: … … 1605 1605 }; 1606 1606 1607 class ForOfNode : public EnumerationNode {1607 class ForOfNode final : public EnumerationNode { 1608 1608 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForOfNode); 1609 1609 public: … … 1618 1618 }; 1619 1619 1620 class ContinueNode : public StatementNode, public ThrowableExpressionData {1620 class ContinueNode final : public StatementNode, public ThrowableExpressionData { 1621 1621 public: 1622 1622 ContinueNode(const JSTokenLocation&, const Identifier&); … … 1631 1631 }; 1632 1632 1633 class BreakNode : public StatementNode, public ThrowableExpressionData {1633 class BreakNode final : public StatementNode, public ThrowableExpressionData { 1634 1634 public: 1635 1635 BreakNode(const JSTokenLocation&, const Identifier&); … … 1644 1644 }; 1645 1645 1646 class ReturnNode : public StatementNode, public ThrowableExpressionData {1646 class ReturnNode final : public StatementNode, public ThrowableExpressionData { 1647 1647 public: 1648 1648 ReturnNode(const JSTokenLocation&, ExpressionNode* value); … … 1658 1658 }; 1659 1659 1660 class WithNode : public StatementNode {1660 class WithNode final : public StatementNode { 1661 1661 public: 1662 1662 WithNode(const JSTokenLocation&, ExpressionNode*, StatementNode*, const JSTextPosition& divot, uint32_t expressionLength); … … 1671 1671 }; 1672 1672 1673 class LabelNode : public StatementNode, public ThrowableExpressionData {1673 class LabelNode final : public StatementNode, public ThrowableExpressionData { 1674 1674 public: 1675 1675 LabelNode(const JSTokenLocation&, const Identifier& name, StatementNode*); … … 1685 1685 }; 1686 1686 1687 class ThrowNode : public StatementNode, public ThrowableExpressionData {1687 class ThrowNode final : public StatementNode, public ThrowableExpressionData { 1688 1688 public: 1689 1689 ThrowNode(const JSTokenLocation&, ExpressionNode*); … … 1695 1695 }; 1696 1696 1697 class TryNode : public StatementNode, public VariableEnvironmentNode {1697 class TryNode final : public StatementNode, public VariableEnvironmentNode { 1698 1698 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(TryNode); 1699 1699 public: … … 1787 1787 }; 1788 1788 1789 class ProgramNode : public ScopeNode {1789 class ProgramNode final : public ScopeNode { 1790 1790 public: 1791 1791 ProgramNode(ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&, FunctionStack&&, VariableEnvironment&, UniquedStringImplPtrSet&&, FunctionParameters*, const SourceCode&, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr<ModuleScopeData>&&); … … 1802 1802 }; 1803 1803 1804 class EvalNode : public ScopeNode {1804 class EvalNode final : public ScopeNode { 1805 1805 public: 1806 1806 EvalNode(ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&, FunctionStack&&, VariableEnvironment&, UniquedStringImplPtrSet&&, FunctionParameters*, const SourceCode&, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr<ModuleScopeData>&&); … … 1817 1817 }; 1818 1818 1819 class ModuleProgramNode : public ScopeNode {1819 class ModuleProgramNode final : public ScopeNode { 1820 1820 public: 1821 1821 ModuleProgramNode(ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, SourceElements*, VariableEnvironment&, FunctionStack&&, VariableEnvironment&, UniquedStringImplPtrSet&&, FunctionParameters*, const SourceCode&, CodeFeatures, InnerArrowFunctionCodeFeatures, int numConstants, RefPtr<ModuleScopeData>&&); … … 1838 1838 }; 1839 1839 1840 class ModuleNameNode : public Node {1840 class ModuleNameNode final : public Node { 1841 1841 public: 1842 1842 ModuleNameNode(const JSTokenLocation&, const Identifier& moduleName); … … 1848 1848 }; 1849 1849 1850 class ImportSpecifierNode : public Node {1850 class ImportSpecifierNode final : public Node { 1851 1851 public: 1852 1852 ImportSpecifierNode(const JSTokenLocation&, const Identifier& importedName, const Identifier& localName); … … 1860 1860 }; 1861 1861 1862 class ImportSpecifierListNode : public ParserArenaDeletable {1862 class ImportSpecifierListNode final : public ParserArenaDeletable { 1863 1863 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ImportSpecifierListNode); 1864 1864 public: … … 1885 1885 }; 1886 1886 1887 class ImportDeclarationNode : public ModuleDeclarationNode {1887 class ImportDeclarationNode final : public ModuleDeclarationNode { 1888 1888 public: 1889 1889 ImportDeclarationNode(const JSTokenLocation&, ImportSpecifierListNode*, ModuleNameNode*); … … 1900 1900 }; 1901 1901 1902 class ExportAllDeclarationNode : public ModuleDeclarationNode {1902 class ExportAllDeclarationNode final : public ModuleDeclarationNode { 1903 1903 public: 1904 1904 ExportAllDeclarationNode(const JSTokenLocation&, ModuleNameNode*); … … 1913 1913 }; 1914 1914 1915 class ExportDefaultDeclarationNode : public ModuleDeclarationNode {1915 class ExportDefaultDeclarationNode final : public ModuleDeclarationNode { 1916 1916 public: 1917 1917 ExportDefaultDeclarationNode(const JSTokenLocation&, StatementNode*, const Identifier& localName); … … 1927 1927 }; 1928 1928 1929 class ExportLocalDeclarationNode : public ModuleDeclarationNode {1929 class ExportLocalDeclarationNode final : public ModuleDeclarationNode { 1930 1930 public: 1931 1931 ExportLocalDeclarationNode(const JSTokenLocation&, StatementNode*); … … 1939 1939 }; 1940 1940 1941 class ExportSpecifierNode : public Node {1941 class ExportSpecifierNode final : public Node { 1942 1942 public: 1943 1943 ExportSpecifierNode(const JSTokenLocation&, const Identifier& localName, const Identifier& exportedName); … … 1951 1951 }; 1952 1952 1953 class ExportSpecifierListNode : public ParserArenaDeletable {1953 class ExportSpecifierListNode final : public ParserArenaDeletable { 1954 1954 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ExportSpecifierListNode); 1955 1955 public: … … 1966 1966 }; 1967 1967 1968 class ExportNamedDeclarationNode : public ModuleDeclarationNode {1968 class ExportNamedDeclarationNode final : public ModuleDeclarationNode { 1969 1969 public: 1970 1970 ExportNamedDeclarationNode(const JSTokenLocation&, ExportSpecifierListNode*, ModuleNameNode*); … … 1980 1980 }; 1981 1981 1982 class FunctionMetadataNode final : public Node, public ParserArenaDeletable {1982 class FunctionMetadataNode final : public ParserArenaDeletable, public Node { 1983 1983 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(FunctionMetadataNode); 1984 1984 public: … … 2044 2044 2045 2045 public: 2046 unsigned m_isInStrictContext : 1; 2047 unsigned m_superBinding : 1; 2048 unsigned m_constructorKind : 2; 2049 unsigned m_isArrowFunctionBodyExpression : 1; 2050 SourceParseMode m_parseMode; 2046 2051 Identifier m_ident; 2047 2052 Identifier m_ecmaName; … … 2058 2063 unsigned m_parameterCount; 2059 2064 int m_lastLine; 2060 SourceParseMode m_parseMode;2061 unsigned m_isInStrictContext : 1;2062 unsigned m_superBinding : 1;2063 unsigned m_constructorKind : 2;2064 unsigned m_isArrowFunctionBodyExpression : 1;2065 2065 }; 2066 2066 … … 2120 2120 }; 2121 2121 2122 class ArrowFuncExprNode : public BaseFuncExprNode {2122 class ArrowFuncExprNode final : public BaseFuncExprNode { 2123 2123 public: 2124 2124 ArrowFuncExprNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&); … … 2130 2130 }; 2131 2131 2132 class MethodDefinitionNode : public FuncExprNode {2132 class MethodDefinitionNode final : public FuncExprNode { 2133 2133 public: 2134 2134 MethodDefinitionNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&); … … 2206 2206 }; 2207 2207 2208 class ArrayPatternNode : public DestructuringPatternNode, public ThrowableExpressionData, public ParserArenaDeletable{2208 class ArrayPatternNode final : public DestructuringPatternNode, public ParserArenaDeletable, public ThrowableExpressionData { 2209 2209 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ArrayPatternNode); 2210 2210 public: 2211 2211 ArrayPatternNode(); 2212 enum class BindingType {2212 enum class BindingType : uint8_t { 2213 2213 Elision, 2214 2214 Element, … … 2235 2235 }; 2236 2236 2237 class ObjectPatternNode : public DestructuringPatternNode, public ThrowableExpressionData, public ParserArenaDeletable{2237 class ObjectPatternNode final : public DestructuringPatternNode, public ParserArenaDeletable, public ThrowableExpressionData { 2238 2238 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ObjectPatternNode); 2239 2239 public: 2240 2240 ObjectPatternNode(); 2241 enum class BindingType {2241 enum class BindingType : uint8_t { 2242 2242 Element, 2243 2243 RestElement … … 2338 2338 }; 2339 2339 2340 class DestructuringAssignmentNode : public ExpressionNode {2340 class DestructuringAssignmentNode final : public ExpressionNode { 2341 2341 public: 2342 2342 DestructuringAssignmentNode(const JSTokenLocation&, DestructuringPatternNode*, ExpressionNode*); … … 2352 2352 }; 2353 2353 2354 class FunctionParameters : public ParserArenaDeletable {2354 class FunctionParameters final : public ParserArenaDeletable { 2355 2355 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(FunctionParameters); 2356 2356 public: … … 2383 2383 }; 2384 2384 2385 class FuncDeclNode : public StatementNode {2385 class FuncDeclNode final : public StatementNode { 2386 2386 public: 2387 2387 FuncDeclNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&); … … 2409 2409 }; 2410 2410 2411 class CaseClauseNode : public ParserArenaFreeable {2411 class CaseClauseNode final : public ParserArenaFreeable { 2412 2412 public: 2413 2413 CaseClauseNode(ExpressionNode*, SourceElements* = 0); … … 2424 2424 }; 2425 2425 2426 class ClauseListNode : public ParserArenaFreeable {2426 class ClauseListNode final : public ParserArenaFreeable { 2427 2427 public: 2428 2428 ClauseListNode(CaseClauseNode*); … … 2434 2434 private: 2435 2435 CaseClauseNode* m_clause; 2436 ClauseListNode* m_next ;2437 }; 2438 2439 class CaseBlockNode : public ParserArenaFreeable {2436 ClauseListNode* m_next { nullptr }; 2437 }; 2438 2439 class CaseBlockNode final : public ParserArenaFreeable { 2440 2440 public: 2441 2441 CaseBlockNode(ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2); … … 2451 2451 }; 2452 2452 2453 class SwitchNode : public StatementNode, public VariableEnvironmentNode {2453 class SwitchNode final : public StatementNode, public VariableEnvironmentNode { 2454 2454 JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(SwitchNode); 2455 2455 public: -
trunk/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp
r233122 r233937 38 38 #include "JSCInlines.h" 39 39 #include "JSGlobalObjectFunctions.h" 40 #include "Nodes.h"41 40 #include "RuntimeType.h" 42 41 #include <wtf/text/StringBuilder.h> -
trunk/Source/JavaScriptCore/runtime/JSObject.cpp
r233765 r233937 41 41 #include "Lookup.h" 42 42 #include "NativeErrorConstructor.h" 43 #include "Nodes.h"44 43 #include "ObjectPrototype.h" 45 44 #include "PropertyDescriptor.h"
Note: See TracChangeset
for help on using the changeset viewer.