Ignore:
Timestamp:
Aug 13, 2015, 4:55:35 PM (10 years ago)
Author:
Yusuke Suzuki
Message:

Unify JSParserCodeType, FunctionParseMode and ModuleParseMode into SourceParseMode
https://bugs.webkit.org/show_bug.cgi?id=147353

Reviewed by Saam Barati.

This is the follow-up patch after r188355.
It includes the following changes.

  • Unify JSParserCodeType, FunctionParseMode and ModuleParseMode into SourceParseMode
  • Make SourceParseMode to C++ strongly-typed enum.
  • Fix the comments.
  • Rename ModuleSpecifier to ModuleName.
  • Add the type name ImportEntry before the C++11 uniform initialization.
  • Fix the thrown message for duplicate 'default' names.
  • Assert the all statements in the top-level source elements are the module declarations under the module analyzer phase.
  • API/JSScriptRef.cpp:

(parseScript):

  • builtins/BuiltinExecutables.cpp:

(JSC::BuiltinExecutables::createExecutableInternal):

  • bytecode/UnlinkedFunctionExecutable.cpp:

(JSC::generateFunctionCodeBlock):

  • bytecode/UnlinkedFunctionExecutable.h:
  • bytecompiler/BytecodeGenerator.h:

(JSC::BytecodeGenerator::makeFunction):

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createFunctionMetadata):
(JSC::ASTBuilder::createModuleName):
(JSC::ASTBuilder::createImportDeclaration):
(JSC::ASTBuilder::createExportAllDeclaration):
(JSC::ASTBuilder::createExportNamedDeclaration):
(JSC::ASTBuilder::createModuleSpecifier): Deleted.

  • parser/ModuleAnalyzer.cpp:

(JSC::ModuleAnalyzer::analyze):

  • parser/NodeConstructors.h:

(JSC::ModuleNameNode::ModuleNameNode):
(JSC::ImportDeclarationNode::ImportDeclarationNode):
(JSC::ExportAllDeclarationNode::ExportAllDeclarationNode):
(JSC::ExportNamedDeclarationNode::ExportNamedDeclarationNode):
(JSC::ModuleSpecifierNode::ModuleSpecifierNode): Deleted.

  • parser/Nodes.cpp:

(JSC::FunctionMetadataNode::FunctionMetadataNode):

  • parser/Nodes.h:

(JSC::StatementNode::isModuleDeclarationNode):
(JSC::ModuleDeclarationNode::isModuleDeclarationNode):
(JSC::ImportDeclarationNode::moduleName):
(JSC::ExportAllDeclarationNode::moduleName):
(JSC::ExportNamedDeclarationNode::moduleName):
(JSC::ImportDeclarationNode::moduleSpecifier): Deleted.
(JSC::ExportAllDeclarationNode::moduleSpecifier): Deleted.
(JSC::ExportNamedDeclarationNode::moduleSpecifier): Deleted.

  • parser/NodesAnalyzeModule.cpp:

(JSC::SourceElements::analyzeModule):
(JSC::ImportDeclarationNode::analyzeModule):
(JSC::ExportAllDeclarationNode::analyzeModule):
(JSC::ExportNamedDeclarationNode::analyzeModule):

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::parseInner):
(JSC::Parser<LexerType>::parseModuleSourceElements):
(JSC::Parser<LexerType>::parseFunctionBody):
(JSC::stringForFunctionMode):
(JSC::Parser<LexerType>::parseFunctionParameters):
(JSC::Parser<LexerType>::parseFunctionInfo):
(JSC::Parser<LexerType>::parseFunctionDeclaration):
(JSC::Parser<LexerType>::parseClass):
(JSC::Parser<LexerType>::parseModuleName):
(JSC::Parser<LexerType>::parseImportDeclaration):
(JSC::Parser<LexerType>::parseExportDeclaration):
(JSC::Parser<LexerType>::parsePropertyMethod):
(JSC::Parser<LexerType>::parseGetterSetter):
(JSC::Parser<LexerType>::parsePrimaryExpression):
(JSC::Parser<LexerType>::parseArrowFunctionExpression):
(JSC::Parser<LexerType>::parseModuleSpecifier): Deleted.

  • parser/Parser.h:

