8aa48712be
Previously, if a pattern variable declaration appeared outside of a function or method, the parser would get very confused. Now it recognizes the situation, issues a comprehensible error message, and replaces the pattern with a synthetic identifier token so that the analyzer AST is somewhat sensible. Fixes #51322. Bug: https://github.com/dart-lang/sdk/issues/51322 Change-Id: Ica5f060cb483a39c4e50942d639939b1fab40bea Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/293087 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
215 lines
12 KiB
Plaintext
215 lines
12 KiB
Plaintext
parseUnit(var)
|
|
skipErrorTokens(var)
|
|
listener: beginCompilationUnit(var)
|
|
syntheticPreviousToken(var)
|
|
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
|
|
parseMetadataStar()
|
|
listener: beginMetadataStar(var)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelMemberImpl()
|
|
listener: beginTopLevelMember(var)
|
|
skipOuterPattern(var)
|
|
skipObjectPatternRest(simpleIdentifier)
|
|
parseFields(, null, null, null, null, null, null, var, var, Instance of 'NoType', simpleIdentifier, DeclarationKind.TopLevel, null, false)
|
|
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
|
|
listener: handleNoType(var)
|
|
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
|
|
listener: handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
|
|
parseFieldInitializerOpt(simpleIdentifier, simpleIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
|
|
listener: beginFieldInitializer(=)
|
|
parseExpression(=)
|
|
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
|
|
parseUnaryExpression(=, true, ConstantPatternContext.none)
|
|
parsePrimary(=, expression, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
|
|
parseSend(=, expression, ConstantPatternContext.none)
|
|
isNextIdentifier(=)
|
|
ensureIdentifier(=, expression)
|
|
listener: handleIdentifier(f, expression)
|
|
listener: handleNoTypeArguments(<)
|
|
parseArgumentsOpt(f)
|
|
listener: handleNoArguments(<)
|
|
listener: handleSend(f, <)
|
|
listener: beginTypeArguments(<)
|
|
listener: handleIdentifier(a, typeReference)
|
|
listener: handleNoTypeArguments(,)
|
|
listener: handleType(a, null)
|
|
listener: handleIdentifier(b, typeReference)
|
|
listener: handleNoTypeArguments(>)
|
|
listener: handleType(b, null)
|
|
listener: endTypeArguments(2, <, >)
|
|
listener: handleTypeArgumentApplication(<)
|
|
listener: endFieldInitializer(=, ;)
|
|
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
|
|
listener: endTopLevelDeclaration(var)
|
|
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
|
|
parseMetadataStar(;)
|
|
listener: beginMetadataStar(var)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelMemberImpl(;)
|
|
listener: beginTopLevelMember(var)
|
|
skipOuterPattern(var)
|
|
skipObjectPatternRest(method)
|
|
parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', method, DeclarationKind.TopLevel, null, false)
|
|
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
|
|
listener: handleNoType(var)
|
|
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
|
|
listener: handleIdentifier(method, topLevelVariableDeclaration)
|
|
parseFieldInitializerOpt(method, method, null, null, null, null, var, DeclarationKind.TopLevel, null)
|
|
listener: beginFieldInitializer(=)
|
|
parseExpression(=)
|
|
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
|
|
parseUnaryExpression(=, true, ConstantPatternContext.none)
|
|
parsePrimary(=, expression, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
|
|
looksLikeFunctionBody(.)
|
|
parseSend(=, expression, ConstantPatternContext.none)
|
|
isNextIdentifier(=)
|
|
ensureIdentifier(=, expression)
|
|
listener: handleIdentifier(f, expression)
|
|
listener: handleNoTypeArguments(()
|
|
parseArgumentsOpt(f)
|
|
parseArguments(f)
|
|
parseArgumentsRest(()
|
|
listener: beginArguments(()
|
|
listener: endArguments(0, (, ))
|
|
listener: handleSend(f, .)
|
|
parsePrimary(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSend(., expressionContinuation, ConstantPatternContext.none)
|
|
isNextIdentifier(.)
|
|
ensureIdentifier(., expressionContinuation)
|
|
listener: handleIdentifier(m, expressionContinuation)
|
|
listener: handleNoTypeArguments(<)
|
|
parseArgumentsOpt(m)
|
|
listener: handleNoArguments(<)
|
|
listener: handleSend(m, <)
|
|
listener: handleEndingBinaryExpression(.)
|
|
listener: beginTypeArguments(<)
|
|
listener: handleIdentifier(a, typeReference)
|
|
listener: handleNoTypeArguments(,)
|
|
listener: handleType(a, null)
|
|
listener: handleIdentifier(b, typeReference)
|
|
listener: handleNoTypeArguments(>)
|
|
listener: handleType(b, null)
|
|
listener: endTypeArguments(2, <, >)
|
|
listener: handleTypeArgumentApplication(<)
|
|
listener: endFieldInitializer(=, ;)
|
|
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
|
|
listener: endTopLevelDeclaration(var)
|
|
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
|
|
parseMetadataStar(;)
|
|
listener: beginMetadataStar(var)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelMemberImpl(;)
|
|
listener: beginTopLevelMember(var)
|
|
skipOuterPattern(var)
|
|
skipObjectPatternRest(prefixedIdentifier)
|
|
parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', prefixedIdentifier, DeclarationKind.TopLevel, null, false)
|
|
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
|
|
listener: handleNoType(var)
|
|
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
|
|
listener: handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
|
|
parseFieldInitializerOpt(prefixedIdentifier, prefixedIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
|
|
listener: beginFieldInitializer(=)
|
|
parseExpression(=)
|
|
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
|
|
parseUnaryExpression(=, true, ConstantPatternContext.none)
|
|
parsePrimary(=, expression, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
|
|
parseSend(=, expression, ConstantPatternContext.none)
|
|
isNextIdentifier(=)
|
|
ensureIdentifier(=, expression)
|
|
listener: handleIdentifier(prefix, expression)
|
|
listener: handleNoTypeArguments(.)
|
|
parseArgumentsOpt(prefix)
|
|
listener: handleNoArguments(.)
|
|
listener: handleSend(prefix, .)
|
|
parsePrimary(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSend(., expressionContinuation, ConstantPatternContext.none)
|
|
isNextIdentifier(.)
|
|
ensureIdentifier(., expressionContinuation)
|
|
listener: handleIdentifier(f, expressionContinuation)
|
|
listener: handleNoTypeArguments(<)
|
|
parseArgumentsOpt(f)
|
|
listener: handleNoArguments(<)
|
|
listener: handleSend(f, <)
|
|
listener: handleEndingBinaryExpression(.)
|
|
listener: beginTypeArguments(<)
|
|
listener: handleIdentifier(a, typeReference)
|
|
listener: handleNoTypeArguments(,)
|
|
listener: handleType(a, null)
|
|
listener: handleIdentifier(b, typeReference)
|
|
listener: handleNoTypeArguments(>)
|
|
listener: handleType(b, null)
|
|
listener: endTypeArguments(2, <, >)
|
|
listener: handleTypeArgumentApplication(<)
|
|
listener: endFieldInitializer(=, ;)
|
|
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
|
|
listener: endTopLevelDeclaration(var)
|
|
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
|
|
parseMetadataStar(;)
|
|
listener: beginMetadataStar(var)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelMemberImpl(;)
|
|
listener: beginTopLevelMember(var)
|
|
skipOuterPattern(var)
|
|
skipObjectPatternRest(three_identifiers)
|
|
parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', three_identifiers, DeclarationKind.TopLevel, null, false)
|
|
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
|
|
listener: handleNoType(var)
|
|
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
|
|
listener: handleIdentifier(three_identifiers, topLevelVariableDeclaration)
|
|
parseFieldInitializerOpt(three_identifiers, three_identifiers, null, null, null, null, var, DeclarationKind.TopLevel, null)
|
|
listener: beginFieldInitializer(=)
|
|
parseExpression(=)
|
|
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
|
|
parseUnaryExpression(=, true, ConstantPatternContext.none)
|
|
parsePrimary(=, expression, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
|
|
parseSend(=, expression, ConstantPatternContext.none)
|
|
isNextIdentifier(=)
|
|
ensureIdentifier(=, expression)
|
|
listener: handleIdentifier(prefix, expression)
|
|
listener: handleNoTypeArguments(.)
|
|
parseArgumentsOpt(prefix)
|
|
listener: handleNoArguments(.)
|
|
listener: handleSend(prefix, .)
|
|
parsePrimary(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSend(., expressionContinuation, ConstantPatternContext.none)
|
|
isNextIdentifier(.)
|
|
ensureIdentifier(., expressionContinuation)
|
|
listener: handleIdentifier(ClassName, expressionContinuation)
|
|
listener: handleNoTypeArguments(.)
|
|
parseArgumentsOpt(ClassName)
|
|
listener: handleNoArguments(.)
|
|
listener: handleSend(ClassName, .)
|
|
listener: handleEndingBinaryExpression(.)
|
|
parsePrimary(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
|
|
parseSend(., expressionContinuation, ConstantPatternContext.none)
|
|
isNextIdentifier(.)
|
|
ensureIdentifier(., expressionContinuation)
|
|
listener: handleIdentifier(m, expressionContinuation)
|
|
listener: handleNoTypeArguments(<)
|
|
parseArgumentsOpt(m)
|
|
listener: handleNoArguments(<)
|
|
listener: handleSend(m, <)
|
|
listener: handleEndingBinaryExpression(.)
|
|
listener: beginTypeArguments(<)
|
|
listener: handleIdentifier(a, typeReference)
|
|
listener: handleNoTypeArguments(,)
|
|
listener: handleType(a, null)
|
|
listener: handleIdentifier(b, typeReference)
|
|
listener: handleNoTypeArguments(>)
|
|
listener: handleType(b, null)
|
|
listener: endTypeArguments(2, <, >)
|
|
listener: handleTypeArgumentApplication(<)
|
|
listener: endFieldInitializer(=, ;)
|
|
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
|
|
listener: endTopLevelDeclaration()
|
|
reportAllErrorTokens(var)
|
|
listener: endCompilationUnit(4, )
|