Version 2.13.0-138.0.dev
Merge commit 'd6b79dab6c6401c08ec6bddf5f2beb84198e17dc' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 097e4fa..a1749b6 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -1044,10 +1044,43 @@
}
/// ```
- /// annotation:
- /// '@' qualified ('.' identifier)? arguments?
- /// ;
+ /// <metadata> ::= (‘@’ <metadatum>)*
+ /// <metadatum> ::= <identifier>
+ /// | <qualifiedName>
+ /// | <constructorDesignation> <arguments>
+ /// <qualifiedName> ::= <typeIdentifier> ‘.’ <identifier>
+ /// | <typeIdentifier> ‘.’ <typeIdentifier> ‘.’ <identifier>
+ /// <constructorDesignation> ::= <typeIdentifier>
+ /// | <qualifiedName>
+ /// | <typeName> <typeArguments> (‘.’ <identifier>)?
+ /// <typeName> ::= <typeIdentifier> (‘.’ <typeIdentifier>)?
/// ```
+ /// (where typeIdentifier is an identifier that's not on the list of
+ /// built in identifiers)
+ /// So these are legal:
+ /// * identifier
+ /// qualifiedName:
+ /// * typeIdentifier.identifier
+ /// * typeIdentifier.typeIdentifier.identifier
+ /// via constructorDesignation part 1
+ /// * typeIdentifier(arguments)
+ /// via constructorDesignation part 2
+ /// * typeIdentifier.identifier(arguments)
+ /// * typeIdentifier.typeIdentifier.identifier(arguments)
+ /// via constructorDesignation part 3
+ /// * typeIdentifier<typeArguments>(arguments)
+ /// * typeIdentifier<typeArguments>.identifier(arguments)
+ /// * typeIdentifier.typeIdentifier<typeArguments>(arguments)
+ /// * typeIdentifier.typeIdentifier<typeArguments>.identifier(arguments)
+ ///
+ /// So in another way (ignoring the difference between typeIdentifier and
+ /// identifier):
+ /// * 1, 2 or 3 identifiers with or without arguments.
+ /// * 1 or 2 identifiers, then type arguments, then possibly followed by a
+ /// single identifier, and then (required!) arguments.
+ ///
+ /// Note that if this is updated [skipMetadata] (in util.dart) should be
+ /// updated as well.
Token parseMetadata(Token token) {
Token atToken = token.next!;
assert(optional('@', atToken));
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/util.dart b/pkg/_fe_analyzer_shared/lib/src/parser/util.dart
index f6f1939..6891278 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/util.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/util.dart
@@ -105,10 +105,12 @@
token = token.next!;
assert(optional('@', token));
Token next = token.next!;
+ // Corresponds to 'ensureIdentifier' in [parseMetadata].
if (next.isIdentifier) {
token = next;
next = token.next!;
- while (optional('.', next)) {
+ // Corresponds to 'parseQualifiedRestOpt' in [parseMetadata].
+ if (optional('.', next)) {
token = next;
next = token.next!;
if (next.isIdentifier) {
@@ -116,6 +118,23 @@
next = token.next!;
}
}
+ // Corresponds to 'computeTypeParamOrArg' in [parseMetadata].
+ if (optional('<', next) && !next.endGroup!.isSynthetic) {
+ token = next.endGroup!;
+ next = token.next!;
+ }
+
+ // The extra .identifier after arguments in in [parseMetadata].
+ if (optional('.', next)) {
+ token = next;
+ next = token.next!;
+ if (next.isIdentifier) {
+ token = next;
+ next = token.next!;
+ }
+ }
+
+ // Corresponds to 'parseArgumentsOpt' in [parseMetadata].
if (optional('(', next) && !next.endGroup!.isSynthetic) {
token = next.endGroup!;
next = token.next!;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 4c6b895..93add07 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4253,7 +4253,8 @@
{bool isTearOff}) {
List<TypeParameter> typeParameters = target.function.typeParameters;
LocatedMessage argMessage = checkArgumentsForFunction(
- target.function, arguments, fileOffset, typeParameters);
+ target.function, arguments, fileOffset, typeParameters,
+ isExtensionMemberInvocation: true);
if (argMessage != null) {
return throwNoSuchMethodError(forest.createNullLiteral(fileOffset),
target.name.text, arguments, fileOffset,
@@ -4272,19 +4273,32 @@
@override
LocatedMessage checkArgumentsForFunction(FunctionNode function,
- Arguments arguments, int offset, List<TypeParameter> typeParameters) {
+ Arguments arguments, int offset, List<TypeParameter> typeParameters,
+ {bool isExtensionMemberInvocation = false}) {
+ int requiredPositionalParameterCountToReport =
+ function.requiredParameterCount;
+ int positionalParameterCountToReport = function.positionalParameters.length;
+ int positionalArgumentCountToReport =
+ forest.argumentsPositional(arguments).length;
+ if (isExtensionMemberInvocation) {
+ // Extension member invocations have additional synthetic parameter for
+ // `this`.
+ --requiredPositionalParameterCountToReport;
+ --positionalParameterCountToReport;
+ --positionalArgumentCountToReport;
+ }
if (forest.argumentsPositional(arguments).length <
function.requiredParameterCount) {
return fasta.templateTooFewArguments
- .withArguments(function.requiredParameterCount,
- forest.argumentsPositional(arguments).length)
+ .withArguments(requiredPositionalParameterCountToReport,
+ positionalArgumentCountToReport)
.withLocation(uri, arguments.fileOffset, noLength);
}
if (forest.argumentsPositional(arguments).length >
function.positionalParameters.length) {
return fasta.templateTooManyArguments
- .withArguments(function.positionalParameters.length,
- forest.argumentsPositional(arguments).length)
+ .withArguments(
+ positionalParameterCountToReport, positionalArgumentCountToReport)
.withLocation(uri, arguments.fileOffset, noLength);
}
List<NamedExpression> named = forest.argumentsNamed(arguments);
@@ -4331,19 +4345,32 @@
@override
LocatedMessage checkArgumentsForType(
- FunctionType function, Arguments arguments, int offset) {
+ FunctionType function, Arguments arguments, int offset,
+ {bool isExtensionMemberInvocation = false}) {
+ int requiredPositionalParameterCountToReport =
+ function.requiredParameterCount;
+ int positionalParameterCountToReport = function.positionalParameters.length;
+ int positionalArgumentCountToReport =
+ forest.argumentsPositional(arguments).length;
+ if (isExtensionMemberInvocation) {
+ // Extension member invocations have additional synthetic parameter for
+ // `this`.
+ --requiredPositionalParameterCountToReport;
+ --positionalParameterCountToReport;
+ --positionalArgumentCountToReport;
+ }
if (forest.argumentsPositional(arguments).length <
function.requiredParameterCount) {
return fasta.templateTooFewArguments
- .withArguments(function.requiredParameterCount,
- forest.argumentsPositional(arguments).length)
+ .withArguments(requiredPositionalParameterCountToReport,
+ positionalArgumentCountToReport)
.withLocation(uri, arguments.fileOffset, noLength);
}
if (forest.argumentsPositional(arguments).length >
function.positionalParameters.length) {
return fasta.templateTooManyArguments
- .withArguments(function.positionalParameters.length,
- forest.argumentsPositional(arguments).length)
+ .withArguments(
+ positionalParameterCountToReport, positionalArgumentCountToReport)
.withLocation(uri, arguments.fileOffset, noLength);
}
List<NamedExpression> named = forest.argumentsNamed(arguments);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
index 24f2850..572feea 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
@@ -21,7 +21,8 @@
{List<LocatedMessage> context, bool suppressMessage});
LocatedMessage checkArgumentsForType(
- FunctionType function, Arguments arguments, int offset);
+ FunctionType function, Arguments arguments, int offset,
+ {bool isExtensionMemberInvocation = false});
void addProblem(Message message, int charOffset, int length,
{List<LocatedMessage> context, bool wasHandled});
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 0c4eca9..78e4c89 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -2058,7 +2058,8 @@
bool isConst: false,
bool isImplicitExtensionMember: false,
bool isImplicitCall: false,
- Member staticTarget}) {
+ Member staticTarget,
+ bool isExtensionMemberInvocation = false}) {
int extensionTypeParameterCount = getExtensionTypeParameterCount(arguments);
if (extensionTypeParameterCount != 0) {
return _inferGenericExtensionMethodInvocation(extensionTypeParameterCount,
@@ -2079,7 +2080,8 @@
isConst: isConst,
isImplicitExtensionMember: isImplicitExtensionMember,
isImplicitCall: isImplicitCall,
- staticTarget: staticTarget);
+ staticTarget: staticTarget,
+ isExtensionMemberInvocation: isExtensionMemberInvocation);
}
InvocationInferenceResult _inferGenericExtensionMethodInvocation(
@@ -2114,7 +2116,8 @@
receiverType: receiverType,
isImplicitExtensionMember: isImplicitExtensionMember,
isImplicitCall: isImplicitCall,
- staticTarget: staticTarget);
+ staticTarget: staticTarget,
+ isExtensionMemberInvocation: true);
Substitution extensionSubstitution = Substitution.fromPairs(
extensionFunctionType.typeParameters, extensionArguments.types);
@@ -2171,7 +2174,8 @@
bool isConst: false,
bool isImplicitExtensionMember: false,
bool isImplicitCall,
- Member staticTarget}) {
+ Member staticTarget,
+ bool isExtensionMemberInvocation: false}) {
List<TypeParameter> calleeTypeParameters = calleeType.typeParameters;
if (calleeTypeParameters.isNotEmpty) {
// It's possible that one of the callee type parameters might match a type
@@ -2391,8 +2395,9 @@
List<DartType> positionalArgumentTypes = [];
List<NamedType> namedArgumentTypes = [];
if (typeChecksNeeded && !identical(calleeType, unknownFunction)) {
- LocatedMessage argMessage =
- helper.checkArgumentsForType(calleeType, arguments, offset);
+ LocatedMessage argMessage = helper.checkArgumentsForType(
+ calleeType, arguments, offset,
+ isExtensionMemberInvocation: isExtensionMemberInvocation);
if (argMessage != null) {
return new WrapInProblemInferenceResult(
const InvalidType(),
@@ -2860,7 +2865,8 @@
hoistedExpressions: hoistedExpressions,
receiverType: receiverType,
isImplicitExtensionMember: true,
- isImplicitCall: isImplicitCall);
+ isImplicitCall: isImplicitCall,
+ isExtensionMemberInvocation: true);
if (!isTopLevel) {
library.checkBoundsInStaticInvocation(staticInvocation,
typeSchemaEnvironment, helper.uri, getTypeArgumentsInfo(arguments));
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart b/pkg/front_end/parser_testcases/general/issue_45120.dart
new file mode 100644
index 0000000..bd3974e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart
@@ -0,0 +1,7 @@
+@A<int>(0)
+typedef F<@A<int>(0) T> = int Function<@A<int>(0) X>(@A<int>(0) int);
+
+void main() {
+ @A<int>(0)
+ void Function<@A<int>(0) X>(@A<int>(0) int y)? f = null;
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
new file mode 100644
index 0000000..1effedc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
@@ -0,0 +1,167 @@
+beginCompilationUnit(@)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, typedef)
+ endMetadataStar(1)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(void)
+ beginMetadataStar(void)
+ endMetadataStar(0)
+ beginTopLevelMember(void)
+ beginTopLevelMethod(;, null)
+ handleVoidKeyword(void)
+ handleIdentifier(main, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, void)
+ endMetadataStar(1)
+ beginFunctionType(void)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleVoidKeyword(void)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(A, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ handleLiteralInt(0)
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(y)
+ handleType(int, null)
+ handleIdentifier(y, formalParameterDeclaration)
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, ?)
+ beginVariablesDeclaration(f, null, null)
+ handleIdentifier(f, localVariableDeclaration)
+ beginInitializedIdentifier(f)
+ beginVariableInitializer(=)
+ handleLiteralNull(null)
+ endVariableInitializer(=)
+ endInitializedIdentifier(f)
+ endVariablesDeclaration(1, ;)
+ endBlockFunctionBody(1, {, })
+ endTopLevelMethod(void, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
new file mode 100644
index 0000000..63f2c9a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
@@ -0,0 +1,301 @@
+parseUnit(@)
+ skipErrorTokens(@)
+ listener: beginCompilationUnit(@)
+ syntheticPreviousToken(@)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(@)
+ parseMetadata()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, typedef)
+ listener: endMetadataStar(1)
+ parseTopLevelKeywordDeclaration(), typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(), typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(void)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(void)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(void)
+ parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, main, false)
+ listener: beginTopLevelMethod(;, null)
+ listener: handleVoidKeyword(void)
+ ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(main, topLevelFunctionDeclaration)
+ parseMethodTypeVar(main)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(main, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, @)
+ parseStatement({)
+ parseStatementX({)
+ parseExpressionStatementOrDeclaration({, false)
+ parseMetadataStar({)
+ listener: beginMetadataStar(@)
+ parseMetadata({)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, void)
+ listener: endMetadataStar(1)
+ parseExpressionStatementOrDeclarationAfterModifiers(), {, null, null, null, false)
+ looksLikeLocalFunction(f)
+ listener: beginFunctionType(void)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: handleVoidKeyword(void)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(A, metadataReference)
+ parseQualifiedRestOpt(A, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(0)
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(y)
+ listener: handleType(int, null)
+ ensureIdentifier(int, formalParameterDeclaration)
+ listener: handleIdentifier(y, formalParameterDeclaration)
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, ?)
+ listener: beginVariablesDeclaration(f, null, null)
+ parseVariablesDeclarationRest(?, true)
+ parseOptionallyInitializedIdentifier(?)
+ ensureIdentifier(?, localVariableDeclaration)
+ listener: handleIdentifier(f, localVariableDeclaration)
+ listener: beginInitializedIdentifier(f)
+ parseVariableInitializerOpt(f)
+ listener: beginVariableInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseLiteralNull(=)
+ listener: handleLiteralNull(null)
+ listener: endVariableInitializer(=)
+ listener: endInitializedIdentifier(f)
+ ensureSemicolon(null)
+ listener: endVariablesDeclaration(1, ;)
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(1, {, })
+ listener: endTopLevelMethod(void, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(@)
+ listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.parser.expect
new file mode 100644
index 0000000..954f749
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.parser.expect
@@ -0,0 +1,17 @@
+@A<int>(0)
+typedef F<@A<int>(0) T> = int Function<@A<int>(0) X>(@A<int>(0) int);
+
+void main() {
+@A<int>(0)
+void Function<@A<int>(0) X>(@A<int>(0) int y)? f = null;
+}
+
+
+@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken]
+void[KeywordToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] int[StringToken] y[StringToken])[SimpleToken]?[SimpleToken] f[StringToken] =[SimpleToken] null[KeywordToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.scanner.expect
new file mode 100644
index 0000000..954f749
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.scanner.expect
@@ -0,0 +1,17 @@
+@A<int>(0)
+typedef F<@A<int>(0) T> = int Function<@A<int>(0) X>(@A<int>(0) int);
+
+void main() {
+@A<int>(0)
+void Function<@A<int>(0) X>(@A<int>(0) int y)? f = null;
+}
+
+
+@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken]
+void[KeywordToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]A[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]0[StringToken])[SimpleToken] int[StringToken] y[StringToken])[SimpleToken]?[SimpleToken] f[StringToken] =[SimpleToken] null[KeywordToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart b/pkg/front_end/parser_testcases/general/metadata.dart
new file mode 100644
index 0000000..53003ad
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/metadata.dart
@@ -0,0 +1,40 @@
+// These 10 should be OK.
+@abstract
+@foo.abstract
+@foo.bar.abstract
+@foo("hello")
+@foo.abstract("hello")
+@foo.bar.abstract("hello")
+@foo<int>("hello")
+@foo<int>.abstract("hello")
+@foo.bar<int>("hello")
+@foo.bar<int>.abstract("hello")
+class X {}
+
+// They should also be OK in various places for instance:
+typedef F<@abstract T> = int Function<@abstract X>(@abstract int);
+typedef F<@foo.abstract T> = int Function<@foo.abstract X>(@foo.abstract int);
+typedef F<@foo.bar.abstract T> = int Function<@foo.bar.abstract X>(@foo.bar.abstract int);
+typedef F<@foo("hello") T> = int Function<@foo("hello") X>(@foo("hello") int);
+typedef F<@foo.abstract("hello") T> = int Function<@foo.abstract("hello") X>(@foo.abstract("hello") int);
+typedef F<@foo.bar.abstract("hello") T> = int Function<@foo.bar.abstract("hello") X>(@foo.bar.abstract("hello") int);
+typedef F<@foo<int>("hello") T> = int Function<@foo<int>("hello") X>(@foo<int>("hello") int);
+typedef F<@foo<int>.abstract("hello") T> = int Function<@foo<int>.abstract("hello") X>(@foo<int>.abstract("hello") int);
+typedef F<@foo.bar<int>("hello") T> = int Function<@foo.bar<int>("hello") X>(@foo.bar<int>("hello") int);
+typedef F<@foo.bar<int>.abstract("hello") T> = int Function<@foo.bar<int>.abstract("hello") X>(@foo.bar<int>.abstract("hello") int);
+
+// These 9 should fail because they start with a built in which is an
+// identifier but not a typeIdentifier.
+// We don't necessarily expect that parser to give the error though, the further
+// pipeline will give an error because there's no class, variable etc with that
+// name.
+@abstract.abstract
+@abstract.bar.abstract
+@abstract("hello")
+@abstract.abstract("hello")
+@abstract.bar.abstract("hello")
+@abstract<int>("hello")
+@abstract<int>.abstract("hello")
+@abstract.bar<int>("hello")
+@abstract.bar<int>.abstract("hello")
+class Y {}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
new file mode 100644
index 0000000..d342b49
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -0,0 +1,952 @@
+beginCompilationUnit(@)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleNoTypeArguments(@)
+ handleNoArguments(@)
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(@)
+ handleNoArguments(@)
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ handleNoArguments(@)
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., class)
+ endMetadataStar(10)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(X, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, X)
+ handleNoType(X)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleNoTypeArguments(T)
+ handleNoArguments(T)
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleNoTypeArguments(X)
+ handleNoArguments(X)
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleNoTypeArguments(int)
+ handleNoArguments(int)
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(T)
+ handleNoArguments(T)
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(X)
+ handleNoArguments(X)
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(int)
+ handleNoArguments(int)
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ handleNoArguments(T)
+ endMetadata(@, ., T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ handleNoArguments(X)
+ endMetadata(@, ., X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ handleNoArguments(int)
+ endMetadata(@, ., int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(typedef)
+ beginMetadataStar(typedef)
+ endMetadataStar(0)
+ beginUncategorizedTopLevelDeclaration(typedef)
+ beginFunctionTypeAlias(typedef)
+ handleIdentifier(F, typedefDeclaration)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., T)
+ endMetadataStar(1)
+ handleIdentifier(T, typeVariableDeclaration)
+ beginTypeVariable(T)
+ handleTypeVariablesDefined(T, 1)
+ handleNoType(T)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ beginFunctionType(int)
+ beginTypeVariables(<)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., X)
+ endMetadataStar(1)
+ handleIdentifier(X, typeVariableDeclaration)
+ beginTypeVariable(X)
+ handleTypeVariablesDefined(X, 1)
+ handleNoType(X)
+ endTypeVariable(>, 0, null, null)
+ endTypeVariables(<, >)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(Function)
+ handleType(int, null)
+ beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(foo, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., int)
+ endMetadataStar(1)
+ beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ endFunctionType(Function, null)
+ endFunctionTypeAlias(typedef, =, ;)
+ endTopLevelDeclaration(@)
+ beginMetadataStar(@)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(@)
+ handleNoArguments(@)
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ handleNoArguments(@)
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(abstract, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ handleNoTypeArguments(.)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, null, @)
+ beginMetadata(@)
+ handleIdentifier(abstract, metadataReference)
+ handleIdentifier(bar, metadataContinuation)
+ handleQualified(.)
+ beginTypeArguments(<)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(>)
+ handleType(int, null)
+ endTypeArguments(1, <, >)
+ handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ beginArguments(()
+ beginLiteralString("hello")
+ endLiteralString(0, ))
+ endArguments(1, (, ))
+ endMetadata(@, ., class)
+ endMetadataStar(9)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(Y, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, Y)
+ handleNoType(Y)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration()
+endCompilationUnit(12, )
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
new file mode 100644
index 0000000..9a0530c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -0,0 +1,1741 @@
+parseUnit(@)
+ skipErrorTokens(@)
+ listener: beginCompilationUnit(@)
+ syntheticPreviousToken(@)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(@)
+ parseMetadata()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: handleNoTypeArguments(@)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(@)
+ listener: endMetadata(@, null, @)
+ parseMetadata(abstract)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(@)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(@)
+ listener: endMetadata(@, null, @)
+ parseMetadata(abstract)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(@)
+ listener: endMetadata(@, ., @)
+ parseMetadata(abstract)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(foo)
+ parseArguments(foo)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., class)
+ listener: endMetadataStar(10)
+ parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(), class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(X, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, X)
+ parseClass(X, class, class, X)
+ parseClassHeaderOpt(X, class, class)
+ parseClassExtendsOpt(X)
+ listener: handleNoType(X)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(X)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(X)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(X, DeclarationKind.Class, X)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(}, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: handleNoTypeArguments(T)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(T)
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: handleNoTypeArguments(X)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(X)
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: handleNoTypeArguments(int)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(int)
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(T)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(T)
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(X)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(X)
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(int)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(int)
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(T)
+ listener: endMetadata(@, ., T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(X)
+ listener: endMetadata(@, ., X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(abstract, typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(int)
+ listener: endMetadata(@, ., int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(foo)
+ parseArguments(foo)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(foo)
+ parseArguments(foo)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(foo)
+ parseArguments(foo)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(typedef)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(typedef)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
+ parseTopLevelKeywordModifiers(;, typedef)
+ parseTypedef(typedef)
+ listener: beginUncategorizedTopLevelDeclaration(typedef)
+ listener: beginFunctionTypeAlias(typedef)
+ ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
+ listener: handleIdentifier(F, typedefDeclaration)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., T)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(T, typeVariableDeclaration)
+ listener: beginTypeVariable(T)
+ listener: handleTypeVariablesDefined(T, 1)
+ listener: handleNoType(T)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ listener: beginFunctionType(int)
+ listener: beginTypeVariables(<)
+ parseMetadataStar(<)
+ listener: beginMetadataStar(@)
+ parseMetadata(<)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., X)
+ listener: endMetadataStar(1)
+ ensureIdentifier(), typeVariableDeclaration)
+ listener: handleIdentifier(X, typeVariableDeclaration)
+ listener: beginTypeVariable(X)
+ listener: handleTypeVariablesDefined(X, 1)
+ listener: handleNoType(X)
+ listener: endTypeVariable(>, 0, null, null)
+ listener: endTypeVariables(<, >)
+ ensureIdentifier(=, typeReference)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(Function)
+ listener: handleType(int, null)
+ parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
+ parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+ listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+ parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ parseMetadataStar(()
+ listener: beginMetadataStar(@)
+ parseMetadata(()
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ listener: handleIdentifier(foo, metadataReference)
+ parseQualifiedRestOpt(foo, metadataContinuation)
+ parseQualifiedRest(foo, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., int)
+ listener: endMetadataStar(1)
+ listener: beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+ listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+ listener: endFunctionType(Function, null)
+ ensureSemicolon())
+ listener: endFunctionTypeAlias(typedef, =, ;)
+ listener: endTopLevelDeclaration(@)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(@)
+ parseMetadata(;)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(@)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(@)
+ listener: endMetadata(@, null, @)
+ parseMetadata(abstract)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ listener: handleNoArguments(@)
+ listener: endMetadata(@, ., @)
+ parseMetadata(abstract)
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: handleNoTypeArguments(.)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, null, @)
+ parseMetadata())
+ listener: beginMetadata(@)
+ ensureIdentifier(@, metadataReference)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataReference)
+ parseQualifiedRestOpt(abstract, metadataContinuation)
+ parseQualifiedRest(abstract, metadataContinuation)
+ ensureIdentifier(., metadataContinuation)
+ listener: handleIdentifier(bar, metadataContinuation)
+ listener: handleQualified(.)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(int, null)
+ listener: endTypeArguments(1, <, >)
+ ensureIdentifier(., metadataContinuationAfterTypeArguments)
+ inPlainSync()
+ listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
+ parseArgumentsOpt(abstract)
+ parseArguments(abstract)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString("hello")
+ listener: endLiteralString(0, ))
+ listener: endArguments(1, (, ))
+ listener: endMetadata(@, ., class)
+ listener: endMetadataStar(9)
+ parseTopLevelKeywordDeclaration(), class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(), class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(Y, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, Y)
+ parseClass(Y, class, class, Y)
+ parseClassHeaderOpt(Y, class, class)
+ parseClassExtendsOpt(Y)
+ listener: handleNoType(Y)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(Y)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(Y)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(Y, DeclarationKind.Class, Y)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(@)
+ listener: endCompilationUnit(12, )
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.parser.expect b/pkg/front_end/parser_testcases/general/metadata.dart.parser.expect
new file mode 100644
index 0000000..fb0a8af
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.parser.expect
@@ -0,0 +1,79 @@
+@abstract
+@foo.abstract
+@foo.bar.abstract
+@foo("hello")
+@foo.abstract("hello")
+@foo.bar.abstract("hello")
+@foo<int>("hello")
+@foo<int>.abstract("hello")
+@foo.bar<int>("hello")
+@foo.bar<int>.abstract("hello")
+class X {}
+
+
+typedef F<@abstract T> = int Function<@abstract X>(@abstract int);
+typedef F<@foo.abstract T> = int Function<@foo.abstract X>(@foo.abstract int);
+typedef F<@foo.bar.abstract T> = int Function<@foo.bar.abstract X>(@foo.bar.abstract int);
+typedef F<@foo("hello") T> = int Function<@foo("hello") X>(@foo("hello") int);
+typedef F<@foo.abstract("hello") T> = int Function<@foo.abstract("hello") X>(@foo.abstract("hello") int);
+typedef F<@foo.bar.abstract("hello") T> = int Function<@foo.bar.abstract("hello") X>(@foo.bar.abstract("hello") int);
+typedef F<@foo<int>("hello") T> = int Function<@foo<int>("hello") X>(@foo<int>("hello") int);
+typedef F<@foo<int>.abstract("hello") T> = int Function<@foo<int>.abstract("hello") X>(@foo<int>.abstract("hello") int);
+typedef F<@foo.bar<int>("hello") T> = int Function<@foo.bar<int>("hello") X>(@foo.bar<int>("hello") int);
+typedef F<@foo.bar<int>.abstract("hello") T> = int Function<@foo.bar<int>.abstract("hello") X>(@foo.bar<int>.abstract("hello") int);
+
+
+
+
+
+
+@abstract.abstract
+@abstract.bar.abstract
+@abstract("hello")
+@abstract.abstract("hello")
+@abstract.bar.abstract("hello")
+@abstract<int>("hello")
+@abstract<int>.abstract("hello")
+@abstract.bar<int>("hello")
+@abstract.bar<int>.abstract("hello")
+class Y {}
+
+@[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+class[KeywordToken] X[StringToken] {[BeginToken]}[SimpleToken]
+
+
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+
+
+
+
+
+
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+class[KeywordToken] Y[StringToken] {[BeginToken]}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.scanner.expect b/pkg/front_end/parser_testcases/general/metadata.dart.scanner.expect
new file mode 100644
index 0000000..fb0a8af
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.scanner.expect
@@ -0,0 +1,79 @@
+@abstract
+@foo.abstract
+@foo.bar.abstract
+@foo("hello")
+@foo.abstract("hello")
+@foo.bar.abstract("hello")
+@foo<int>("hello")
+@foo<int>.abstract("hello")
+@foo.bar<int>("hello")
+@foo.bar<int>.abstract("hello")
+class X {}
+
+
+typedef F<@abstract T> = int Function<@abstract X>(@abstract int);
+typedef F<@foo.abstract T> = int Function<@foo.abstract X>(@foo.abstract int);
+typedef F<@foo.bar.abstract T> = int Function<@foo.bar.abstract X>(@foo.bar.abstract int);
+typedef F<@foo("hello") T> = int Function<@foo("hello") X>(@foo("hello") int);
+typedef F<@foo.abstract("hello") T> = int Function<@foo.abstract("hello") X>(@foo.abstract("hello") int);
+typedef F<@foo.bar.abstract("hello") T> = int Function<@foo.bar.abstract("hello") X>(@foo.bar.abstract("hello") int);
+typedef F<@foo<int>("hello") T> = int Function<@foo<int>("hello") X>(@foo<int>("hello") int);
+typedef F<@foo<int>.abstract("hello") T> = int Function<@foo<int>.abstract("hello") X>(@foo<int>.abstract("hello") int);
+typedef F<@foo.bar<int>("hello") T> = int Function<@foo.bar<int>("hello") X>(@foo.bar<int>("hello") int);
+typedef F<@foo.bar<int>.abstract("hello") T> = int Function<@foo.bar<int>.abstract("hello") X>(@foo.bar<int>.abstract("hello") int);
+
+
+
+
+
+
+@abstract.abstract
+@abstract.bar.abstract
+@abstract("hello")
+@abstract.abstract("hello")
+@abstract.bar.abstract("hello")
+@abstract<int>("hello")
+@abstract<int>.abstract("hello")
+@abstract.bar<int>("hello")
+@abstract.bar<int>.abstract("hello")
+class Y {}
+
+@[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+class[KeywordToken] X[StringToken] {[BeginToken]}[SimpleToken]
+
+
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+typedef[KeywordToken] F[StringToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] T[StringToken]>[SimpleToken] =[SimpleToken] int[StringToken] Function[KeywordToken]<[BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] X[StringToken]>[SimpleToken]([BeginToken]@[SimpleToken]foo[StringToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken] int[StringToken])[SimpleToken];[SimpleToken]
+
+
+
+
+
+
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]
+@[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+@[SimpleToken]abstract[KeywordToken].[SimpleToken]bar[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]abstract[KeywordToken]([BeginToken]"hello"[StringToken])[SimpleToken]
+class[KeywordToken] Y[StringToken] {[BeginToken]}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 517d068..342696f 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -312,6 +312,7 @@
deserializes
deserializing
design
+designation
despite
destination
destinations
@@ -693,6 +694,7 @@
merely
meta
metadata's
+metadatum
method10a
method10b
method1a
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
index 8c0ab7a..3dfc9a6 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
@@ -34,14 +34,14 @@
// Extension(c1).foo();
// ^^^
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 2 required, 1 given.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
// Extension(c1).method();
// ^
// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
// method(a) {}
// ^^^^^^^^^^^^^...
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// Extension(c1).method(1, 2);
// ^
@@ -49,7 +49,7 @@
// method(a) {}
// ^^^^^^^^^^^^^...
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 2 required, 1 given.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
// Extension(c1).method(a: 1);
// ^
// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
@@ -199,14 +199,14 @@
invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:31:17: Error: Method not found: 'foo'.
Extension(c1).foo();
^^^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 2 required, 1 given.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
Extension(c1).method();
^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 2 allowed, but 3 found.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
Extension(c1).method(1, 2);
^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 2 required, 1 given.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
Extension(c1).method(a: 1);
^";
invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:38:27: Error: No named parameter with the name 'a'.
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
index 8c0ab7a..3dfc9a6 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
@@ -34,14 +34,14 @@
// Extension(c1).foo();
// ^^^
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 2 required, 1 given.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
// Extension(c1).method();
// ^
// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
// method(a) {}
// ^^^^^^^^^^^^^...
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 2 allowed, but 3 found.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// Extension(c1).method(1, 2);
// ^
@@ -49,7 +49,7 @@
// method(a) {}
// ^^^^^^^^^^^^^...
//
-// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 2 required, 1 given.
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
// Extension(c1).method(a: 1);
// ^
// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
@@ -199,14 +199,14 @@
invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:31:17: Error: Method not found: 'foo'.
Extension(c1).foo();
^^^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 2 required, 1 given.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
Extension(c1).method();
^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 2 allowed, but 3 found.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
Extension(c1).method(1, 2);
^";
- invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 2 required, 1 given.
+ invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
Extension(c1).method(a: 1);
^";
invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:38:27: Error: No named parameter with the name 'a'.
diff --git a/pkg/front_end/testcases/general/issue45204.dart b/pkg/front_end/testcases/general/issue45204.dart
new file mode 100644
index 0000000..ee754db
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension S on int {
+ void test(int x) {}
+}
+
+extension S2<X> on int {
+ void test2(int x) {}
+ void test3<Y>(Y y) {}
+}
+
+foo() {
+ 3.test();
+ 4.test(5, 6);
+ 5.test<int>(6);
+
+ 3.test2();
+ 4.test2(5, 6);
+ 5.test2<int>(6);
+
+ 3.test3();
+ 4.test3(5, 6);
+ 5.test3<int>(6);
+ 6.test3<int, int>(7);
+ 7.test3<int, int, int>(8);
+
+ S(3).test();
+ S(4).test(5, 6);
+ S(5).test<int>(6);
+
+ S2(3).test2();
+ S2(4).test2(5, 6);
+ S2(5).test2<int>(6);
+
+ S2(3).test3();
+ S2(4).test3(5, 6);
+ S2(5).test3<int>(6);
+ S2(6).test3<int, int>(7);
+ S2(7).test3<int, int, int>(8);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45204.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue45204.dart.textual_outline.expect
new file mode 100644
index 0000000..1eac4b0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+extension S on int {
+ void test(int x) {}
+}
+
+extension S2<X> on int {
+ void test2(int x) {}
+ void test3<Y>(Y y) {}
+}
+
+foo() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45204.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue45204.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1eac4b0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+extension S on int {
+ void test(int x) {}
+}
+
+extension S2<X> on int {
+ void test2(int x) {}
+ void test3<Y>(Y y) {}
+}
+
+foo() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45204.dart.weak.expect b/pkg/front_end/testcases/general/issue45204.dart.weak.expect
new file mode 100644
index 0000000..6488985
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.weak.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+// S(3).test();
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+// void test(int x) {}
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// S(4).test(5, 6);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+// void test(int x) {}
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+// S(5).test<int>(6);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+// void test(int x) {}
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+// S2(3).test2();
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+// void test2(int x) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// S2(4).test2(5, 6);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+// void test2(int x) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+// S2(5).test2<int>(6);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+// void test2(int x) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+// S2(3).test3();
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+// void test3<Y>(Y y) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// S2(4).test3(5, 6);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+// void test3<Y>(Y y) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+// S2(6).test3<int, int>(7);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+// void test3<Y>(Y y) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+// S2(7).test3<int, int, int>(8);
+// ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+// void test3<Y>(Y y) {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+// 3.test();
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// 4.test(5, 6);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+// 5.test<int>(6);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+// 3.test2();
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// 4.test2(5, 6);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+// 5.test2<int>(6);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+// 3.test3();
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// 4.test3(5, 6);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+// 6.test3<int, int>(7);
+// ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+// 7.test3<int, int, int>(8);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension S on core::int {
+ method test = self::S|test;
+ tearoff test = self::S|get#test;
+}
+extension S2<X extends core::Object? = dynamic> on core::int {
+ method test2 = self::S2|test2;
+ tearoff test2 = self::S2|get#test2;
+ method test3 = self::S2|test3;
+ tearoff test3 = self::S2|get#test3;
+}
+static method S|test(lowered final core::int #this, core::int x) → void {}
+static method S|get#test(lowered final core::int #this) → (core::int) → void
+ return (core::int x) → void => self::S|test(#this, x);
+static method S2|test2<X extends core::Object? = dynamic>(lowered final core::int #this, core::int x) → void {}
+static method S2|get#test2<X extends core::Object? = dynamic>(lowered final core::int #this) → (core::int) → void
+ return (core::int x) → void => self::S2|test2<self::S2|get#test2::X%>(#this, x);
+static method S2|test3<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(lowered final core::int #this, self::S2|test3::Y% y) → void {}
+static method S2|get#test3<X extends core::Object? = dynamic>(lowered final core::int #this) → <Y extends core::Object? = dynamic>(Y%) → void
+ return <Y extends core::Object? = dynamic>(Y% y) → void => self::S2|test3<self::S2|get#test3::X%, Y%>(#this, y);
+static method foo() → dynamic {
+ let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+ 3.test();
+ ^" in self::S|test(3);
+ let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ 4.test(5, 6);
+ ^" in self::S|test(4, 5, 6);
+ let final Never #t3 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+ 5.test<int>(6);
+ ^" in self::S|test<core::int>(5, 6);
+ let final Never #t4 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+ 3.test2();
+ ^" in self::S2|test2<dynamic>(3);
+ let final Never #t5 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ 4.test2(5, 6);
+ ^" in self::S2|test2<dynamic>(4, 5, 6);
+ let final Never #t6 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+ 5.test2<int>(6);
+ ^" in self::S2|test2<dynamic, core::int>(5, 6);
+ let final Never #t7 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+ 3.test3();
+ ^" in self::S2|test3<dynamic, dynamic>(3);
+ let final Never #t8 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ 4.test3(5, 6);
+ ^" in self::S2|test3<dynamic, core::int>(4, 5, 6);
+ self::S2|test3<dynamic, core::int>(5, 6);
+ let final Never #t9 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+ 6.test3<int, int>(7);
+ ^" in self::S2|test3<dynamic, core::int, core::int>(6, 7);
+ let final Never #t10 = invalid-expression "pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+ 7.test3<int, int, int>(8);
+ ^" in self::S2|test3<dynamic, core::int, core::int, core::int>(7, 8);
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+ S(3).test();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ S(4).test(5, 6);
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+ S(5).test<int>(6);
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+ S2(3).test2();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ S2(4).test2(5, 6);
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+ S2(5).test2<int>(6);
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+ S2(3).test3();
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ S2(4).test3(5, 6);
+ ^";
+ self::S2|test3<dynamic, core::int>(5, 6);
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+ S2(6).test3<int, int>(7);
+ ^";
+ invalid-expression "pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+ S2(7).test3<int, int, int>(8);
+ ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45204.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45204.dart.weak.outline.expect
new file mode 100644
index 0000000..2c95328
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension S on core::int {
+ method test = self::S|test;
+ tearoff test = self::S|get#test;
+}
+extension S2<X extends core::Object? = dynamic> on core::int {
+ method test2 = self::S2|test2;
+ tearoff test2 = self::S2|get#test2;
+ method test3 = self::S2|test3;
+ tearoff test3 = self::S2|get#test3;
+}
+static method S|test(lowered final core::int #this, core::int x) → void
+ ;
+static method S|get#test(lowered final core::int #this) → (core::int) → void
+ return (core::int x) → void => self::S|test(#this, x);
+static method S2|test2<X extends core::Object? = dynamic>(lowered final core::int #this, core::int x) → void
+ ;
+static method S2|get#test2<X extends core::Object? = dynamic>(lowered final core::int #this) → (core::int) → void
+ return (core::int x) → void => self::S2|test2<self::S2|get#test2::X%>(#this, x);
+static method S2|test3<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(lowered final core::int #this, self::S2|test3::Y% y) → void
+ ;
+static method S2|get#test3<X extends core::Object? = dynamic>(lowered final core::int #this) → <Y extends core::Object? = dynamic>(Y%) → void
+ return <Y extends core::Object? = dynamic>(Y% y) → void => self::S2|test3<self::S2|get#test3::X%, Y%>(#this, y);
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 2538568..0bc79fa 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -77,6 +77,7 @@
general/issue41210a: TypeCheckError
general/issue41210b/issue41210.no_link: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
+general/issue45204: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: TypeCheckError
general/mixin_constructors_with_default_values: RuntimeError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 31f6de1..58f937f 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -81,6 +81,7 @@
general/issue41210a: TypeCheckError
general/issue41210b/issue41210.no_link: TypeCheckError
general/issue41210b/issue41210: TypeCheckError
+general/issue45204: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: ExpectationFileMismatch # Too many errors.
general/mixin_application_override: TypeCheckError
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 8cbf77b..4ecf6ce 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -459,6 +459,7 @@
}
visitLet(Let node) {
+ if (_isCompileTimeErrorEncoding(node)) return;
visitWithLocalScope(node);
}
@@ -921,6 +922,12 @@
}
@override
+ void visitLet(Let node) {
+ if (_isCompileTimeErrorEncoding(node)) return;
+ super.visitLet(node);
+ }
+
+ @override
void defaultExpression(Expression node) {
try {
node.getStaticType(_staticTypeContext);
@@ -961,3 +968,7 @@
void checkInitializers(Constructor constructor) {
// TODO(ahe): I'll add more here in other CLs.
}
+
+bool _isCompileTimeErrorEncoding(TreeNode? node) {
+ return node is Let && node.variable.initializer is InvalidExpression;
+}
diff --git a/tools/VERSION b/tools/VERSION
index f036980..08ea31a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 137
+PRERELEASE 138
PRERELEASE_PATCH 0
\ No newline at end of file