[ES6] Minimize ES6_CLASS_SYNTAX ifdefs
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 9 Nov 2015 01:34:09 +0000 (01:34 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 9 Nov 2015 01:34:09 +0000 (01:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=151006

Reviewed by Darin Adler.

This patch minimizes ENABLE_ES6_CLASS_SYNTAX ifdefs.
It keeps several ENABLE_ES6_CLASS_SYNTAX ifdefs in Parser.cpp.

- super meta property
- class declaration parsing
- class expression parsing
- class with import declaration

This change makes difference minimal between the enabled and disabled configurations;
reducing accidental build breaks of the disabled configuration.

* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::constructorKind): Deleted.
* bytecompiler/NodesCodegen.cpp:
* parser/ASTBuilder.h:
* parser/NodeConstructors.h:
* parser/Nodes.h:
* parser/Parser.cpp:
* parser/Parser.h:
(JSC::Scope::hasDirectSuper): Deleted.
(JSC::Scope::needsSuperBinding): Deleted.
* parser/ParserFunctionInfo.h:
* parser/ParserTokens.h:
* parser/SyntaxChecker.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192147 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
Source/JavaScriptCore/parser/ASTBuilder.h
Source/JavaScriptCore/parser/NodeConstructors.h
Source/JavaScriptCore/parser/Nodes.h
Source/JavaScriptCore/parser/Parser.cpp
Source/JavaScriptCore/parser/Parser.h
Source/JavaScriptCore/parser/ParserFunctionInfo.h
Source/JavaScriptCore/parser/ParserTokens.h
Source/JavaScriptCore/parser/SyntaxChecker.h

index 92b62ed..de6c1d5 100644 (file)
@@ -1,3 +1,35 @@
+2015-11-08  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [ES6] Minimize ES6_CLASS_SYNTAX ifdefs
+        https://bugs.webkit.org/show_bug.cgi?id=151006
+
+        Reviewed by Darin Adler.
+
+        This patch minimizes ENABLE_ES6_CLASS_SYNTAX ifdefs.
+        It keeps several ENABLE_ES6_CLASS_SYNTAX ifdefs in Parser.cpp.
+
+        - super meta property
+        - class declaration parsing
+        - class expression parsing
+        - class with import declaration
+
+        This change makes difference minimal between the enabled and disabled configurations;
+        reducing accidental build breaks of the disabled configuration.
+
+        * bytecompiler/BytecodeGenerator.h:
+        (JSC::BytecodeGenerator::constructorKind): Deleted.
+        * bytecompiler/NodesCodegen.cpp:
+        * parser/ASTBuilder.h:
+        * parser/NodeConstructors.h:
+        * parser/Nodes.h:
+        * parser/Parser.cpp:
+        * parser/Parser.h:
+        (JSC::Scope::hasDirectSuper): Deleted.
+        (JSC::Scope::needsSuperBinding): Deleted.
+        * parser/ParserFunctionInfo.h:
+        * parser/ParserTokens.h:
+        * parser/SyntaxChecker.h:
+
 2015-11-08  Sukolsak Sakshuwong  <sukolsak@gmail.com>
 
         Use StringView::upconvertedCharacters() to make a 16-bit copy in String.prototype.normalize
index a6d2277..7a39f7d 100644 (file)
@@ -279,11 +279,7 @@ namespace JSC {
         const CommonIdentifiers& propertyNames() const { return *m_vm->propertyNames; }
 
         bool isConstructor() const { return m_codeBlock->isConstructor(); }
-#if ENABLE(ES6_CLASS_SYNTAX)
         ConstructorKind constructorKind() const { return m_codeBlock->constructorKind(); }
-#else
-        ConstructorKind constructorKind() const { return ConstructorKind::None; }
-#endif
 
         ParserError generate();
 
index ea4ffdd..78ddf57 100644 (file)
@@ -3007,7 +3007,6 @@ RegisterID* YieldExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID
     return generator.emitLoad(dst, jsUndefined());
 }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
 // ------------------------------ ClassDeclNode ---------------------------------
 
 void ClassDeclNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
@@ -3096,7 +3095,6 @@ RegisterID* ClassExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID
 
     return generator.moveToDestinationIfNeeded(dst, constructor.get());
 }
-#endif
 
 // ------------------------------ ImportDeclarationNode -----------------------
 
index cf7140b..7c85ac0 100644 (file)
@@ -107,9 +107,7 @@ public:
     typedef TemplateLiteralNode* TemplateLiteral;
     typedef FunctionParameters* FormalParameterList;
     typedef FunctionMetadataNode* FunctionBody;
-#if ENABLE(ES6_CLASS_SYNTAX)
     typedef ClassExprNode* ClassExpression;
-#endif
     typedef ModuleNameNode* ModuleName;
     typedef ImportSpecifierNode* ImportSpecifier;
     typedef ImportSpecifierListNode* ImportSpecifierList;
