Title: [233937] trunk/Source/_javascript_Core
Revision
233937
Author
[email protected]
Date
2018-07-18 15:36:34 -0700 (Wed, 18 Jul 2018)

Log Message

[JSC] Reduce size of AST nodes
https://bugs.webkit.org/show_bug.cgi?id=187689

Reviewed by Mark Lam.

We clean up AST nodes to reduce size. By doing so, we can reduce the memory consumption
of ParserArena at peak state.

1. Annotate `final` to AST nodes to make them solid. And it allows the compiler to
devirtualize a call to the function which are implemented in a final class.

2. Use default member initializers more.

3. And use `nullptr` instead of `0`.

4. Arrange the layout of AST nodes to reduce the size. It includes changing the order
of classes in multiple inheritance. In particular, StatementNode is decreased from 48
to 40. This decreases the sizes of all the derived Statement nodes.

* parser/NodeConstructors.h:
(JSC::Node::Node):
(JSC::StatementNode::StatementNode):
(JSC::ElementNode::ElementNode):
(JSC::ArrayNode::ArrayNode):
(JSC::PropertyListNode::PropertyListNode):
(JSC::ObjectLiteralNode::ObjectLiteralNode):
(JSC::ArgumentListNode::ArgumentListNode):
(JSC::ArgumentsNode::ArgumentsNode):
(JSC::NewExprNode::NewExprNode):
(JSC::BytecodeIntrinsicNode::BytecodeIntrinsicNode):
(JSC::BinaryOpNode::BinaryOpNode):
(JSC::LogicalOpNode::LogicalOpNode):
(JSC::CommaNode::CommaNode):
(JSC::SourceElements::SourceElements):
(JSC::ClauseListNode::ClauseListNode):
* parser/Nodes.cpp:
(JSC::FunctionMetadataNode::FunctionMetadataNode):
(JSC::FunctionMetadataNode::operator== const):
(JSC::FunctionMetadataNode::dump const):
* parser/Nodes.h:
(JSC::BooleanNode::value): Deleted.
(JSC::StringNode::value): Deleted.
(JSC::TemplateExpressionListNode::value): Deleted.
(JSC::TemplateExpressionListNode::next): Deleted.
(JSC::TemplateStringNode::cooked): Deleted.
(JSC::TemplateStringNode::raw): Deleted.
(JSC::TemplateStringListNode::value): Deleted.
(JSC::TemplateStringListNode::next): Deleted.
(JSC::TemplateLiteralNode::templateStrings const): Deleted.
(JSC::TemplateLiteralNode::templateExpressions const): Deleted.
(JSC::TaggedTemplateNode::templateLiteral const): Deleted.
(JSC::ResolveNode::identifier const): Deleted.
(JSC::ElementNode::elision const): Deleted.
(JSC::ElementNode::value): Deleted.
(JSC::ElementNode::next): Deleted.
(JSC::ArrayNode::elements const): Deleted.
(JSC::PropertyNode::expressionName const): Deleted.
(JSC::PropertyNode::name const): Deleted.
(JSC::PropertyNode::type const): Deleted.
(JSC::PropertyNode::needsSuperBinding const): Deleted.
(JSC::PropertyNode::isClassProperty const): Deleted.
(JSC::PropertyNode::isStaticClassProperty const): Deleted.
(JSC::PropertyNode::isInstanceClassProperty const): Deleted.
(JSC::PropertyNode::isOverriddenByDuplicate const): Deleted.
(JSC::PropertyNode::setIsOverriddenByDuplicate): Deleted.
(JSC::PropertyNode::putType const): Deleted.
(JSC::BracketAccessorNode::base const): Deleted.
(JSC::BracketAccessorNode::subscript const): Deleted.
(JSC::BracketAccessorNode::subscriptHasAssignments const): Deleted.
(JSC::DotAccessorNode::base const): Deleted.
(JSC::DotAccessorNode::identifier const): Deleted.
(JSC::SpreadExpressionNode::_expression_ const): Deleted.
(JSC::ObjectSpreadExpressionNode::_expression_ const): Deleted.
(JSC::BytecodeIntrinsicNode::type const): Deleted.
(JSC::BytecodeIntrinsicNode::emitter const): Deleted.
(JSC::BytecodeIntrinsicNode::identifier const): Deleted.
(JSC::TypeOfResolveNode::identifier const): Deleted.
(JSC::BitwiseNotNode::expr): Deleted.
(JSC::BitwiseNotNode::expr const): Deleted.
(JSC::AssignResolveNode::identifier const): Deleted.
(JSC::ExprStatementNode::expr const): Deleted.
(JSC::ForOfNode::isForAwait const): Deleted.
(JSC::ReturnNode::value): Deleted.
(JSC::ProgramNode::startColumn const): Deleted.
(JSC::ProgramNode::endColumn const): Deleted.
(JSC::EvalNode::startColumn const): Deleted.
(JSC::EvalNode::endColumn const): Deleted.
(JSC::ModuleProgramNode::startColumn const): Deleted.
(JSC::ModuleProgramNode::endColumn const): Deleted.
(JSC::ModuleProgramNode::moduleScopeData): Deleted.
(JSC::ModuleNameNode::moduleName): Deleted.
(JSC::ImportSpecifierNode::importedName): Deleted.
(JSC::ImportSpecifierNode::localName): Deleted.
(JSC::ImportSpecifierListNode::specifiers const): Deleted.
(JSC::ImportSpecifierListNode::append): Deleted.
(JSC::ImportDeclarationNode::specifierList const): Deleted.
(JSC::ImportDeclarationNode::moduleName const): Deleted.
(JSC::ExportAllDeclarationNode::moduleName const): Deleted.
(JSC::ExportDefaultDeclarationNode::declaration const): Deleted.
(JSC::ExportDefaultDeclarationNode::localName const): Deleted.
(JSC::ExportLocalDeclarationNode::declaration const): Deleted.
(JSC::ExportSpecifierNode::exportedName): Deleted.
(JSC::ExportSpecifierNode::localName): Deleted.
(JSC::ExportSpecifierListNode::specifiers const): Deleted.
(JSC::ExportSpecifierListNode::append): Deleted.
(JSC::ExportNamedDeclarationNode::specifierList const): Deleted.
(JSC::ExportNamedDeclarationNode::moduleName const): Deleted.
(JSC::ArrayPatternNode::appendIndex): Deleted.
(JSC::ObjectPatternNode::appendEntry): Deleted.
(JSC::ObjectPatternNode::setContainsRestElement): Deleted.
(JSC::ObjectPatternNode::setContainsComputedProperty): Deleted.
(JSC::DestructuringAssignmentNode::bindings): Deleted.
(JSC::FunctionParameters::size const): Deleted.
(JSC::FunctionParameters::append): Deleted.
(JSC::FunctionParameters::isSimpleParameterList const): Deleted.
(JSC::FuncDeclNode::metadata): Deleted.
(JSC::CaseClauseNode::expr const): Deleted.
(JSC::CaseClauseNode::setStartOffset): Deleted.
(JSC::ClauseListNode::getClause const): Deleted.
(JSC::ClauseListNode::getNext const): Deleted.
* runtime/ExceptionHelpers.cpp:
* runtime/JSObject.cpp:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (233936 => 233937)


--- trunk/Source/_javascript_Core/ChangeLog	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/ChangeLog	2018-07-18 22:36:34 UTC (rev 233937)
@@ -1,5 +1,130 @@
 2018-07-18  Yusuke Suzuki  <[email protected]>
 
