1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-03 08:19:13 +00:00

[parser] Breaking change for metadata parsing

https://github.com/dart-lang/language/blob/master/accepted/future-releases/records/records-feature-specification.md#ambiguity-with-metadata-annotations

Change-Id: I47e584868f2a12a2553cbd57e3e5b8fbacaa5f27
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/272600
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Jens Johansen 2022-12-20 11:22:58 +00:00 committed by Commit Queue
parent f74929e8e6
commit 6bce0d6b7a
30 changed files with 1223 additions and 69 deletions

View File

@ -1234,7 +1234,7 @@ class Parser {
reportRecoverableError(
token, codes.messageMetadataTypeArgumentsUninstantiated);
}
token = parseArgumentsOpt(token);
token = parseArgumentsOptMetadata(token);
listener.endMetadata(atToken, period, token.next!);
return token;
}
@ -7133,6 +7133,20 @@ class Parser {
}
}
/// Parse optional arguments specifically for metadata as metadata arguments
/// has to follow the previous token without space.
/// See also
/// https://github.com/dart-lang/language/blob/master/accepted/future-releases/records/records-feature-specification.md#ambiguity-with-metadata-annotations
Token parseArgumentsOptMetadata(Token token) {
Token next = token.next!;
if (!optional('(', next) || (token.charEnd != next.charOffset)) {
listener.handleNoArguments(next);
return token;
} else {
return parseArguments(token);
}
}
Token parseArgumentsOpt(Token token) {
Token next = token.next!;
if (!optional('(', next)) {

View File

@ -15,7 +15,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -47,7 +47,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -81,7 +81,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -121,7 +121,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -185,7 +185,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -214,7 +214,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -251,7 +251,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()

View File

@ -12,7 +12,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataReference)
parseQualifiedRestOpt(abstract, metadataContinuation)
listener: handleNoTypeArguments(@)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(@)
listener: endMetadata(@, null, @)
parseMetadata(abstract)
@ -26,7 +26,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(@)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(@)
listener: endMetadata(@, null, @)
parseMetadata(abstract)
@ -42,7 +42,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(@)
listener: endMetadata(@, ., @)
parseMetadata(abstract)
@ -51,7 +51,7 @@ parseUnit(@)
listener: handleIdentifier(foo, metadataReference)
parseQualifiedRestOpt(foo, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOpt(foo)
parseArgumentsOptMetadata(foo)
parseArguments(foo)
parseArgumentsRest(()
listener: beginArguments(()
@ -76,7 +76,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -103,7 +103,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -127,7 +127,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -154,7 +154,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -182,7 +182,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -213,7 +213,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -271,7 +271,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataReference)
parseQualifiedRestOpt(abstract, metadataContinuation)
listener: handleNoTypeArguments(T)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(T)
listener: endMetadata(@, null, T)
listener: endMetadataStar(1)
@ -293,7 +293,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataReference)
parseQualifiedRestOpt(abstract, metadataContinuation)
listener: handleNoTypeArguments(X)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(X)
listener: endMetadata(@, null, X)
listener: endMetadataStar(1)
@ -321,7 +321,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataReference)
parseQualifiedRestOpt(abstract, metadataContinuation)
listener: handleNoTypeArguments(int)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(int)
listener: endMetadata(@, null, int)
listener: endMetadataStar(1)
@ -361,7 +361,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(T)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(T)
listener: endMetadata(@, null, T)
listener: endMetadataStar(1)
@ -387,7 +387,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(X)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(X)
listener: endMetadata(@, null, X)
listener: endMetadataStar(1)
@ -419,7 +419,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(int)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(int)
listener: endMetadata(@, null, int)
listener: endMetadataStar(1)
@ -461,7 +461,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(T)
listener: endMetadata(@, ., T)
listener: endMetadataStar(1)
@ -489,7 +489,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(X)
listener: endMetadata(@, ., X)
listener: endMetadataStar(1)
@ -523,7 +523,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(int)
listener: endMetadata(@, ., int)
listener: endMetadataStar(1)
@ -558,7 +558,7 @@ parseUnit(@)
listener: handleIdentifier(foo, metadataReference)
parseQualifiedRestOpt(foo, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOpt(foo)
parseArgumentsOptMetadata(foo)
parseArguments(foo)
parseArgumentsRest(()
listener: beginArguments(()
@ -590,7 +590,7 @@ parseUnit(@)
listener: handleIdentifier(foo, metadataReference)
parseQualifiedRestOpt(foo, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOpt(foo)
parseArgumentsOptMetadata(foo)
parseArguments(foo)
parseArgumentsRest(()
listener: beginArguments(()
@ -628,7 +628,7 @@ parseUnit(@)
listener: handleIdentifier(foo, metadataReference)
parseQualifiedRestOpt(foo, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOpt(foo)
parseArgumentsOptMetadata(foo)
parseArguments(foo)
parseArgumentsRest(()
listener: beginArguments(()
@ -679,7 +679,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -716,7 +716,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -759,7 +759,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -812,7 +812,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -851,7 +851,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -896,7 +896,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -946,7 +946,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -982,7 +982,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1024,7 +1024,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1077,7 +1077,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1116,7 +1116,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1161,7 +1161,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1215,7 +1215,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1255,7 +1255,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1301,7 +1301,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1358,7 +1358,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1401,7 +1401,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1450,7 +1450,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1492,7 +1492,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(@)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(@)
listener: endMetadata(@, null, @)
parseMetadata(abstract)
@ -1509,7 +1509,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
listener: handleNoArguments(@)
listener: endMetadata(@, ., @)
parseMetadata(abstract)
@ -1519,7 +1519,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataReference)
parseQualifiedRestOpt(abstract, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1545,7 +1545,7 @@ parseUnit(@)
listener: handleIdentifier(abstract, metadataContinuation)
listener: handleQualified(.)
listener: handleNoTypeArguments(()
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1573,7 +1573,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1598,7 +1598,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1626,7 +1626,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()
@ -1655,7 +1655,7 @@ parseUnit(@)
listener: handleNoTypeArguments(>)
listener: handleType(int, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOpt(>)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
@ -1687,7 +1687,7 @@ parseUnit(@)
ensureIdentifier(., metadataContinuationAfterTypeArguments)
inPlainSync()
listener: handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
parseArgumentsOpt(abstract)
parseArgumentsOptMetadata(abstract)
parseArguments(abstract)
parseArgumentsRest(()
listener: beginArguments(()

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(final)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(final)
listener: endMetadata(@, null, final)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(final)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(final)
listener: endMetadata(@, null, final)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(final)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(final)
listener: endMetadata(@, null, final)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(final)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(final)
listener: endMetadata(@, null, final)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(final)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(final)
listener: endMetadata(@, null, final)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -48,7 +48,7 @@ parseUnit(f)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -54,7 +54,7 @@ parseUnit(void)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -50,7 +50,7 @@ parseUnit(void)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
parseArgumentsOptMetadata(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)

View File

@ -0,0 +1,36 @@
// These are parsed as argument lists to the annotation:
@metadata(x, y) a;
@metadata<T>(x, y) a;
@metadata <T>(x, y) a;
// These are parsed as record variable types:
@metadata (x, y) a;
@metadata
(x, y) a;
@metadata/* comment */(x, y) a;
@metadata // Comment.
(x,) a;
// Note that the NO_SPACE rule is applied unconditionally,
// even when the metadata annotation appears in a context where no ambiguity
// with record types is possible, as in:
@metadata (x, y)
class C {}
// This example has a syntax error because the (x, y) is not parsed as arguments
// to the metadata and can't be parsed as anything else either.
// Another interesting case is:
@metadata<T> (x, y) a;
// This is a syntax error because the <T> means there must be an argument list
// after it, but the NO_SPACE in metadatum prevents it from being parsed as such
// and the result is an error.
// (though apparently not a parser issued error)

View File

@ -0,0 +1,308 @@
Problems reported:
parser/record/metadata:2:17: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
@metadata(x, y) a;
^
parser/record/metadata:4:20: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
@metadata<T>(x, y) a;
^
parser/record/metadata:6:21: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
@metadata <T>(x, y) a;
^
parser/record/metadata:22:11: Expected a declaration, but got '('.
@metadata (x, y)
^
parser/record/metadata:22:12: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
@metadata (x, y)
^
parser/record/metadata:22:15: Expected ';' after this.
@metadata (x, y)
^
parser/record/metadata:22:16: Expected a declaration, but got ')'.
@metadata (x, y)
^
beginCompilationUnit(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(,)
handleNoArguments(,)
handleSend(x, ,)
handleIdentifier(y, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(y, ))
endArguments(2, (, ))
endMetadata(@, null, a)
endMetadataStar(1)
beginTopLevelMember(a)
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
handleRecoverableError(MissingConstFinalVarOrType, a, a)
handleNoType())
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, a, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
beginTypeArguments(<)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeArguments(1, <, >)
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(,)
handleNoArguments(,)
handleSend(x, ,)
handleIdentifier(y, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(y, ))
endArguments(2, (, ))
endMetadata(@, null, a)
endMetadataStar(1)
beginTopLevelMember(a)
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
handleRecoverableError(MissingConstFinalVarOrType, a, a)
handleNoType())
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, a, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
beginTypeArguments(<)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeArguments(1, <, >)
beginArguments(()
handleIdentifier(x, expression)
handleNoTypeArguments(,)
handleNoArguments(,)
handleSend(x, ,)
handleIdentifier(y, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(y, ))
endArguments(2, (, ))
endMetadata(@, null, a)
endMetadataStar(1)
beginTopLevelMember(a)
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
handleRecoverableError(MissingConstFinalVarOrType, a, a)
handleNoType())
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, a, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
beginRecordType(()
beginRecordTypeEntry()
beginMetadataStar(x)
endMetadataStar(0)
handleIdentifier(x, typeReference)
handleNoTypeArguments(,)
handleType(x, null)
handleNoName(,)
endRecordTypeEntry()
beginRecordTypeEntry()
beginMetadataStar(y)
endMetadataStar(0)
handleIdentifier(y, typeReference)
handleNoTypeArguments())
handleType(y, null)
handleNoName())
endRecordTypeEntry()
endRecordType((, null, 2, false)
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, (, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
beginRecordType(()
beginRecordTypeEntry()
beginMetadataStar(x)
endMetadataStar(0)
handleIdentifier(x, typeReference)
handleNoTypeArguments(,)
handleType(x, null)
handleNoName(,)
endRecordTypeEntry()
beginRecordTypeEntry()
beginMetadataStar(y)
endMetadataStar(0)
handleIdentifier(y, typeReference)
handleNoTypeArguments())
handleType(y, null)
handleNoName())
endRecordTypeEntry()
endRecordType((, null, 2, false)
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, (, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
beginRecordType(()
beginRecordTypeEntry()
beginMetadataStar(x)
endMetadataStar(0)
handleIdentifier(x, typeReference)
handleNoTypeArguments(,)
handleType(x, null)
handleNoName(,)
endRecordTypeEntry()
beginRecordTypeEntry()
beginMetadataStar(y)
endMetadataStar(0)
handleIdentifier(y, typeReference)
handleNoTypeArguments())
handleType(y, null)
handleNoName())
endRecordTypeEntry()
endRecordType((, null, 2, false)
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, (, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
beginRecordType(()
beginRecordTypeEntry()
beginMetadataStar(x)
endMetadataStar(0)
handleIdentifier(x, typeReference)
handleNoTypeArguments(,)
handleType(x, null)
handleNoName(,)
endRecordTypeEntry()
endRecordType((, null, 1, false)
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, (, ;)
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
handleNoTypeArguments(()
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '('., null, {lexeme: (}], (, ()
handleInvalidTopLevelDeclaration(()
endTopLevelDeclaration(x)
beginMetadataStar(x)
endMetadataStar(0)
beginTopLevelMember(x)
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ()
handleRecoverableError(MissingConstFinalVarOrType, x, x)
handleNoType(()
handleIdentifier(x, topLevelVariableDeclaration)
handleNoFieldInitializer(,)
handleIdentifier(y, topLevelVariableDeclaration)
handleNoFieldInitializer())
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], y, y)
endTopLevelFields(null, null, null, null, null, 2, x, ;)
endTopLevelDeclaration())
beginMetadataStar())
endMetadataStar(0)
beginTopLevelMember())
handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {lexeme: )}], ), ))
handleInvalidTopLevelDeclaration())
endTopLevelDeclaration(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C, classOrMixinDeclaration)
handleNoTypeVariables({)
beginClassDeclaration(class, null, null, null, null, null, null, C)
handleNoType(C)
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(@)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(metadata, metadataReference)
beginTypeArguments(<)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeArguments(1, <, >)
handleNoArguments(()
endMetadata(@, null, ()
endMetadataStar(1)
beginTopLevelMember(()
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, >)
beginRecordType(()
beginRecordTypeEntry()
beginMetadataStar(x)
endMetadataStar(0)
handleIdentifier(x, typeReference)
handleNoTypeArguments(,)
handleType(x, null)
handleNoName(,)
endRecordTypeEntry()
beginRecordTypeEntry()
beginMetadataStar(y)
endMetadataStar(0)
handleIdentifier(y, typeReference)
handleNoTypeArguments())
handleType(y, null)
handleNoName())
endRecordTypeEntry()
endRecordType((, null, 2, false)
handleIdentifier(a, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, (, ;)
endTopLevelDeclaration()
endCompilationUnit(12, )

View File

@ -0,0 +1,490 @@
parseUnit(@)
skipErrorTokens(@)
listener: beginCompilationUnit(@)
syntheticPreviousToken(@)
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
parseMetadataStar()
listener: beginMetadataStar(@)
parseMetadata()
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
parseArguments(metadata)
parseArgumentsRest(()
listener: beginArguments(()
parseExpression(()
parsePrecedenceExpression((, 1, true)
parseUnaryExpression((, true)
parsePrimary((, expression)
parseSendOrFunctionLiteral((, expression)
parseSend((, expression)
isNextIdentifier(()
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(,)
parseArgumentsOpt(x)
listener: handleNoArguments(,)
listener: handleSend(x, ,)
parseExpression(,)
parsePrecedenceExpression(,, 1, true)
parseUnaryExpression(,, true)
parsePrimary(,, expression)
parseSendOrFunctionLiteral(,, expression)
parseSend(,, expression)
isNextIdentifier(,)
ensureIdentifier(,, expression)
listener: handleIdentifier(y, expression)
listener: handleNoTypeArguments())
parseArgumentsOpt(y)
listener: handleNoArguments())
listener: handleSend(y, ))
listener: endArguments(2, (, ))
listener: endMetadata(@, null, a)
listener: endMetadataStar(1)
parseTopLevelMemberImpl())
listener: beginTopLevelMember(a)
isReservedKeyword(;)
parseFields(), null, null, null, null, null, null, null, ), Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
reportRecoverableError(a, MissingConstFinalVarOrType)
listener: handleRecoverableError(MissingConstFinalVarOrType, a, a)
listener: handleNoType())
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, a, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: beginTypeArguments(<)
listener: handleIdentifier(T, typeReference)
listener: handleNoTypeArguments(>)
listener: handleType(T, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
parseExpression(()
parsePrecedenceExpression((, 1, true)
parseUnaryExpression((, true)
parsePrimary((, expression)
parseSendOrFunctionLiteral((, expression)
parseSend((, expression)
isNextIdentifier(()
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(,)
parseArgumentsOpt(x)
listener: handleNoArguments(,)
listener: handleSend(x, ,)
parseExpression(,)
parsePrecedenceExpression(,, 1, true)
parseUnaryExpression(,, true)
parsePrimary(,, expression)
parseSendOrFunctionLiteral(,, expression)
parseSend(,, expression)
isNextIdentifier(,)
ensureIdentifier(,, expression)
listener: handleIdentifier(y, expression)
listener: handleNoTypeArguments())
parseArgumentsOpt(y)
listener: handleNoArguments())
listener: handleSend(y, ))
listener: endArguments(2, (, ))
listener: endMetadata(@, null, a)
listener: endMetadataStar(1)
parseTopLevelMemberImpl())
listener: beginTopLevelMember(a)
isReservedKeyword(;)
parseFields(), null, null, null, null, null, null, null, ), Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
reportRecoverableError(a, MissingConstFinalVarOrType)
listener: handleRecoverableError(MissingConstFinalVarOrType, a, a)
listener: handleNoType())
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, a, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: beginTypeArguments(<)
listener: handleIdentifier(T, typeReference)
listener: handleNoTypeArguments(>)
listener: handleType(T, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOptMetadata(>)
parseArguments(>)
parseArgumentsRest(()
listener: beginArguments(()
parseExpression(()
parsePrecedenceExpression((, 1, true)
parseUnaryExpression((, true)
parsePrimary((, expression)
parseSendOrFunctionLiteral((, expression)
parseSend((, expression)
isNextIdentifier(()
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(,)
parseArgumentsOpt(x)
listener: handleNoArguments(,)
listener: handleSend(x, ,)
parseExpression(,)
parsePrecedenceExpression(,, 1, true)
parseUnaryExpression(,, true)
parsePrimary(,, expression)
parseSendOrFunctionLiteral(,, expression)
parseSend(,, expression)
isNextIdentifier(,)
ensureIdentifier(,, expression)
listener: handleIdentifier(y, expression)
listener: handleNoTypeArguments())
parseArgumentsOpt(y)
listener: handleNoArguments())
listener: handleSend(y, ))
listener: endArguments(2, (, ))
listener: endMetadata(@, null, a)
listener: endMetadataStar(1)
parseTopLevelMemberImpl())
listener: beginTopLevelMember(a)
isReservedKeyword(;)
parseFields(), null, null, null, null, null, null, null, ), Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ))
reportRecoverableError(a, MissingConstFinalVarOrType)
listener: handleRecoverableError(MissingConstFinalVarOrType, a, a)
listener: handleNoType())
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, a, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(metadata)
listener: beginTopLevelMember(()
parseFields(metadata, null, null, null, null, null, null, null, metadata, Instance of 'ComplexTypeInfo', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
parseRecordType((, metadata, false)
listener: beginRecordType(()
parseRecordTypeField((, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: handleIdentifier(x, typeReference)
listener: handleNoTypeArguments(,)
listener: handleType(x, null)
listener: handleNoName(,)
listener: endRecordTypeEntry()
parseRecordTypeField(,, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(,)
listener: beginMetadataStar(y)
listener: endMetadataStar(0)
listener: handleIdentifier(y, typeReference)
listener: handleNoTypeArguments())
listener: handleType(y, null)
listener: handleNoName())
listener: endRecordTypeEntry()
listener: endRecordType((, null, 2, false)
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, (, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(metadata)
listener: beginTopLevelMember(()
parseFields(metadata, null, null, null, null, null, null, null, metadata, Instance of 'ComplexTypeInfo', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
parseRecordType((, metadata, false)
listener: beginRecordType(()
parseRecordTypeField((, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: handleIdentifier(x, typeReference)
listener: handleNoTypeArguments(,)
listener: handleType(x, null)
listener: handleNoName(,)
listener: endRecordTypeEntry()
parseRecordTypeField(,, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(,)
listener: beginMetadataStar(y)
listener: endMetadataStar(0)
listener: handleIdentifier(y, typeReference)
listener: handleNoTypeArguments())
listener: handleType(y, null)
listener: handleNoName())
listener: endRecordTypeEntry()
listener: endRecordType((, null, 2, false)
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, (, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(metadata)
listener: beginTopLevelMember(()
parseFields(metadata, null, null, null, null, null, null, null, metadata, Instance of 'ComplexTypeInfo', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
parseRecordType((, metadata, false)
listener: beginRecordType(()
parseRecordTypeField((, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: handleIdentifier(x, typeReference)
listener: handleNoTypeArguments(,)
listener: handleType(x, null)
listener: handleNoName(,)
listener: endRecordTypeEntry()
parseRecordTypeField(,, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(,)
listener: beginMetadataStar(y)
listener: endMetadataStar(0)
listener: handleIdentifier(y, typeReference)
listener: handleNoTypeArguments())
listener: handleType(y, null)
listener: handleNoName())
listener: endRecordTypeEntry()
listener: endRecordType((, null, 2, false)
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, (, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(metadata)
listener: beginTopLevelMember(()
parseFields(metadata, null, null, null, null, null, null, null, metadata, Instance of 'ComplexTypeInfo', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, metadata)
parseRecordType((, metadata, false)
listener: beginRecordType(()
parseRecordTypeField((, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: handleIdentifier(x, typeReference)
listener: handleNoTypeArguments(,)
listener: handleType(x, null)
listener: handleNoName(,)
listener: endRecordTypeEntry()
listener: endRecordType((, null, 1, false)
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, (, ;)
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar(@)
parseMetadata(;)
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: handleNoTypeArguments(()
parseArgumentsOptMetadata(metadata)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(metadata)
listener: beginTopLevelMember(()
isReservedKeyword(x)
parseInvalidTopLevelDeclaration(metadata)
reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '('., null, {lexeme: (}], (, ()
listener: handleInvalidTopLevelDeclaration(()
listener: endTopLevelDeclaration(x)
parseTopLevelDeclarationImpl((, Instance of 'DirectiveContext')
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
parseTopLevelMemberImpl(()
listener: beginTopLevelMember(x)
isReservedKeyword(,)
parseFields((, null, null, null, null, null, null, null, (, Instance of 'NoType', x, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ()
reportRecoverableError(x, MissingConstFinalVarOrType)
listener: handleRecoverableError(MissingConstFinalVarOrType, x, x)
listener: handleNoType(()
ensureIdentifierPotentiallyRecovered((, topLevelVariableDeclaration, false)
listener: handleIdentifier(x, topLevelVariableDeclaration)
parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(,)
ensureIdentifier(,, topLevelVariableDeclaration)
listener: handleIdentifier(y, topLevelVariableDeclaration)
parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer())
ensureSemicolon(y)
reportRecoverableError(y, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], y, y)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 2, x, ;)
listener: endTopLevelDeclaration())
parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
parseMetadataStar(;)
listener: beginMetadataStar())
listener: endMetadataStar(0)
listener: beginTopLevelMember())
parseInvalidTopLevelDeclaration(;)
reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {lexeme: )}], ), ))
listener: handleInvalidTopLevelDeclaration())
listener: endTopLevelDeclaration(class)
parseTopLevelDeclarationImpl(), Instance of 'DirectiveContext')
parseMetadataStar())
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(), class, null, null, null, Instance of 'DirectiveContext')
parseClassOrNamedMixinApplication(null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C, classOrMixinDeclaration)
listener: handleNoTypeVariables({)
listener: beginClassDeclaration(class, null, null, null, null, null, null, C)
parseClass(C, class, class, C)
parseClassHeaderOpt(C, class, class)
parseClassExtendsOpt(C)
listener: handleNoType(C)
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt(C)
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt(C)
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrValue(}, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(@)
parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
parseMetadataStar(})
listener: beginMetadataStar(@)
parseMetadata(})
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(metadata, metadataReference)
parseQualifiedRestOpt(metadata, metadataContinuation)
listener: beginTypeArguments(<)
listener: handleIdentifier(T, typeReference)
listener: handleNoTypeArguments(>)
listener: handleType(T, null)
listener: endTypeArguments(1, <, >)
parseArgumentsOptMetadata(>)
listener: handleNoArguments(()
listener: endMetadata(@, null, ()
listener: endMetadataStar(1)
parseTopLevelMemberImpl(>)
listener: beginTopLevelMember(()
parseFields(>, null, null, null, null, null, null, null, >, Instance of 'ComplexTypeInfo', a, DeclarationKind.TopLevel, null, false)
listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, >)
parseRecordType((, >, false)
listener: beginRecordType(()
parseRecordTypeField((, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: handleIdentifier(x, typeReference)
listener: handleNoTypeArguments(,)
listener: handleType(x, null)
listener: handleNoName(,)
listener: endRecordTypeEntry()
parseRecordTypeField(,, identifierIsOptional: true)
listener: beginRecordTypeEntry()
parseMetadataStar(,)
listener: beginMetadataStar(y)
listener: endMetadataStar(0)
listener: handleIdentifier(y, typeReference)
listener: handleNoTypeArguments())
listener: handleType(y, null)
listener: handleNoName())
listener: endRecordTypeEntry()
listener: endRecordType((, null, 2, false)
ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
listener: handleIdentifier(a, topLevelVariableDeclaration)
parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer(;)
listener: endTopLevelFields(null, null, null, null, null, 1, (, ;)
listener: endTopLevelDeclaration()
reportAllErrorTokens(@)
listener: endCompilationUnit(12, )

View File

@ -0,0 +1,75 @@
NOTICE: Stream was rewritten by parser!
@metadata(x, y) a;
@metadata<T>(x, y) a;
@metadata <T>(x, y) a;
@metadata (x, y) a;
@metadata
(x, y) a;
@metadata (x, y) a;
@metadata
(x,) a;
@metadata (x, y;)
class C {}
@metadata<T> (x, y) a;
@[SimpleToken]metadata[StringToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] <[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]
([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]
([BeginToken]x[StringToken],[SimpleToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken];[SyntheticToken])[SimpleToken]
class[KeywordToken] C[StringToken] {[BeginToken]}[SimpleToken]
@[SimpleToken]metadata[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
[SimpleToken]

View File

@ -0,0 +1,73 @@
@metadata(x, y) a;
@metadata<T>(x, y) a;
@metadata <T>(x, y) a;
@metadata (x, y) a;
@metadata
(x, y) a;
@metadata (x, y) a;
@metadata
(x,) a;
@metadata (x, y)
class C {}
@metadata<T> (x, y) a;
@[SimpleToken]metadata[StringToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] <[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]
([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken]
([BeginToken]x[StringToken],[SimpleToken])[SimpleToken] a[StringToken];[SimpleToken]
@[SimpleToken]metadata[StringToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken]
class[KeywordToken] C[StringToken] {[BeginToken]}[SimpleToken]
@[SimpleToken]metadata[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] ([BeginToken]x[StringToken],[SimpleToken] y[StringToken])[SimpleToken] a[StringToken];[SimpleToken]
[SimpleToken]

View File

@ -1908,6 +1908,15 @@ class TestParser extends Parser {
return result;
}
@override
Token parseArgumentsOptMetadata(Token token) {
doPrint('parseArgumentsOptMetadata(' '$token)');
indent++;
var result = super.parseArgumentsOptMetadata(token);
indent--;
return result;
}
@override
Token parseArgumentsOpt(Token token) {
doPrint('parseArgumentsOpt(' '$token)');

View File

@ -0,0 +1,13 @@
// Copyright (c) 2022, 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.
class metadata<T> {
const metadata();
}
// This is a syntax error because the <int> means there must be an argument list
// after it, but the NO_SPACE in metadatum prevents it from being parsed as such
// and the result is an error.
@metadata<int> (int, int) a = (42, 42);

View File

@ -0,0 +1,20 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^"
static field (core::int, core::int) a = (42, 42);

View File

@ -0,0 +1,25 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^"
static field (core::int, core::int) a = (42, 42);
Extra constant evaluation status:
Evaluated: RecordLiteral @ org-dartlang-testcase:///metadata.dart:13:31 -> RecordConstant(const (42, 42))
Extra constant evaluation: evaluated: 1, effectively constant: 1

View File

@ -0,0 +1,5 @@
class metadata<T> {
const metadata();
}
@metadata<int>
(int, int) a = (42, 42);

View File

@ -0,0 +1,20 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^"
static field (core::int, core::int) a = (42, 42);

View File

@ -0,0 +1,20 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^"
static field (core::int, core::int) a = (42, 42);

View File

@ -0,0 +1,20 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^" in self::metadata<dynamic>
static field (core::int, core::int) a;

View File

@ -0,0 +1,25 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
// @metadata<int> (int, int) a = (42, 42);
// ^
//
import self as self;
import "dart:core" as core;
class metadata<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
const constructor •() → self::metadata<self::metadata::T%>
: super core::Object::•()
;
}
@invalid-expression "pkg/front_end/testcases/records/metadata.dart:13:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
@metadata<int> (int, int) a = (42, 42);
^"
static field (core::int, core::int) a = (42, 42);
Extra constant evaluation status:
Evaluated: RecordLiteral @ org-dartlang-testcase:///metadata.dart:13:31 -> RecordConstant(const (42, 42))
Extra constant evaluation: evaluated: 1, effectively constant: 1

View File

@ -168,6 +168,7 @@ records/issue50157: FormatterCrash
records/issue50182: FormatterCrash
records/issue50514: FormatterCrash
records/issue50515: FormatterCrash
records/metadata: FormatterCrash
records/named_fields_clashing_with_positional: FormatterCrash
records/names_of_positional_fields_same_as_object_members: FormatterCrash
records/null_shorting: FormatterCrash