@@ -347,13 +345,11 @@ public:
         return new (m_parserArena) YieldExprNode(location, argument, delegate);
     }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     ClassExprNode* createClassExpr(const JSTokenLocation& location, const Identifier& name, VariableEnvironment& classEnvironment, ExpressionNode* constructor,
         ExpressionNode* parentClass, PropertyListNode* instanceMethods, PropertyListNode* staticMethods)
     {
         return new (m_parserArena) ClassExprNode(location, name, classEnvironment, constructor, parentClass, instanceMethods, staticMethods);
     }
-#endif
 
     ExpressionNode* createFunctionExpr(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& functionInfo)
     {
@@ -458,7 +454,6 @@ public:
         return decl;
     }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     StatementNode* createClassDeclStatement(const JSTokenLocation& location, ClassExprNode* classExpression,
         const JSTextPosition& classStart, const JSTextPosition& classEnd, unsigned startLine, unsigned endLine)
     {
@@ -467,7 +462,6 @@ public:
         decl->setLoc(startLine, endLine, location.startOffset, location.lineStartOffset);
         return decl;
     }
-#endif
 
     StatementNode* createBlockStatement(const JSTokenLocation& location, JSC::SourceElements* elements, int startLine, int endLine, VariableEnvironment& lexicalVariables)
     {
index 551d321..1bce30e 100644 (file)
@@ -920,7 +920,6 @@ namespace JSC {
     {
     }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     inline ClassDeclNode::ClassDeclNode(const JSTokenLocation& location, ExpressionNode* classDeclaration)
         : StatementNode(location)
         , m_classDeclaration(classDeclaration)
@@ -937,7 +936,6 @@ namespace JSC {
         , m_staticMethods(staticMethods)
     {
     }
-#endif
 
     inline CaseClauseNode::CaseClauseNode(ExpressionNode* expr, SourceElements* statements)
         : m_expr(expr)
index 0bd1f6d..cde49a9 100644 (file)
@@ -1941,7 +1941,6 @@ namespace JSC {
         bool m_delegate;
     };
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     class ClassExprNode final : public ExpressionNode, public VariableEnvironmentNode {
     public:
         using ParserArenaDeletable::operator new;
@@ -1960,7 +1959,6 @@ namespace JSC {
         PropertyListNode* m_instanceMethods;
         PropertyListNode* m_staticMethods;
     };
-#endif
 
     class DestructuringPatternNode : public ParserArenaFreeable {
     public:
@@ -2077,7 +2075,6 @@ namespace JSC {
         FunctionMetadataNode* m_metadata;
     };
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     class ClassDeclNode final : public StatementNode {
     public:
         ClassDeclNode(const JSTokenLocation&, ExpressionNode* classExpression);
@@ -2087,7 +2084,6 @@ namespace JSC {
 
         ExpressionNode* m_classDeclaration;
     };
-#endif
 
     class CaseClauseNode : public ParserArenaFreeable {
     public:
index 3564e33..374bcb2 100644 (file)
@@ -1908,7 +1908,6 @@ template <class TreeBuilder> TreeStatement Parser<LexerType>::parseFunctionDecla
     return context.createFuncDeclStatement(location, functionInfo);
 }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
 template <typename LexerType>
 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseClassDeclaration(TreeBuilder& context, ExportType exportType)
 {
@@ -2086,7 +2085,6 @@ template <class TreeBuilder> TreeClassExpression Parser<LexerType>::parseClass(T
     popScope(classScope, TreeBuilder::NeedsFreeVariableInfo);
     return classExpression;
 }
-#endif
 
 struct LabelInfo {
     LabelInfo(const Identifier* ident, const JSTextPosition& start, const JSTextPosition& end)
index a514bdc..e213e07 100644 (file)
@@ -70,9 +70,7 @@ class SourceCode;
 #define TreeArguments typename TreeBuilder::Arguments
 #define TreeArgumentsList typename TreeBuilder::ArgumentsList
 #define TreeFunctionBody typename TreeBuilder::FunctionBody
-#if ENABLE(ES6_CLASS_SYNTAX)
 #define TreeClassExpression typename TreeBuilder::ClassExpression
-#endif
 #define TreeProperty typename TreeBuilder::Property
 #define TreePropertyList typename TreeBuilder::PropertyList
 #define TreeDestructuringPattern typename TreeBuilder::DestructuringPattern
@@ -460,18 +458,10 @@ struct Scope {
     void setNeedsFullActivation() { m_needsFullActivation = true; }
     bool needsFullActivation() const { return m_needsFullActivation; }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     bool hasDirectSuper() { return m_hasDirectSuper; }
-#else
-    bool hasDirectSuper() { return false; }
-#endif
     void setHasDirectSuper() { m_hasDirectSuper = true; }
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     bool needsSuperBinding() { return m_needsSuperBinding; }
-#else
-    bool needsSuperBinding() { return false; }
-#endif
     void setNeedsSuperBinding() { m_needsSuperBinding = true; }
 
     void collectFreeVariables(Scope* nestedScope, bool shouldTrackClosedVariables)
@@ -1126,9 +1116,7 @@ private:
     template <class TreeBuilder> TreeStatement parseStatementListItem(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength);
     template <class TreeBuilder> TreeStatement parseStatement(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength = 0);
     enum class ExportType { Exported, NotExported };
-#if ENABLE(ES6_CLASS_SYNTAX)
     template <class TreeBuilder> TreeStatement parseClassDeclaration(TreeBuilder&, ExportType = ExportType::NotExported);
-#endif
     template <class TreeBuilder> TreeStatement parseFunctionDeclaration(TreeBuilder&, ExportType = ExportType::NotExported);
     template <class TreeBuilder> TreeStatement parseVariableDeclaration(TreeBuilder&, DeclarationType, ExportType = ExportType::NotExported);
     template <class TreeBuilder> TreeStatement parseDoWhileStatement(TreeBuilder&);
@@ -1188,9 +1176,7 @@ private:
     
     template <class TreeBuilder> NEVER_INLINE int parseFunctionParameters(TreeBuilder&, SourceParseMode, ParserFunctionInfo<TreeBuilder>&);
 
-#if ENABLE(ES6_CLASS_SYNTAX)
     template <class TreeBuilder> NEVER_INLINE TreeClassExpression parseClass(TreeBuilder&, FunctionRequirements, ParserClassInfo<TreeBuilder>&);
-#endif
 
     template <class TreeBuilder> NEVER_INLINE typename TreeBuilder::TemplateString parseTemplateString(TreeBuilder& context, bool isTemplateHead, typename LexerType::RawStringsBuildMode, bool& elementIsTail);
     template <class TreeBuilder> NEVER_INLINE typename TreeBuilder::TemplateLiteral parseTemplateLiteral(TreeBuilder&, typename LexerType::RawStringsBuildMode);
index 4c565aa..4e8b652 100644 (file)
@@ -41,12 +41,10 @@ struct ParserFunctionInfo {
     unsigned bodyStartColumn = 0;
 };
 
-#if ENABLE(ES6_CLASS_SYNTAX)
 template <class TreeBuilder>
 struct ParserClassInfo {
     const Identifier* className = 0;
 };
-#endif
 
 }
 
index 9fef334..aff4a30 100644 (file)
@@ -79,15 +79,9 @@ enum JSTokenType {
     IMPORT,
     EXPORT,
     YIELD,
-#if ENABLE(ES6_CLASS_SYNTAX)
     CLASSTOKEN,
     EXTENDS,
     SUPER,
-#else
-    CLASSTOKEN = RESERVED,
-    EXTENDS = RESERVED,
-    SUPER = RESERVED,
-#endif
     OPENBRACE = 0,
     CLOSEBRACE,
     OPENPAREN,
index 7397477..5d393a3 100644 (file)
@@ -122,9 +122,7 @@ public:
     typedef int TemplateLiteral;
     typedef int FormalParameterList;
     typedef int FunctionBody;
-#if ENABLE(ES6_CLASS_SYNTAX)
     typedef int ClassExpression;
-#endif
     typedef int ModuleName;
     typedef int ImportSpecifier;
     typedef int ImportSpecifierList;
@@ -182,9 +180,7 @@ public:
     ExpressionType createEmptyLetExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
     ExpressionType createYield(const JSTokenLocation&) { return YieldExpr; }
     ExpressionType createYield(const JSTokenLocation&, ExpressionType, bool) { return YieldExpr; }
-#if ENABLE(ES6_CLASS_SYNTAX)
     ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, VariableEnvironment&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
-#endif
     ExpressionType createFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; }
     int createFunctionMetadata(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, int, int, int, ConstructorKind, unsigned, SourceParseMode, bool, bool) { return FunctionBodyResult; }
     ExpressionType createArrowFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; }
@@ -230,10 +226,8 @@ public:
     int createClauseList(int) { return ClauseListResult; }
     int createClauseList(int, int) { return ClauseListResult; }
     int createFuncDeclStatement(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return StatementResult; }
-#if ENABLE(ES6_CLASS_SYNTAX)
     int createClassDeclStatement(const JSTokenLocation&, ClassExpression,
         const JSTextPosition&, const JSTextPosition&, int, int) { return StatementResult; }
-#endif
     int createBlockStatement(const JSTokenLocation&, int, int, int, VariableEnvironment&) { return StatementResult; }
     int createExprStatement(const JSTokenLocation&, int, int, int) { return StatementResult; }
     int createIfStatement(const JSTokenLocation&, int, int, int, int) { return StatementResult; }