+        [JSC] Reduce size of AST nodes
+        https://bugs.webkit.org/show_bug.cgi?id=187689
+
+        Reviewed by Mark Lam.
+
+        We clean up AST nodes to reduce size. By doing so, we can reduce the memory consumption
+        of ParserArena at peak state.
+
+        1. Annotate `final` to AST nodes to make them solid. And it allows the compiler to
+        devirtualize a call to the function which are implemented in a final class.
+
+        2. Use default member initializers more.
+
+        3. And use `nullptr` instead of `0`.
+
+        4. Arrange the layout of AST nodes to reduce the size. It includes changing the order
+        of classes in multiple inheritance. In particular, StatementNode is decreased from 48
+        to 40. This decreases the sizes of all the derived Statement nodes.
+
+        * parser/NodeConstructors.h:
+        (JSC::Node::Node):
+        (JSC::StatementNode::StatementNode):
+        (JSC::ElementNode::ElementNode):
+        (JSC::ArrayNode::ArrayNode):
+        (JSC::PropertyListNode::PropertyListNode):
+        (JSC::ObjectLiteralNode::ObjectLiteralNode):
+        (JSC::ArgumentListNode::ArgumentListNode):
+        (JSC::ArgumentsNode::ArgumentsNode):
+        (JSC::NewExprNode::NewExprNode):
+        (JSC::BytecodeIntrinsicNode::BytecodeIntrinsicNode):
+        (JSC::BinaryOpNode::BinaryOpNode):
+        (JSC::LogicalOpNode::LogicalOpNode):
+        (JSC::CommaNode::CommaNode):
+        (JSC::SourceElements::SourceElements):
+        (JSC::ClauseListNode::ClauseListNode):
+        * parser/Nodes.cpp:
+        (JSC::FunctionMetadataNode::FunctionMetadataNode):
+        (JSC::FunctionMetadataNode::operator== const):
+        (JSC::FunctionMetadataNode::dump const):
+        * parser/Nodes.h:
+        (JSC::BooleanNode::value): Deleted.
+        (JSC::StringNode::value): Deleted.
+        (JSC::TemplateExpressionListNode::value): Deleted.
+        (JSC::TemplateExpressionListNode::next): Deleted.
+        (JSC::TemplateStringNode::cooked): Deleted.
+        (JSC::TemplateStringNode::raw): Deleted.
+        (JSC::TemplateStringListNode::value): Deleted.
+        (JSC::TemplateStringListNode::next): Deleted.
+        (JSC::TemplateLiteralNode::templateStrings const): Deleted.
+        (JSC::TemplateLiteralNode::templateExpressions const): Deleted.
+        (JSC::TaggedTemplateNode::templateLiteral const): Deleted.
+        (JSC::ResolveNode::identifier const): Deleted.
+        (JSC::ElementNode::elision const): Deleted.
+        (JSC::ElementNode::value): Deleted.
+        (JSC::ElementNode::next): Deleted.
+        (JSC::ArrayNode::elements const): Deleted.
+        (JSC::PropertyNode::expressionName const): Deleted.
+        (JSC::PropertyNode::name const): Deleted.
+        (JSC::PropertyNode::type const): Deleted.
+        (JSC::PropertyNode::needsSuperBinding const): Deleted.
+        (JSC::PropertyNode::isClassProperty const): Deleted.
+        (JSC::PropertyNode::isStaticClassProperty const): Deleted.
+        (JSC::PropertyNode::isInstanceClassProperty const): Deleted.
+        (JSC::PropertyNode::isOverriddenByDuplicate const): Deleted.
+        (JSC::PropertyNode::setIsOverriddenByDuplicate): Deleted.
+        (JSC::PropertyNode::putType const): Deleted.
+        (JSC::BracketAccessorNode::base const): Deleted.
+        (JSC::BracketAccessorNode::subscript const): Deleted.
+        (JSC::BracketAccessorNode::subscriptHasAssignments const): Deleted.
+        (JSC::DotAccessorNode::base const): Deleted.
+        (JSC::DotAccessorNode::identifier const): Deleted.
+        (JSC::SpreadExpressionNode::_expression_ const): Deleted.
+        (JSC::ObjectSpreadExpressionNode::_expression_ const): Deleted.
+        (JSC::BytecodeIntrinsicNode::type const): Deleted.
+        (JSC::BytecodeIntrinsicNode::emitter const): Deleted.
+        (JSC::BytecodeIntrinsicNode::identifier const): Deleted.
+        (JSC::TypeOfResolveNode::identifier const): Deleted.
+        (JSC::BitwiseNotNode::expr): Deleted.
+        (JSC::BitwiseNotNode::expr const): Deleted.
+        (JSC::AssignResolveNode::identifier const): Deleted.
+        (JSC::ExprStatementNode::expr const): Deleted.
+        (JSC::ForOfNode::isForAwait const): Deleted.
+        (JSC::ReturnNode::value): Deleted.
+        (JSC::ProgramNode::startColumn const): Deleted.
+        (JSC::ProgramNode::endColumn const): Deleted.
+        (JSC::EvalNode::startColumn const): Deleted.
+        (JSC::EvalNode::endColumn const): Deleted.
+        (JSC::ModuleProgramNode::startColumn const): Deleted.
+        (JSC::ModuleProgramNode::endColumn const): Deleted.
+        (JSC::ModuleProgramNode::moduleScopeData): Deleted.
+        (JSC::ModuleNameNode::moduleName): Deleted.
+        (JSC::ImportSpecifierNode::importedName): Deleted.
+        (JSC::ImportSpecifierNode::localName): Deleted.
+        (JSC::ImportSpecifierListNode::specifiers const): Deleted.
+        (JSC::ImportSpecifierListNode::append): Deleted.
+        (JSC::ImportDeclarationNode::specifierList const): Deleted.
+        (JSC::ImportDeclarationNode::moduleName const): Deleted.
+        (JSC::ExportAllDeclarationNode::moduleName const): Deleted.
+        (JSC::ExportDefaultDeclarationNode::declaration const): Deleted.
+        (JSC::ExportDefaultDeclarationNode::localName const): Deleted.
+        (JSC::ExportLocalDeclarationNode::declaration const): Deleted.
+        (JSC::ExportSpecifierNode::exportedName): Deleted.
+        (JSC::ExportSpecifierNode::localName): Deleted.
+        (JSC::ExportSpecifierListNode::specifiers const): Deleted.
+        (JSC::ExportSpecifierListNode::append): Deleted.
+        (JSC::ExportNamedDeclarationNode::specifierList const): Deleted.
+        (JSC::ExportNamedDeclarationNode::moduleName const): Deleted.
+        (JSC::ArrayPatternNode::appendIndex): Deleted.
+        (JSC::ObjectPatternNode::appendEntry): Deleted.
+        (JSC::ObjectPatternNode::setContainsRestElement): Deleted.
+        (JSC::ObjectPatternNode::setContainsComputedProperty): Deleted.
+        (JSC::DestructuringAssignmentNode::bindings): Deleted.
+        (JSC::FunctionParameters::size const): Deleted.
+        (JSC::FunctionParameters::append): Deleted.
+        (JSC::FunctionParameters::isSimpleParameterList const): Deleted.
+        (JSC::FuncDeclNode::metadata): Deleted.
+        (JSC::CaseClauseNode::expr const): Deleted.
+        (JSC::CaseClauseNode::setStartOffset): Deleted.
+        (JSC::ClauseListNode::getClause const): Deleted.
+        (JSC::ClauseListNode::getNext const): Deleted.
+        * runtime/ExceptionHelpers.cpp:
+        * runtime/JSObject.cpp:
+
+2018-07-18  Yusuke Suzuki  <[email protected]>
+
         JSON.stringify should emit non own properties if second array argument includes
         https://bugs.webkit.org/show_bug.cgi?id=187724
 

Modified: trunk/Source/_javascript_Core/parser/NodeConstructors.h (233936 => 233937)


--- trunk/Source/_javascript_Core/parser/NodeConstructors.h	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/parser/NodeConstructors.h	2018-07-18 22:36:34 UTC (rev 233937)
@@ -43,7 +43,6 @@
 
     inline Node::Node(const JSTokenLocation& location)
         : m_position(location.line, location.startOffset, location.lineStartOffset)
-        , m_endOffset(-1)
     {
         ASSERT(location.startOffset >= location.lineStartOffset);
     }
@@ -56,8 +55,6 @@
 
     inline StatementNode::StatementNode(const JSTokenLocation& location)
         : Node(location)
-        , m_next(nullptr)
-        , m_lastLine(-1)
     {
     }
 
@@ -213,16 +210,14 @@
     }
 
     inline ElementNode::ElementNode(int elision, ExpressionNode* node)
-        : m_next(0)
+        : m_node(node)
         , m_elision(elision)
-        , m_node(node)
     {
     }
 
     inline ElementNode::ElementNode(ElementNode* l, int elision, ExpressionNode* node)
-        : m_next(0)
+        : m_node(node)
         , m_elision(elision)
-        , m_node(node)
     {
         l->m_next = this;
     }
@@ -229,7 +224,7 @@
 
     inline ArrayNode::ArrayNode(const JSTokenLocation& location, int elision)
         : ExpressionNode(location)
