Ignore:
Timestamp:
Aug 6, 2017, 6:04:32 AM (8 years ago)
Author:
[email protected]
Message:

[Next] Async iteration - Implement Async Generator - parser
https://bugs.webkit.org/show_bug.cgi?id=175210

Reviewed by Yusuke Suzuki.

JSTests:

  • stress/async-await-syntax.js:

(testTopLevelAsyncAwaitSyntaxSloppyMode.testSyntax):

  • stress/async-iteration-syntax.js: Added.

(assert):
(checkSyntax):
(checkSyntaxError):
(checkSimpleAsyncGeneratorSloppyMode):
(checkSimpleAsyncGeneratorStrictMode):
(checkNestedAsyncGenerators):
(checkSimpleAsyncGeneratorSyntaxErrorInStrictMode):

  • stress/generator-class-methods-syntax.js:

Source/JavaScriptCore:

Current implementation is draft version of Async Iteration.
Link to spec https://tc39.github.io/proposal-async-iteration/

Current patch implement only parser part of the Async generator
Runtime part will be in next ptches

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createFunctionMetadata):

  • parser/Parser.cpp:

(JSC::getAsynFunctionBodyParseMode):
(JSC::Parser<LexerType>::parseInner):
(JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
(JSC::Parser<LexerType>::parseAsyncGeneratorFunctionSourceElements):
(JSC::stringArticleForFunctionMode):
(JSC::stringForFunctionMode):
(JSC::Parser<LexerType>::parseFunctionInfo):
(JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
(JSC::Parser<LexerType>::parseClass):
(JSC::Parser<LexerType>::parseProperty):
(JSC::Parser<LexerType>::parsePropertyMethod):
(JSC::Parser<LexerType>::parseAsyncFunctionExpression):

  • parser/Parser.h:

(JSC::Scope::setSourceParseMode):

  • parser/ParserModes.h:

(JSC::isFunctionParseMode):
(JSC::isAsyncFunctionParseMode):
(JSC::isAsyncArrowFunctionParseMode):
(JSC::isAsyncGeneratorFunctionParseMode):
(JSC::isAsyncFunctionOrAsyncGeneratorWrapperParseMode):
(JSC::isAsyncFunctionWrapperParseMode):
(JSC::isAsyncFunctionBodyParseMode):
(JSC::isGeneratorMethodParseMode):
(JSC::isAsyncMethodParseMode):
(JSC::isAsyncGeneratorMethodParseMode):
(JSC::isMethodParseMode):
(JSC::isGeneratorOrAsyncFunctionBodyParseMode):
(JSC::isGeneratorOrAsyncFunctionWrapperParseMode):

File:
1 edited

Legend:

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

    r215723 r220323  
    4343enum class FunctionMode { FunctionExpression, FunctionDeclaration, MethodDefinition };
    4444
    45 enum class SourceParseMode : uint16_t {
    46     NormalFunctionMode            = 0b0000000000000001,
    47     GeneratorBodyMode             = 0b0000000000000010,
    48     GeneratorWrapperFunctionMode  = 0b0000000000000100,
    49     GeneratorWrapperMethodMode    = 0b0000000000001000,
    50     GetterMode                    = 0b0000000000010000,
    51     SetterMode                    = 0b0000000000100000,
    52     MethodMode                    = 0b0000000001000000,
    53     ArrowFunctionMode             = 0b0000000010000000,
    54     AsyncFunctionBodyMode         = 0b0000000100000000,
    55     AsyncArrowFunctionBodyMode    = 0b0000001000000000,
    56     AsyncFunctionMode             = 0b0000010000000000,
    57     AsyncMethodMode               = 0b0000100000000000,
    58     AsyncArrowFunctionMode        = 0b0001000000000000,
    59     ProgramMode                   = 0b0010000000000000,
    60     ModuleAnalyzeMode             = 0b0100000000000000,
    61     ModuleEvaluateMode            = 0b1000000000000000,
     45enum class SourceParseMode : uint32_t {
     46    NormalFunctionMode                = 0b00000000000000000000000000000001,
     47    GeneratorBodyMode                 = 0b00000000000000000000000000000010,
     48    GeneratorWrapperFunctionMode      = 0b00000000000000000000000000000100,
     49    GetterMode                        = 0b00000000000000000000000000001000,
     50    SetterMode                        = 0b00000000000000000000000000010000,
     51    MethodMode                        = 0b00000000000000000000000000100000,
     52    ArrowFunctionMode                 = 0b00000000000000000000000001000000,
     53    AsyncFunctionBodyMode             = 0b00000000000000000000000010000000,
     54    AsyncArrowFunctionBodyMode        = 0b00000000000000000000000100000000,
     55    AsyncFunctionMode                 = 0b00000000000000000000001000000000,
     56    AsyncMethodMode                   = 0b00000000000000000000010000000000,
     57    AsyncArrowFunctionMode            = 0b00000000000000000000100000000000,
     58    ProgramMode                       = 0b00000000000000000001000000000000,
     59    ModuleAnalyzeMode                 = 0b00000000000000000010000000000000,
     60    ModuleEvaluateMode                = 0b00000000000000000100000000000000,
     61    AsyncGeneratorBodyMode            = 0b00000000000000001000000000000000,
     62    AsyncGeneratorWrapperFunctionMode = 0b00000000000000010000000000000000,
     63    AsyncGeneratorWrapperMethodMode   = 0b00000000000000100000000000000000,
     64    GeneratorWrapperMethodMode        = 0b00000000000001000000000000000000,
    6265};
    6366
     
    105108        SourceParseMode::AsyncMethodMode,
    106109        SourceParseMode::AsyncArrowFunctionMode,
    107         SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode);
     110        SourceParseMode::AsyncArrowFunctionBodyMode,
     111        SourceParseMode::AsyncGeneratorBodyMode,
     112        SourceParseMode::AsyncGeneratorWrapperFunctionMode,
     113        SourceParseMode::AsyncGeneratorWrapperMethodMode).contains(parseMode);
    108114}
    109115
    110116ALWAYS_INLINE bool isAsyncFunctionParseMode(SourceParseMode parseMode)
    111117{
    112     return SourceParseModeSet(
     118    return SourceParseModeSet(
     119        SourceParseMode::AsyncGeneratorWrapperFunctionMode,
     120        SourceParseMode::AsyncGeneratorBodyMode,
     121        SourceParseMode::AsyncGeneratorWrapperMethodMode,
    113122        SourceParseMode::AsyncFunctionBodyMode,
    114123        SourceParseMode::AsyncFunctionMode,
     
    121130{
    122131    return SourceParseModeSet(
    123         SourceParseMode::AsyncArrowFunctionMode, 
     132        SourceParseMode::AsyncArrowFunctionMode,
    124133        SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode);
    125134}
    126135
     136ALWAYS_INLINE bool isAsyncGeneratorFunctionParseMode(SourceParseMode parseMode)
     137{
     138    return SourceParseModeSet(
     139        SourceParseMode::AsyncGeneratorWrapperFunctionMode,
     140        SourceParseMode::AsyncGeneratorWrapperMethodMode).contains(parseMode);
     141}
     142
     143ALWAYS_INLINE bool isAsyncFunctionOrAsyncGeneratorWrapperParseMode(SourceParseMode parseMode)
     144{
     145    return SourceParseModeSet(
     146        SourceParseMode::AsyncArrowFunctionMode,
     147        SourceParseMode::AsyncFunctionMode,
     148        SourceParseMode::AsyncGeneratorWrapperFunctionMode,
     149        SourceParseMode::AsyncGeneratorWrapperMethodMode,
     150        SourceParseMode::AsyncMethodMode).contains(parseMode);
     151    }
     152   
    127153ALWAYS_INLINE bool isAsyncFunctionWrapperParseMode(SourceParseMode parseMode)
    128154{
    129155    return SourceParseModeSet(
    130156        SourceParseMode::AsyncArrowFunctionMode,
    131         SourceParseMode::AsyncFunctionMode, 
     157        SourceParseMode::AsyncFunctionMode,
    132158        SourceParseMode::AsyncMethodMode).contains(parseMode);
    133 } 
     159}
    134160
    135161ALWAYS_INLINE bool isAsyncFunctionBodyParseMode(SourceParseMode parseMode)
    136162{
    137163    return SourceParseModeSet(
    138         SourceParseMode::AsyncFunctionBodyMode,
     164        SourceParseMode::AsyncFunctionBodyMode,
     165        SourceParseMode::AsyncGeneratorBodyMode,
    139166        SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode);
    140 }
     167}
     168   
     169ALWAYS_INLINE bool isGeneratorMethodParseMode(SourceParseMode parseMode)
     170{
     171    return SourceParseModeSet(
     172        SourceParseMode::GeneratorWrapperMethodMode).contains(parseMode);
     173}
     174
     175ALWAYS_INLINE bool isAsyncMethodParseMode(SourceParseMode parseMode)
     176{
     177    return SourceParseModeSet(SourceParseMode::AsyncMethodMode).contains(parseMode);
     178}
     179   
     180ALWAYS_INLINE bool isAsyncGeneratorMethodParseMode(SourceParseMode parseMode)
     181{
     182    return SourceParseModeSet(SourceParseMode::AsyncGeneratorWrapperFunctionMode).contains(parseMode);
     183}
    141184
    142185ALWAYS_INLINE bool isMethodParseMode(SourceParseMode parseMode)
     
    147190        SourceParseMode::SetterMode,
    148191        SourceParseMode::MethodMode,
    149         SourceParseMode::AsyncMethodMode).contains(parseMode);
     192        SourceParseMode::AsyncMethodMode,
     193        SourceParseMode::AsyncGeneratorWrapperMethodMode).contains(parseMode);
    150194}
    151195
     
    155199        SourceParseMode::GeneratorBodyMode,
    156200        SourceParseMode::AsyncFunctionBodyMode,
     201        SourceParseMode::AsyncGeneratorBodyMode,
    157202        SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode);
    158203}
     
    165210        SourceParseMode::AsyncFunctionMode,
    166211        SourceParseMode::AsyncArrowFunctionMode,
    167         SourceParseMode::AsyncMethodMode).contains(parseMode);
     212        SourceParseMode::AsyncGeneratorWrapperFunctionMode,
     213        SourceParseMode::AsyncMethodMode,
     214        SourceParseMode::AsyncGeneratorWrapperMethodMode).contains(parseMode);
    168215}
    169216
Note: See TracChangeset for help on using the changeset viewer.