(JSC::Parser<LexerType>::parse):
(JSC::parse):

  • parser/ParserModes.h:

(JSC::isFunctionParseMode):
(JSC::isModuleParseMode):
(JSC::isProgramParseMode):

  • parser/SyntaxChecker.h:

(JSC::SyntaxChecker::createFunctionMetadata):
(JSC::SyntaxChecker::createModuleName):
(JSC::SyntaxChecker::createImportDeclaration):
(JSC::SyntaxChecker::createExportAllDeclaration):
(JSC::SyntaxChecker::createExportNamedDeclaration):
(JSC::SyntaxChecker::createModuleSpecifier): Deleted.

  • runtime/CodeCache.cpp:

(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):

  • runtime/Completion.cpp:

(JSC::checkSyntax):
(JSC::checkModuleSyntax):

  • runtime/Executable.cpp:

(JSC::ProgramExecutable::checkSyntax):

  • tests/stress/modules-syntax-error-with-names.js:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/ParserModes.h

    r188355 r188417  
    3939enum class SuperBinding { Needed, NotNeeded };
    4040enum class ThisTDZMode { AlwaysCheck, CheckIfNeeded };
    41 enum class ModuleParseMode { Analyze, Evaluate };
    4241
    4342enum ProfilerMode { ProfilerOff, ProfilerOn };
     
    4645enum FunctionMode { FunctionExpression, FunctionDeclaration };
    4746
    48 enum FunctionParseMode {
     47enum class SourceParseMode {
    4948    NormalFunctionMode,
    5049    GetterMode,
    5150    SetterMode,
    5251    MethodMode,
    53     NotAFunctionMode,
    54     ArrowFunctionMode
     52    ArrowFunctionMode,
     53    ProgramMode,
     54    ModuleAnalyzeMode,
     55    ModuleEvaluateMode
    5556};
     57
     58inline bool isFunctionParseMode(SourceParseMode parseMode)
     59{
     60    switch (parseMode) {
     61    case SourceParseMode::NormalFunctionMode:
     62    case SourceParseMode::GetterMode:
     63    case SourceParseMode::SetterMode:
     64    case SourceParseMode::MethodMode:
     65    case SourceParseMode::ArrowFunctionMode:
     66        return true;
     67
     68    case SourceParseMode::ProgramMode:
     69    case SourceParseMode::ModuleAnalyzeMode:
     70    case SourceParseMode::ModuleEvaluateMode:
     71        return false;
     72    }
     73    RELEASE_ASSERT_NOT_REACHED();
     74    return false;
     75}
     76
     77inline bool isModuleParseMode(SourceParseMode parseMode)
     78{
     79    switch (parseMode) {
     80    case SourceParseMode::ModuleAnalyzeMode:
     81    case SourceParseMode::ModuleEvaluateMode:
     82        return true;
     83
     84    case SourceParseMode::NormalFunctionMode:
     85    case SourceParseMode::GetterMode:
     86    case SourceParseMode::SetterMode:
     87    case SourceParseMode::MethodMode:
     88    case SourceParseMode::ArrowFunctionMode:
     89    case SourceParseMode::ProgramMode:
     90        return false;
     91    }
     92    RELEASE_ASSERT_NOT_REACHED();
     93    return false;
     94}
     95
     96inline bool isProgramParseMode(SourceParseMode parseMode)
     97{
     98    switch (parseMode) {
     99    case SourceParseMode::ProgramMode:
     100        return true;
     101
     102    case SourceParseMode::NormalFunctionMode:
     103    case SourceParseMode::GetterMode:
     104    case SourceParseMode::SetterMode:
     105    case SourceParseMode::MethodMode:
     106    case SourceParseMode::ArrowFunctionMode:
     107    case SourceParseMode::ModuleAnalyzeMode:
     108    case SourceParseMode::ModuleEvaluateMode:
     109        return false;
     110    }
     111    RELEASE_ASSERT_NOT_REACHED();
     112    return false;
     113}
    56114
    57115inline bool functionNameIsInScope(const Identifier& name, FunctionMode functionMode)
Note: See TracChangeset for help on using the changeset viewer.