-        , m_element(0)
+        , m_element(nullptr)
         , m_elision(elision)
         , m_optional(true)
     {
@@ -288,7 +283,6 @@
     inline PropertyListNode::PropertyListNode(const JSTokenLocation& location, PropertyNode* node)
         : ExpressionNode(location)
         , m_node(node)
-        , m_next(0)
     {
     }
 
@@ -295,7 +289,6 @@
     inline PropertyListNode::PropertyListNode(const JSTokenLocation& location, PropertyNode* node, PropertyListNode* list)
         : ExpressionNode(location)
         , m_node(node)
-        , m_next(0)
     {
         list->m_next = this;
     }
@@ -302,7 +295,7 @@
 
     inline ObjectLiteralNode::ObjectLiteralNode(const JSTokenLocation& location)
         : ExpressionNode(location)
-        , m_list(0)
+        , m_list(nullptr)
     {
     }
 
@@ -342,7 +335,6 @@
 
     inline ArgumentListNode::ArgumentListNode(const JSTokenLocation& location, ExpressionNode* expr)
         : ExpressionNode(location)
-        , m_next(0)
         , m_expr(expr)
     {
     }
@@ -349,7 +341,6 @@
 
     inline ArgumentListNode::ArgumentListNode(const JSTokenLocation& location, ArgumentListNode* listNode, ExpressionNode* expr)
         : ExpressionNode(location)
-        , m_next(0)
         , m_expr(expr)
     {
         listNode->m_next = this;
@@ -356,7 +347,7 @@
     }
 
     inline ArgumentsNode::ArgumentsNode()
-        : m_listNode(0)
+        : m_listNode(nullptr)
     {
     }
 
@@ -368,7 +359,7 @@
     inline NewExprNode::NewExprNode(const JSTokenLocation& location, ExpressionNode* expr)
         : ExpressionNode(location)
         , m_expr(expr)
-        , m_args(0)
+        , m_args(nullptr)
     {
     }
 
@@ -425,10 +416,10 @@
     inline BytecodeIntrinsicNode::BytecodeIntrinsicNode(Type type, const JSTokenLocation& location, EmitterType emitter, const Identifier& ident, ArgumentsNode* args, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd)
         : ExpressionNode(location)
         , ThrowableExpressionData(divot, divotStart, divotEnd)
-        , m_type(type)
         , m_emitter(emitter)
         , m_ident(ident)
         , m_args(args)
+        , m_type(type)
     {
     }
 
@@ -534,19 +525,19 @@
 
     inline BinaryOpNode::BinaryOpNode(const JSTokenLocation& location, ExpressionNode* expr1, ExpressionNode* expr2, OpcodeID opcodeID, bool rightHasAssignments)
         : ExpressionNode(location)
+        , m_rightHasAssignments(rightHasAssignments)
+        , m_opcodeID(opcodeID)
         , m_expr1(expr1)
         , m_expr2(expr2)
-        , m_opcodeID(opcodeID)
-        , m_rightHasAssignments(rightHasAssignments)
     {
     }
 
     inline BinaryOpNode::BinaryOpNode(const JSTokenLocation& location, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, OpcodeID opcodeID, bool rightHasAssignments)
         : ExpressionNode(location, type)
+        , m_rightHasAssignments(rightHasAssignments)
+        , m_opcodeID(opcodeID)
         , m_expr1(expr1)
         , m_expr2(expr2)
-        , m_opcodeID(opcodeID)
-        , m_rightHasAssignments(rightHasAssignments)
     {
     }
 
@@ -673,9 +664,9 @@
 
     inline LogicalOpNode::LogicalOpNode(const JSTokenLocation& location, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator oper)
         : ExpressionNode(location, ResultType::forLogicalOp(expr1->resultDescriptor(), expr2->resultDescriptor()))
+        , m_operator(oper)
         , m_expr1(expr1)
         , m_expr2(expr2)
-        , m_operator(oper)
     {
     }
 
@@ -759,13 +750,10 @@
     inline CommaNode::CommaNode(const JSTokenLocation& location, ExpressionNode* expr)
         : ExpressionNode(location)
         , m_expr(expr)
-        , m_next(nullptr)
     {
     }
 
     inline SourceElements::SourceElements()
-        : m_head(nullptr)
-        , m_tail(nullptr)
     {
     }
 
@@ -1022,13 +1010,11 @@
 
     inline ClauseListNode::ClauseListNode(CaseClauseNode* clause)
         : m_clause(clause)
-        , m_next(0)
     {
     }
 
     inline ClauseListNode::ClauseListNode(ClauseListNode* clauseList, CaseClauseNode* clause)
         : m_clause(clause)
-        , m_next(0)
     {
         clauseList->m_next = this;
     }

Modified: trunk/Source/_javascript_Core/parser/Nodes.cpp (233936 => 233937)


--- trunk/Source/_javascript_Core/parser/Nodes.cpp	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/parser/Nodes.cpp	2018-07-18 22:36:34 UTC (rev 233937)
@@ -197,6 +197,11 @@
     int functionKeywordStart, int functionNameStart, int parametersStart, bool isInStrictContext, 
     ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression)
         : Node(endLocation)
+        , m_isInStrictContext(isInStrictContext)
+        , m_superBinding(static_cast<unsigned>(superBinding))
+        , m_constructorKind(static_cast<unsigned>(constructorKind))
+        , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)
+        , m_parseMode(mode)
         , m_startColumn(startColumn)
         , m_endColumn(endColumn)
         , m_functionKeywordStart(functionKeywordStart)
@@ -204,11 +209,6 @@
         , m_parametersStart(parametersStart)
         , m_startStartOffset(startLocation.startOffset)
         , m_parameterCount(parameterCount)
-        , m_parseMode(mode)
-        , m_isInStrictContext(isInStrictContext)
-        , m_superBinding(static_cast<unsigned>(superBinding))
-        , m_constructorKind(static_cast<unsigned>(constructorKind))
-        , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)
 {
     ASSERT(m_superBinding == static_cast<unsigned>(superBinding));
     ASSERT(m_constructorKind == static_cast<unsigned>(constructorKind));
@@ -220,6 +220,11 @@
     int functionKeywordStart, int functionNameStart, int parametersStart, bool isInStrictContext, 
     ConstructorKind constructorKind, SuperBinding superBinding, unsigned parameterCount, SourceParseMode mode, bool isArrowFunctionBodyExpression)
         : Node(endLocation)
+        , m_isInStrictContext(isInStrictContext)
+        , m_superBinding(static_cast<unsigned>(superBinding))
+        , m_constructorKind(static_cast<unsigned>(constructorKind))
+        , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)
+        , m_parseMode(mode)
         , m_startColumn(startColumn)
         , m_endColumn(endColumn)
         , m_functionKeywordStart(functionKeywordStart)
@@ -227,11 +232,6 @@
         , m_parametersStart(parametersStart)
         , m_startStartOffset(startLocation.startOffset)
         , m_parameterCount(parameterCount)
-        , m_parseMode(mode)
-        , m_isInStrictContext(isInStrictContext)
-        , m_superBinding(static_cast<unsigned>(superBinding))
-        , m_constructorKind(static_cast<unsigned>(constructorKind))
-        , m_isArrowFunctionBodyExpression(isArrowFunctionBodyExpression)
 {
     ASSERT(m_superBinding == static_cast<unsigned>(superBinding));
     ASSERT(m_constructorKind == static_cast<unsigned>(constructorKind));
@@ -252,7 +252,12 @@
 
 bool FunctionMetadataNode::operator==(const FunctionMetadataNode& other) const
 {
-    return m_ident == other.m_ident
+    return m_parseMode== other.m_parseMode
+        && m_isInStrictContext == other.m_isInStrictContext
+        && m_superBinding == other.m_superBinding
+        && m_constructorKind == other.m_constructorKind
+        && m_isArrowFunctionBodyExpression == other.m_isArrowFunctionBodyExpression
+        && m_ident == other.m_ident
         && m_ecmaName == other.m_ecmaName
         && m_inferredName == other.m_inferredName
         && m_functionMode== other.m_functionMode
@@ -266,16 +271,16 @@
         && m_startStartOffset== other.m_startStartOffset
         && m_parameterCount== other.m_parameterCount
         && m_lastLine== other.m_lastLine
-        && m_parseMode== other.m_parseMode
-        && m_isInStrictContext == other.m_isInStrictContext 
-        && m_superBinding == other.m_superBinding 
-        && m_constructorKind == other.m_constructorKind 
-        && m_isArrowFunctionBodyExpression == other.m_isArrowFunctionBodyExpression
         && m_position == other.m_position;
 }
 
 void FunctionMetadataNode::dump(PrintStream& stream) const
 {
+    stream.println("m_parseMode ", static_cast<uint32_t>(m_parseMode));
+    stream.println("m_isInStrictContext ", m_isInStrictContext);
+    stream.println("m_superBinding ", m_superBinding);
+    stream.println("m_constructorKind ", m_constructorKind);
+    stream.println("m_isArrowFunctionBodyExpression ", m_isArrowFunctionBodyExpression);
     stream.println("m_ident ", m_ident);
     stream.println("m_ecmaName ", m_ecmaName);
     stream.println("m_inferredName ", m_inferredName);
@@ -289,11 +294,6 @@
     stream.println("m_startStartOffset ", m_startStartOffset);
     stream.println("m_parameterCount ", m_parameterCount);
     stream.println("m_lastLine ", m_lastLine);
-    stream.println("m_parseMode ", static_cast<uint32_t>(m_parseMode));
-    stream.println("m_isInStrictContext ", m_isInStrictContext);
-    stream.println("m_superBinding ", m_superBinding);
-    stream.println("m_constructorKind ", m_constructorKind);
-    stream.println("m_isArrowFunctionBodyExpression ", m_isArrowFunctionBodyExpression);
     stream.println("position().line ", position().line);
     stream.println("position().offset ", position().offset);
     stream.println("position().lineStartOffset ", position().lineStartOffset);

Modified: trunk/Source/_javascript_Core/parser/Nodes.h (233936 => 233937)


--- trunk/Source/_javascript_Core/parser/Nodes.h	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/parser/Nodes.h	2018-07-18 22:36:34 UTC (rev 233937)
@@ -55,7 +55,7 @@
 
     typedef SmallPtrSet<UniquedStringImpl*> UniquedStringImplPtrSet;
 
-    enum Operator {
+    enum Operator : uint8_t {
         OpEqual,
         OpPlusEq,
         OpMinusEq,
@@ -73,12 +73,12 @@
         OpURShift
     };
     
-    enum LogicalOperator {
+    enum LogicalOperator : uint8_t {
         OpLogicalAnd,
         OpLogicalOr
     };
 
-    enum FallThroughMode {
+    enum FallThroughMode : uint8_t {
         FallThroughMeansTrue = 0,
         FallThroughMeansFalse = 1
     };
@@ -89,12 +89,12 @@
     }
 
     struct SwitchInfo {
-        enum SwitchType { SwitchNone, SwitchImmediate, SwitchCharacter, SwitchString };
+        enum SwitchType : uint8_t { SwitchNone, SwitchImmediate, SwitchCharacter, SwitchString };
         uint32_t bytecodeOffset;
         SwitchType switchType;
     };
 
-    enum class AssignmentContext { 
+    enum class AssignmentContext : uint8_t { 
         DeclarationStatement, 
         ConstDeclarationStatement, 
         AssignmentExpression 
@@ -161,7 +161,7 @@
 
     protected:
         JSTextPosition m_position;
-        int m_endOffset;
+        int m_endOffset { -1 };
         bool m_needsDebugHook { false };
     };
 
@@ -245,8 +245,8 @@
         virtual bool isForOfNode() const { return false; }
 
     protected:
-        StatementNode* m_next;
-        int m_lastLine;
+        int m_lastLine { -1 };
+        StatementNode* m_next { nullptr };
     };
 
     class VariableEnvironmentNode : public ParserArenaDeletable {
@@ -280,7 +280,7 @@
         void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) override;
     };
 
-    class NullNode : public ConstantNode {
+    class NullNode final : public ConstantNode {
     public:
         NullNode(const JSTokenLocation&);
 
@@ -289,7 +289,7 @@
         JSValue jsValue(BytecodeGenerator&) const override { return jsNull(); }
     };
 
-    class BooleanNode : public ConstantNode {
+    class BooleanNode final : public ConstantNode {
     public:
         BooleanNode(const JSTokenLocation&, bool value);
         bool value() { return m_value; }
@@ -324,13 +324,13 @@
     };
 
     // An integer node represent a number represented as an integer (e.g. 42 instead of 42., 42.0, 42e0)
-    class IntegerNode : public DoubleNode {
+    class IntegerNode final : public DoubleNode {
     public:
         IntegerNode(const JSTokenLocation&, double value);
         bool isIntegerNode() const final { return true; }
     };
 
-    class StringNode : public ConstantNode {
+    class StringNode final : public ConstantNode {
     public:
         StringNode(const JSTokenLocation&, const Identifier&);
         const Identifier& value() { return m_value; }
@@ -513,7 +513,7 @@
         uint16_t m_subexpressionLineStartOffset;
     };
 
-    class TemplateExpressionListNode : public ParserArenaFreeable {
+    class TemplateExpressionListNode final : public ParserArenaFreeable {
     public:
         TemplateExpressionListNode(ExpressionNode*);
         TemplateExpressionListNode(TemplateExpressionListNode*, ExpressionNode*);
@@ -526,7 +526,7 @@
         ExpressionNode* m_node { nullptr };
     };
 
-    class TemplateStringNode : public ExpressionNode {
+    class TemplateStringNode final : public ExpressionNode {
     public:
         TemplateStringNode(const JSTokenLocation&, const Identifier* cooked, const Identifier* raw);
 
@@ -540,7 +540,7 @@
         const Identifier* m_raw;
     };
 
-    class TemplateStringListNode : public ParserArenaFreeable {
+    class TemplateStringListNode final : public ParserArenaFreeable {
     public:
         TemplateStringListNode(TemplateStringNode*);
         TemplateStringListNode(TemplateStringListNode*, TemplateStringNode*);
@@ -553,7 +553,7 @@
         TemplateStringNode* m_node { nullptr };
     };
 
-    class TemplateLiteralNode : public ExpressionNode {
+    class TemplateLiteralNode final : public ExpressionNode {
     public:
         TemplateLiteralNode(const JSTokenLocation&, TemplateStringListNode*);
         TemplateLiteralNode(const JSTokenLocation&, TemplateStringListNode*, TemplateExpressionListNode*);
@@ -568,7 +568,7 @@
         TemplateExpressionListNode* m_templateExpressions;
     };
 
-    class TaggedTemplateNode : public ExpressionNode, public ThrowableExpressionData {
+    class TaggedTemplateNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         TaggedTemplateNode(const JSTokenLocation&, ExpressionNode*, TemplateLiteralNode*);
 
@@ -581,7 +581,7 @@
         TemplateLiteralNode* m_templateLiteral;
     };
 
-    class RegExpNode : public ExpressionNode, public ThrowableExpressionData {
+    class RegExpNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         RegExpNode(const JSTokenLocation&, const Identifier& pattern, const Identifier& flags);
 
@@ -592,7 +592,7 @@
         const Identifier& m_flags;
     };
 
-    class ThisNode : public ExpressionNode {
+    class ThisNode final : public ExpressionNode {
     public:
         ThisNode(const JSTokenLocation&);
 
@@ -609,7 +609,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class ImportNode : public ExpressionNode, public ThrowableExpressionData {
+    class ImportNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         ImportNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -648,7 +648,7 @@
         ExpressionNode* m_expr;
     };
 
-    class ResolveNode : public ExpressionNode {
+    class ResolveNode final : public ExpressionNode {
     public:
         ResolveNode(const JSTokenLocation&, const Identifier&, const JSTextPosition& start);
 
@@ -665,7 +665,7 @@
         JSTextPosition m_start;
     };
 
-    class ElementNode : public ParserArenaFreeable {
+    class ElementNode final : public ParserArenaFreeable {
     public:
         ElementNode(int elision, ExpressionNode*);
         ElementNode(ElementNode*, int elision, ExpressionNode*);
@@ -675,12 +675,12 @@
         ElementNode* next() { return m_next; }
 
     private:
-        ElementNode* m_next;
+        ElementNode* m_next { nullptr };
+        ExpressionNode* m_node;
         int m_elision;
-        ExpressionNode* m_node;
     };
 
-    class ArrayNode : public ExpressionNode {
+    class ArrayNode final : public ExpressionNode {
     public:
         ArrayNode(const JSTokenLocation&, int elision);
         ArrayNode(const JSTokenLocation&, ElementNode*);
@@ -701,11 +701,11 @@
         bool m_optional;
     };
 
-    enum class ClassElementTag { No, Instance, Static, LastTag };
-    class PropertyNode : public ParserArenaFreeable {
+    enum class ClassElementTag : uint8_t { No, Instance, Static, LastTag };
+    class PropertyNode final : public ParserArenaFreeable {
     public:
-        enum Type { Constant = 1, Getter = 2, Setter = 4, Computed = 8, Shorthand = 16, Spread = 32 };
-        enum PutType { Unknown, KnownDirect };
+        enum Type : uint8_t { Constant = 1, Getter = 2, Setter = 4, Computed = 8, Shorthand = 16, Spread = 32 };
+        enum PutType : uint8_t { Unknown, KnownDirect };
 
         PropertyNode(const Identifier&, ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag);
         PropertyNode(ExpressionNode*, Type, PutType, SuperBinding, ClassElementTag);
@@ -736,7 +736,7 @@
         unsigned m_isOverriddenByDuplicate: 1;
     };
 
-    class PropertyListNode : public ExpressionNode {
+    class PropertyListNode final : public ExpressionNode {
     public:
         PropertyListNode(const JSTokenLocation&, PropertyNode*);
         PropertyListNode(const JSTokenLocation&, PropertyNode*, PropertyListNode*);
@@ -753,10 +753,10 @@
         void emitPutConstantProperty(BytecodeGenerator&, RegisterID*, PropertyNode&);
 
         PropertyNode* m_node;
-        PropertyListNode* m_next;
+        PropertyListNode* m_next { nullptr };
     };
 
-    class ObjectLiteralNode : public ExpressionNode {
+    class ObjectLiteralNode final : public ExpressionNode {
     public:
         ObjectLiteralNode(const JSTokenLocation&);
         ObjectLiteralNode(const JSTokenLocation&, PropertyListNode*);
@@ -768,7 +768,7 @@
         PropertyListNode* m_list;
     };
     
-    class BracketAccessorNode : public ExpressionNode, public ThrowableExpressionData {
+    class BracketAccessorNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         BracketAccessorNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments);
 
@@ -788,7 +788,7 @@
         bool m_subscriptHasAssignments;
     };
 
-    class DotAccessorNode : public ExpressionNode, public ThrowableExpressionData {
+    class DotAccessorNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         DotAccessorNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&);
 
@@ -805,7 +805,7 @@
         const Identifier& m_ident;
     };
 
-    class SpreadExpressionNode : public ExpressionNode, public ThrowableExpressionData {
+    class SpreadExpressionNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         SpreadExpressionNode(const JSTokenLocation&, ExpressionNode*);
         
@@ -818,7 +818,7 @@
         ExpressionNode* m_expression;
     };
     
-    class ObjectSpreadExpressionNode : public ExpressionNode, public ThrowableExpressionData {
+    class ObjectSpreadExpressionNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         ObjectSpreadExpressionNode(const JSTokenLocation&, ExpressionNode*);
         
@@ -830,12 +830,12 @@
         ExpressionNode* m_expression;
     };
 
-    class ArgumentListNode : public ExpressionNode {
+    class ArgumentListNode final : public ExpressionNode {
     public:
         ArgumentListNode(const JSTokenLocation&, ExpressionNode*);
         ArgumentListNode(const JSTokenLocation&, ArgumentListNode*, ExpressionNode*);
 
-        ArgumentListNode* m_next;
+        ArgumentListNode* m_next { nullptr };
         ExpressionNode* m_expr;
 
     private:
@@ -842,7 +842,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class ArgumentsNode : public ParserArenaFreeable {
+    class ArgumentsNode final : public ParserArenaFreeable {
     public:
         ArgumentsNode();
         ArgumentsNode(ArgumentListNode*);
@@ -850,7 +850,7 @@
         ArgumentListNode* m_listNode;
     };
 
-    class NewExprNode : public ExpressionNode, public ThrowableExpressionData {
+    class NewExprNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         NewExprNode(const JSTokenLocation&, ExpressionNode*);
         NewExprNode(const JSTokenLocation&, ExpressionNode*, ArgumentsNode*);
@@ -862,7 +862,7 @@
         ArgumentsNode* m_args;
     };
 
-    class EvalFunctionCallNode : public ExpressionNode, public ThrowableExpressionData {
+    class EvalFunctionCallNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         EvalFunctionCallNode(const JSTokenLocation&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -872,7 +872,7 @@
         ArgumentsNode* m_args;
     };
 
-    class FunctionCallValueNode : public ExpressionNode, public ThrowableExpressionData {
+    class FunctionCallValueNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         FunctionCallValueNode(const JSTokenLocation&, ExpressionNode*, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -883,7 +883,7 @@
         ArgumentsNode* m_args;
     };
 
-    class FunctionCallResolveNode : public ExpressionNode, public ThrowableExpressionData {
+    class FunctionCallResolveNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         FunctionCallResolveNode(const JSTokenLocation&, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -894,7 +894,7 @@
         ArgumentsNode* m_args;
     };
     
-    class FunctionCallBracketNode : public ExpressionNode, public ThrowableSubExpressionData {
+    class FunctionCallBracketNode final : public ExpressionNode, public ThrowableSubExpressionData {
     public:
         FunctionCallBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -920,9 +920,9 @@
         ArgumentsNode* m_args;
     };
 
-    class BytecodeIntrinsicNode : public ExpressionNode, public ThrowableExpressionData {
+    class BytecodeIntrinsicNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
-        enum class Type {
+        enum class Type : uint8_t {
             Constant,
             Function
         };
@@ -945,13 +945,13 @@
     private:
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
 
-        Type m_type;
         EmitterType m_emitter;
         const Identifier& m_ident;
         ArgumentsNode* m_args;
+        Type m_type;
     };
 
-    class CallFunctionCallDotNode : public FunctionCallDotNode {
+    class CallFunctionCallDotNode final : public FunctionCallDotNode {
     public:
         CallFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply);
 
@@ -960,7 +960,7 @@
         size_t m_distanceToInnermostCallOrApply;
     };
     
-    class ApplyFunctionCallDotNode : public FunctionCallDotNode {
+    class ApplyFunctionCallDotNode final : public FunctionCallDotNode {
     public:
         ApplyFunctionCallDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ArgumentsNode*, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd, size_t distanceToInnermostCallOrApply);
 
@@ -969,7 +969,7 @@
         size_t m_distanceToInnermostCallOrApply;
     };
 
-    class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData {
+    class DeleteResolveNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         DeleteResolveNode(const JSTokenLocation&, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -979,7 +979,7 @@
         const Identifier& m_ident;
     };
 
-    class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData {
+    class DeleteBracketNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -990,7 +990,7 @@
         ExpressionNode* m_subscript;
     };
 
-    class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData {
+    class DeleteDotNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1001,7 +1001,7 @@
         const Identifier& m_ident;
     };
 
-    class DeleteValueNode : public ExpressionNode {
+    class DeleteValueNode final : public ExpressionNode {
     public:
         DeleteValueNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1011,7 +1011,7 @@
         ExpressionNode* m_expr;
     };
 
-    class VoidNode : public ExpressionNode {
+    class VoidNode final : public ExpressionNode {
     public:
         VoidNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1021,7 +1021,7 @@
         ExpressionNode* m_expr;
     };
 
-    class TypeOfResolveNode : public ExpressionNode {
+    class TypeOfResolveNode final : public ExpressionNode {
     public:
         TypeOfResolveNode(const JSTokenLocation&, const Identifier&);
 
@@ -1033,7 +1033,7 @@
         const Identifier& m_ident;
     };
 
-    class TypeOfValueNode : public ExpressionNode {
+    class TypeOfValueNode final : public ExpressionNode {
     public:
         TypeOfValueNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1057,7 +1057,7 @@
         Operator m_operator;
     };
 
-    class PostfixNode : public PrefixNode {
+    class PostfixNode final : public PrefixNode {
     public:
         PostfixNode(const JSTokenLocation&, ExpressionNode*, Operator, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1084,7 +1084,7 @@
         OpcodeID m_opcodeID;
     };
 
-    class UnaryPlusNode : public UnaryOpNode {
+    class UnaryPlusNode final : public UnaryOpNode {
     public:
         UnaryPlusNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1094,12 +1094,12 @@
         ExpressionNode* stripUnaryPlus() override { return expr(); }
     };
 
-    class NegateNode : public UnaryOpNode {
+    class NegateNode final : public UnaryOpNode {
     public:
         NegateNode(const JSTokenLocation&, ExpressionNode*);
     };
 
-    class BitwiseNotNode : public ExpressionNode {
+    class BitwiseNotNode final : public ExpressionNode {
     public:
         BitwiseNotNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1113,7 +1113,7 @@
         ExpressionNode* m_expr;
     };
  
-    class LogicalNotNode : public UnaryOpNode {
+    class LogicalNotNode final : public UnaryOpNode {
     public:
         LogicalNotNode(const JSTokenLocation&, ExpressionNode*);
     private:
@@ -1134,7 +1134,7 @@
         bool isBinaryOpNode() const override { return true; }
 
     private:
-        enum class UInt32Result { UInt32, Constant, };
+        enum class UInt32Result : uint8_t { UInt32, Constant, };
 
         void tryFoldToBranch(BytecodeGenerator&, TriState& branchCondition, ExpressionNode*& branchExpression);
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
@@ -1143,36 +1143,36 @@
         OpcodeID opcodeID() const { return m_opcodeID; }
 
     protected:
-        ExpressionNode* m_expr1;
-        ExpressionNode* m_expr2;
+        bool m_rightHasAssignments;
+        bool m_shouldToUnsignedResult { true };
     private:
         OpcodeID m_opcodeID;
     protected:
-        bool m_rightHasAssignments;
-        bool m_shouldToUnsignedResult { true };
+        ExpressionNode* m_expr1;
+        ExpressionNode* m_expr2;
     };
 
-    class PowNode : public BinaryOpNode {
+    class PowNode final : public BinaryOpNode {
     public:
         PowNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class MultNode : public BinaryOpNode {
+    class MultNode final : public BinaryOpNode {
     public:
         MultNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class DivNode : public BinaryOpNode {
+    class DivNode final : public BinaryOpNode {
     public:
         DivNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class ModNode : public BinaryOpNode {
+    class ModNode final : public BinaryOpNode {
     public:
         ModNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class AddNode : public BinaryOpNode {
+    class AddNode final : public BinaryOpNode {
     public:
         AddNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1179,7 +1179,7 @@
         bool isAdd() const override { return true; }
     };
 
-    class SubNode : public BinaryOpNode {
+    class SubNode final : public BinaryOpNode {
     public:
         SubNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1186,37 +1186,37 @@
         bool isSubtract() const override { return true; }
     };
 
-    class LeftShiftNode : public BinaryOpNode {
+    class LeftShiftNode final : public BinaryOpNode {
     public:
         LeftShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class RightShiftNode : public BinaryOpNode {
+    class RightShiftNode final : public BinaryOpNode {
     public:
         RightShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class UnsignedRightShiftNode : public BinaryOpNode {
+    class UnsignedRightShiftNode final : public BinaryOpNode {
     public:
         UnsignedRightShiftNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class LessNode : public BinaryOpNode {
+    class LessNode final : public BinaryOpNode {
     public:
         LessNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class GreaterNode : public BinaryOpNode {
+    class GreaterNode final : public BinaryOpNode {
     public:
         GreaterNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class LessEqNode : public BinaryOpNode {
+    class LessEqNode final : public BinaryOpNode {
     public:
         LessEqNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class GreaterEqNode : public BinaryOpNode {
+    class GreaterEqNode final : public BinaryOpNode {
     public:
         GreaterEqNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
@@ -1230,7 +1230,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
     
-    class InstanceOfNode : public ThrowableBinaryOpNode {
+    class InstanceOfNode final : public ThrowableBinaryOpNode {
     public:
         InstanceOfNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1238,7 +1238,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class InNode : public ThrowableBinaryOpNode {
+    class InNode final : public ThrowableBinaryOpNode {
     public:
         InNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1246,7 +1246,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class EqualNode : public BinaryOpNode {
+    class EqualNode final : public BinaryOpNode {
     public:
         EqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1254,12 +1254,12 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class NotEqualNode : public BinaryOpNode {
+    class NotEqualNode final : public BinaryOpNode {
     public:
         NotEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class StrictEqualNode : public BinaryOpNode {
+    class StrictEqualNode final : public BinaryOpNode {
     public:
         StrictEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
 
@@ -1267,28 +1267,28 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class NotStrictEqualNode : public BinaryOpNode {
+    class NotStrictEqualNode final : public BinaryOpNode {
     public:
         NotStrictEqualNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class BitAndNode : public BinaryOpNode {
+    class BitAndNode final : public BinaryOpNode {
     public:
         BitAndNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class BitOrNode : public BinaryOpNode {
+    class BitOrNode final : public BinaryOpNode {
     public:
         BitOrNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
-    class BitXOrNode : public BinaryOpNode {
+    class BitXOrNode final : public BinaryOpNode {
     public:
         BitXOrNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments);
     };
 
     // m_expr1 && m_expr2, m_expr1 || m_expr2
-    class LogicalOpNode : public ExpressionNode {
+    class LogicalOpNode final : public ExpressionNode {
     public:
         LogicalOpNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator);
 
@@ -1296,13 +1296,13 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
         void emitBytecodeInConditionContext(BytecodeGenerator&, Label& trueTarget, Label& falseTarget, FallThroughMode) override;
 
+        LogicalOperator m_operator;
         ExpressionNode* m_expr1;
         ExpressionNode* m_expr2;
-        LogicalOperator m_operator;
     };
 
     // The ternary operator, "m_logical ? m_expr1 : m_expr2"
-    class ConditionalNode : public ExpressionNode {
+    class ConditionalNode final : public ExpressionNode {
     public:
         ConditionalNode(const JSTokenLocation&, ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2);
 
@@ -1314,7 +1314,7 @@
         ExpressionNode* m_expr2;
     };
 
-    class ReadModifyResolveNode : public ExpressionNode, public ThrowableExpressionData {
+    class ReadModifyResolveNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         ReadModifyResolveNode(const JSTokenLocation&, const Identifier&, Operator, ExpressionNode*  right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1327,7 +1327,7 @@
         bool m_rightHasAssignments;
     };
 
-    class AssignResolveNode : public ExpressionNode, public ThrowableExpressionData {
+    class AssignResolveNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         AssignResolveNode(const JSTokenLocation&, const Identifier&, ExpressionNode* right, AssignmentContext);
         bool isAssignResolveNode() const override { return true; }
@@ -1341,7 +1341,7 @@
         AssignmentContext m_assignmentContext;
     };
 
-    class ReadModifyBracketNode : public ExpressionNode, public ThrowableSubExpressionData {
+    class ReadModifyBracketNode final : public ExpressionNode, public ThrowableSubExpressionData {
     public:
         ReadModifyBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1356,7 +1356,7 @@
         bool m_rightHasAssignments : 1;
     };
 
-    class AssignBracketNode : public ExpressionNode, public ThrowableExpressionData {
+    class AssignBracketNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         AssignBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1370,7 +1370,7 @@
         bool m_rightHasAssignments : 1;
     };
 
-    class AssignDotNode : public ExpressionNode, public ThrowableExpressionData {
+    class AssignDotNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         AssignDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1383,7 +1383,7 @@
         bool m_rightHasAssignments;
     };
 
-    class ReadModifyDotNode : public ExpressionNode, public ThrowableSubExpressionData {
+    class ReadModifyDotNode final : public ExpressionNode, public ThrowableSubExpressionData {
     public:
         ReadModifyDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, ExpressionNode* right, bool rightHasAssignments, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1397,7 +1397,7 @@
         bool m_rightHasAssignments : 1;
     };
 
-    class AssignErrorNode : public ExpressionNode, public ThrowableExpressionData {
+    class AssignErrorNode final : public ExpressionNode, public ThrowableExpressionData {
     public:
         AssignErrorNode(const JSTokenLocation&, const JSTextPosition& divot, const JSTextPosition& divotStart, const JSTextPosition& divotEnd);
 
@@ -1417,7 +1417,7 @@
         RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
 
         ExpressionNode* m_expr;
-        CommaNode* m_next;
+        CommaNode* m_next { nullptr };
     };
     
     class SourceElements final : public ParserArenaFreeable {
@@ -1436,11 +1436,11 @@
         void analyzeModule(ModuleAnalyzer&);
 
     private:
-        StatementNode* m_head;
-        StatementNode* m_tail;
+        StatementNode* m_head { nullptr };
+        StatementNode* m_tail { nullptr };
     };
 
-    class BlockNode : public StatementNode, public VariableEnvironmentNode {
+    class BlockNode final : public StatementNode, public VariableEnvironmentNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(BlockNode);
     public:
         BlockNode(const JSTokenLocation&, SourceElements*, VariableEnvironment&, FunctionStack&&);
@@ -1459,7 +1459,7 @@
         SourceElements* m_statements;
     };
 
-    class EmptyStatementNode : public StatementNode {
+    class EmptyStatementNode final : public StatementNode {
     public:
         EmptyStatementNode(const JSTokenLocation&);
 
@@ -1470,7 +1470,7 @@
         bool isEmptyStatement() const override { return true; }
     };
     
-    class DebuggerStatementNode : public StatementNode {
+    class DebuggerStatementNode final : public StatementNode {
     public:
         DebuggerStatementNode(const JSTokenLocation&);
 
@@ -1481,7 +1481,7 @@
         void emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
 
-    class ExprStatementNode : public StatementNode {
+    class ExprStatementNode final : public StatementNode {
     public:
         ExprStatementNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1495,7 +1495,7 @@
         ExpressionNode* m_expr;
     };
 
-    class DeclarationStatement : public StatementNode {
+    class DeclarationStatement final : public StatementNode {
     public:
         DeclarationStatement(const JSTokenLocation&, ExpressionNode*);
     private:
@@ -1506,7 +1506,7 @@
         ExpressionNode* m_expr;
     };
 
-    class EmptyVarExpression : public ExpressionNode {
+    class EmptyVarExpression final : public ExpressionNode {
     public:
         EmptyVarExpression(const JSTokenLocation&, const Identifier&);
 
@@ -1516,7 +1516,7 @@
         const Identifier& m_ident;
     };
 
-    class EmptyLetExpression : public ExpressionNode {
+    class EmptyLetExpression final : public ExpressionNode {
     public:
         EmptyLetExpression(const JSTokenLocation&, const Identifier&);
 
@@ -1526,7 +1526,7 @@
         const Identifier& m_ident;
     };
 
-    class IfElseNode : public StatementNode {
+    class IfElseNode final : public StatementNode {
     public:
         IfElseNode(const JSTokenLocation&, ExpressionNode* condition, StatementNode* ifBlock, StatementNode* elseBlock);
 
@@ -1540,7 +1540,7 @@
         StatementNode* m_elseBlock;
     };
 
-    class DoWhileNode : public StatementNode {
+    class DoWhileNode final : public StatementNode {
     public:
         DoWhileNode(const JSTokenLocation&, StatementNode*, ExpressionNode*);
 
@@ -1551,7 +1551,7 @@
         ExpressionNode* m_expr;
     };
 
-    class WhileNode : public StatementNode {
+    class WhileNode final : public StatementNode {
     public:
         WhileNode(const JSTokenLocation&, ExpressionNode*, StatementNode*);
 
@@ -1562,7 +1562,7 @@
         StatementNode* m_statement;
     };
 
-    class ForNode : public StatementNode, public VariableEnvironmentNode {
+    class ForNode final : public StatementNode, public VariableEnvironmentNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForNode);
     public:
         ForNode(const JSTokenLocation&, ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode*, VariableEnvironment&);
@@ -1592,7 +1592,7 @@
         StatementNode* m_statement;
     };
     
-    class ForInNode : public EnumerationNode {
+    class ForInNode final : public EnumerationNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForInNode);
     public:
         ForInNode(const JSTokenLocation&, ExpressionNode*, ExpressionNode*, StatementNode*, VariableEnvironment&);
@@ -1604,7 +1604,7 @@
         void emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
     };
     
-    class ForOfNode : public EnumerationNode {
+    class ForOfNode final : public EnumerationNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ForOfNode);
     public:
         ForOfNode(bool, const JSTokenLocation&, ExpressionNode*, ExpressionNode*, StatementNode*, VariableEnvironment&);
@@ -1617,7 +1617,7 @@
         const bool m_isForAwait;
     };
 
-    class ContinueNode : public StatementNode, public ThrowableExpressionData {
+    class ContinueNode final : public StatementNode, public ThrowableExpressionData {
     public:
         ContinueNode(const JSTokenLocation&, const Identifier&);
         Label* trivialTarget(BytecodeGenerator&);
@@ -1630,7 +1630,7 @@
         const Identifier& m_ident;
     };
 
-    class BreakNode : public StatementNode, public ThrowableExpressionData {
+    class BreakNode final : public StatementNode, public ThrowableExpressionData {
     public:
         BreakNode(const JSTokenLocation&, const Identifier&);
         Label* trivialTarget(BytecodeGenerator&);
@@ -1643,7 +1643,7 @@
         const Identifier& m_ident;
     };
 
-    class ReturnNode : public StatementNode, public ThrowableExpressionData {
+    class ReturnNode final : public StatementNode, public ThrowableExpressionData {
     public:
         ReturnNode(const JSTokenLocation&, ExpressionNode* value);
 
@@ -1657,7 +1657,7 @@
         ExpressionNode* m_value;
     };
 
-    class WithNode : public StatementNode {
+    class WithNode final : public StatementNode {
     public:
         WithNode(const JSTokenLocation&, ExpressionNode*, StatementNode*, const JSTextPosition& divot, uint32_t expressionLength);
 
@@ -1670,7 +1670,7 @@
         uint32_t m_expressionLength;
     };
 
-    class LabelNode : public StatementNode, public ThrowableExpressionData {
+    class LabelNode final : public StatementNode, public ThrowableExpressionData {
     public:
         LabelNode(const JSTokenLocation&, const Identifier& name, StatementNode*);
 
@@ -1684,7 +1684,7 @@
         StatementNode* m_statement;
     };
 
-    class ThrowNode : public StatementNode, public ThrowableExpressionData {
+    class ThrowNode final : public StatementNode, public ThrowableExpressionData {
     public:
         ThrowNode(const JSTokenLocation&, ExpressionNode*);
 
@@ -1694,7 +1694,7 @@
         ExpressionNode* m_expr;
     };
 
-    class TryNode : public StatementNode, public VariableEnvironmentNode {
+    class TryNode final : public StatementNode, public VariableEnvironmentNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(TryNode);
     public:
         TryNode(const JSTokenLocation&, StatementNode* tryBlock, DestructuringPatternNode* catchPattern, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock);
@@ -1786,7 +1786,7 @@
         SourceElements* m_statements;
     };
 
-    class ProgramNode : public ScopeNode {
+    class ProgramNode final : public ScopeNode {
     public:
         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>&&);
 
@@ -1801,7 +1801,7 @@
         unsigned m_endColumn;
     };
 
-    class EvalNode : public ScopeNode {
+    class EvalNode final : public ScopeNode {
     public:
         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>&&);
 
@@ -1816,7 +1816,7 @@
         unsigned m_endColumn;
     };
 
-    class ModuleProgramNode : public ScopeNode {
+    class ModuleProgramNode final : public ScopeNode {
     public:
         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>&&);
 
@@ -1837,7 +1837,7 @@
         Ref<ModuleScopeData> m_moduleScopeData;
     };
 
-    class ModuleNameNode : public Node {
+    class ModuleNameNode final : public Node {
     public:
         ModuleNameNode(const JSTokenLocation&, const Identifier& moduleName);
 
@@ -1847,7 +1847,7 @@
         const Identifier& m_moduleName;
     };
 
-    class ImportSpecifierNode : public Node {
+    class ImportSpecifierNode final : public Node {
     public:
         ImportSpecifierNode(const JSTokenLocation&, const Identifier& importedName, const Identifier& localName);
 
@@ -1859,7 +1859,7 @@
         const Identifier& m_localName;
     };
 
-    class ImportSpecifierListNode : public ParserArenaDeletable {
+    class ImportSpecifierListNode final : public ParserArenaDeletable {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ImportSpecifierListNode);
     public:
         typedef Vector<ImportSpecifierNode*, 3> Specifiers;
@@ -1884,7 +1884,7 @@
         ModuleDeclarationNode(const JSTokenLocation&);
     };
 
-    class ImportDeclarationNode : public ModuleDeclarationNode {
+    class ImportDeclarationNode final : public ModuleDeclarationNode {
     public:
         ImportDeclarationNode(const JSTokenLocation&, ImportSpecifierListNode*, ModuleNameNode*);
 
@@ -1899,7 +1899,7 @@
         ModuleNameNode* m_moduleName;
     };
 
-    class ExportAllDeclarationNode : public ModuleDeclarationNode {
+    class ExportAllDeclarationNode final : public ModuleDeclarationNode {
     public:
         ExportAllDeclarationNode(const JSTokenLocation&, ModuleNameNode*);
 
@@ -1912,7 +1912,7 @@
         ModuleNameNode* m_moduleName;
     };
 
-    class ExportDefaultDeclarationNode : public ModuleDeclarationNode {
+    class ExportDefaultDeclarationNode final : public ModuleDeclarationNode {
     public:
         ExportDefaultDeclarationNode(const JSTokenLocation&, StatementNode*, const Identifier& localName);
 
@@ -1926,7 +1926,7 @@
         const Identifier& m_localName;
     };
 
-    class ExportLocalDeclarationNode : public ModuleDeclarationNode {
+    class ExportLocalDeclarationNode final : public ModuleDeclarationNode {
     public:
         ExportLocalDeclarationNode(const JSTokenLocation&, StatementNode*);
 
@@ -1938,7 +1938,7 @@
         StatementNode* m_declaration;
     };
 
-    class ExportSpecifierNode : public Node {
+    class ExportSpecifierNode final : public Node {
     public:
         ExportSpecifierNode(const JSTokenLocation&, const Identifier& localName, const Identifier& exportedName);
 
@@ -1950,7 +1950,7 @@
         const Identifier& m_exportedName;
     };
 
-    class ExportSpecifierListNode : public ParserArenaDeletable {
+    class ExportSpecifierListNode final : public ParserArenaDeletable {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ExportSpecifierListNode);
     public:
         typedef Vector<ExportSpecifierNode*, 3> Specifiers;
@@ -1965,7 +1965,7 @@
         Specifiers m_specifiers;
     };
 
-    class ExportNamedDeclarationNode : public ModuleDeclarationNode {
+    class ExportNamedDeclarationNode final : public ModuleDeclarationNode {
     public:
         ExportNamedDeclarationNode(const JSTokenLocation&, ExportSpecifierListNode*, ModuleNameNode*);
 
@@ -1979,7 +1979,7 @@
         ModuleNameNode* m_moduleName { nullptr };
     };
 
-    class FunctionMetadataNode final : public Node, public ParserArenaDeletable {
+    class FunctionMetadataNode final : public ParserArenaDeletable, public Node {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(FunctionMetadataNode);
     public:
         FunctionMetadataNode(
@@ -2043,6 +2043,11 @@
         }
 
     public:
+        unsigned m_isInStrictContext : 1;
+        unsigned m_superBinding : 1;
+        unsigned m_constructorKind : 2;
+        unsigned m_isArrowFunctionBodyExpression : 1;
+        SourceParseMode m_parseMode;
         Identifier m_ident;
         Identifier m_ecmaName;
         Identifier m_inferredName;
@@ -2057,11 +2062,6 @@
         int m_startStartOffset;
         unsigned m_parameterCount;
         int m_lastLine;
-        SourceParseMode m_parseMode;
-        unsigned m_isInStrictContext : 1;
-        unsigned m_superBinding : 1;
-        unsigned m_constructorKind : 2;
-        unsigned m_isArrowFunctionBodyExpression : 1;
     };
 
     class FunctionNode final : public ScopeNode {
@@ -2119,7 +2119,7 @@
         bool isFuncExprNode() const override { return true; }
     };
 
-    class ArrowFuncExprNode : public BaseFuncExprNode {
+    class ArrowFuncExprNode final : public BaseFuncExprNode {
     public:
         ArrowFuncExprNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
 
@@ -2129,7 +2129,7 @@
         bool isArrowFuncExprNode() const override { return true; }
     };
 
-    class MethodDefinitionNode : public FuncExprNode {
+    class MethodDefinitionNode final : public FuncExprNode {
     public:
         MethodDefinitionNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
         
@@ -2205,11 +2205,11 @@
         DestructuringPatternNode();
     };
 
-    class ArrayPatternNode : public DestructuringPatternNode, public ThrowableExpressionData, public ParserArenaDeletable {
+    class ArrayPatternNode final : public DestructuringPatternNode, public ParserArenaDeletable, public ThrowableExpressionData {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ArrayPatternNode);
     public:
         ArrayPatternNode();
-        enum class BindingType {
+        enum class BindingType : uint8_t {
             Elision,
             Element,
             RestElement
@@ -2234,11 +2234,11 @@
         Vector<Entry> m_targetPatterns;
     };
     
-    class ObjectPatternNode : public DestructuringPatternNode, public ThrowableExpressionData, public ParserArenaDeletable {
+    class ObjectPatternNode final : public DestructuringPatternNode, public ParserArenaDeletable, public ThrowableExpressionData {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(ObjectPatternNode);
     public:
         ObjectPatternNode();
-        enum class BindingType {
+        enum class BindingType : uint8_t {
             Element,
             RestElement
         };
@@ -2337,7 +2337,7 @@
         ExpressionNode* m_assignmentTarget;
     };
 
-    class DestructuringAssignmentNode : public ExpressionNode {
+    class DestructuringAssignmentNode final : public ExpressionNode {
     public:
         DestructuringAssignmentNode(const JSTokenLocation&, DestructuringPatternNode*, ExpressionNode*);
         DestructuringPatternNode* bindings() { return m_bindings; }
@@ -2351,7 +2351,7 @@
         ExpressionNode* m_initializer;
     };
 
-    class FunctionParameters : public ParserArenaDeletable {
+    class FunctionParameters final : public ParserArenaDeletable {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(FunctionParameters);
     public:
         FunctionParameters();
@@ -2382,7 +2382,7 @@
         bool m_isSimpleParameterList { true };
     };
 
-    class FuncDeclNode : public StatementNode {
+    class FuncDeclNode final : public StatementNode {
     public:
         FuncDeclNode(const JSTokenLocation&, const Identifier&, FunctionMetadataNode*, const SourceCode&);
 
@@ -2408,7 +2408,7 @@
         ExpressionNode* m_classDeclaration;
     };
 
-    class CaseClauseNode : public ParserArenaFreeable {
+    class CaseClauseNode final : public ParserArenaFreeable {
     public:
         CaseClauseNode(ExpressionNode*, SourceElements* = 0);
 
@@ -2423,7 +2423,7 @@
         int m_startOffset;
     };
 
-    class ClauseListNode : public ParserArenaFreeable {
+    class ClauseListNode final : public ParserArenaFreeable {
     public:
         ClauseListNode(CaseClauseNode*);
         ClauseListNode(ClauseListNode*, CaseClauseNode*);
@@ -2433,10 +2433,10 @@
 
     private:
         CaseClauseNode* m_clause;
-        ClauseListNode* m_next;
+        ClauseListNode* m_next { nullptr };
     };
 
-    class CaseBlockNode : public ParserArenaFreeable {
+    class CaseBlockNode final : public ParserArenaFreeable {
     public:
         CaseBlockNode(ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2);
 
@@ -2450,7 +2450,7 @@
         ClauseListNode* m_list2;
     };
 
-    class SwitchNode : public StatementNode, public VariableEnvironmentNode {
+    class SwitchNode final : public StatementNode, public VariableEnvironmentNode {
         JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED(SwitchNode);
     public:
         SwitchNode(const JSTokenLocation&, ExpressionNode*, CaseBlockNode*, VariableEnvironment&, FunctionStack&&);

Modified: trunk/Source/_javascript_Core/runtime/ExceptionHelpers.cpp (233936 => 233937)


--- trunk/Source/_javascript_Core/runtime/ExceptionHelpers.cpp	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/runtime/ExceptionHelpers.cpp	2018-07-18 22:36:34 UTC (rev 233937)
@@ -37,7 +37,6 @@
 #include "Interpreter.h"
 #include "JSCInlines.h"
 #include "JSGlobalObjectFunctions.h"
-#include "Nodes.h"
 #include "RuntimeType.h"
 #include <wtf/text/StringBuilder.h>
 #include <wtf/text/StringView.h>

Modified: trunk/Source/_javascript_Core/runtime/JSObject.cpp (233936 => 233937)


--- trunk/Source/_javascript_Core/runtime/JSObject.cpp	2018-07-18 22:29:04 UTC (rev 233936)
+++ trunk/Source/_javascript_Core/runtime/JSObject.cpp	2018-07-18 22:36:34 UTC (rev 233937)
@@ -40,7 +40,6 @@
 #include "JSImmutableButterfly.h"
 #include "Lookup.h"
 #include "NativeErrorConstructor.h"
-#include "Nodes.h"
 #include "ObjectPrototype.h"
 #include "PropertyDescriptor.h"
 #include "PropertyNameArray.h"
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to