[parser] Declaring constructors - Parse primary constructor this body.

Added two listener calls `beginPrimaryConstructorBody` and
`endPrimaryConstructorBody` for parsing the `this` body.
No AST implementation has been done, only parsing.

Bug: https://github.com/dart-lang/sdk/issues/61699
Change-Id: I6aaf621bb3e67bfe00efe32de8097ca1e5048afb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/459901
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
This commit is contained in:
Kallen Tu
2025-11-07 13:14:13 -08:00
committed by Commit Queue
parent 85b6b1a6c9
commit 2692a110f0
53 changed files with 4392 additions and 452 deletions
@@ -2669,6 +2669,24 @@ class ForwardingListener implements Listener {
void endConstDotShorthand(Token token) {
listener?.beginConstDotShorthand(token);
}
@override
void beginPrimaryConstructorBody(Token token) {
listener?.beginPrimaryConstructorBody(token);
}
@override
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
listener?.endPrimaryConstructorBody(
beginToken,
beginInitializers,
endToken,
);
}
}
class NullListener extends ForwardingListener {
@@ -356,6 +356,21 @@ abstract class Listener implements UnescapeErrorListener {
bool forExtensionType,
) {}
void beginPrimaryConstructorBody(Token token) {}
// Handles the `this` body block for a primary constructor. Substructures:
/// - metadata
/// - initializers
/// - async marker
/// - body
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
logEvent("endPrimaryConstructorBody");
}
void beginCombinators(Token token) {}
void endCombinators(int count) {
@@ -3715,6 +3715,24 @@ class Parser {
return token;
}
Token parsePrimaryConstructorBody(Token token) {
Token beginToken = token;
listener.beginPrimaryConstructorBody(token);
Token? beforeInitializers = token;
token = parseInitializersOpt(beforeInitializers);
token = parseAsyncModifierOpt(token);
token = parseFunctionBody(
token,
/* ofFunctionExpression = */ false,
/* allowAbstract = */ inPlainSync,
);
listener.endPrimaryConstructorBody(beginToken, beforeInitializers, token);
return token;
}
/// Parses an extension type declaration after
///
/// 'extension' 'type'
@@ -5361,6 +5379,22 @@ class Parser {
return token;
}
// Fall through to continue parsing `operator` as an identifier.
} else if (identical(value, 'this')) {
Token next2 = next.next!;
if (next2.isA(TokenType.COLON) ||
next2.isA(TokenType.SEMICOLON) ||
next2.isA(TokenType.OPEN_CURLY_BRACKET)) {
if (!_isDeclaringConstructorsFeatureEnabled) {
reportExperimentNotEnabled(
ExperimentalFlag.declaringConstructors,
next,
next,
);
}
token = parsePrimaryConstructorBody(next);
listener.endMember();
return token;
}
} else if (!next.isIdentifier ||
(identical(value, 'typedef') &&
token == beforeStart &&
@@ -617,6 +617,11 @@ class AstBuilder extends StackListener {
debugEvent("PrimaryConstructor");
}
@override
void beginPrimaryConstructorBody(Token beginToken) {
debugEvent("PrimaryConstructorBody");
}
@override
void beginSwitchCaseWhenClause(Token when) {
debugEvent("PatternSwitchCaseGuard");
@@ -3168,6 +3173,23 @@ class AstBuilder extends StackListener {
}
}
@override
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
// TODO(declaring-constructors): Implement primary constructor body.
// ignore: unused_local_variable
var bodyObject = pop();
// ignore: unused_local_variable
var initializers = (pop() as List<ConstructorInitializerImpl>?) ?? const [];
// ignore: unused_local_variable
var separator = pop() as Token?;
// ignore: unused_local_variable
var metadata = pop() as List<AnnotationImpl>?;
}
@override
void endRecordLiteral(Token leftParenthesis, int count, Token? constKeyword) {
debugEvent("RecordLiteral");
@@ -1213,6 +1213,22 @@ class DietListener extends StackListenerImpl {
_memberScope = outermostScope;
}
@override
// Coverage-ignore(suite): Not run.
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
debugEvent("endPrimaryConstructorBody");
assert(
checkState(beginToken, [/* metadata token */ ValueKinds.TokenOrNull]),
);
// TODO(declaring-constructors): Implement primary constructor body.
pop() as Token?;
checkEmpty(beginToken.charOffset);
}
@override
void endExtensionTypeDeclaration(
Token beginToken,
@@ -1960,6 +1960,31 @@ class OutlineBuilder extends StackListenerImpl {
);
}
@override
// Coverage-ignore(suite): Not run.
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
debugEvent("endPrimaryConstructorBody");
assert(
checkState(beginToken, [
ValueKinds.MethodBody,
ValueKinds.AsyncModifier,
ValueKinds.MetadataListOrNull,
]),
);
// TODO(declaring-constructors): Implement primary constructor body.
// ignore: unused_local_variable
MethodBody bodyKind = pop() as MethodBody;
// ignore: unused_local_variable
AsyncMarker asyncModifier = pop() as AsyncMarker;
// ignore: unused_local_variable
List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
}
@override
void beginTopLevelMethod(
Token lastConsumed,
@@ -1533,6 +1533,18 @@ extension MemberExtension on MemberEnd {
if (child is EnumFactoryMethodEnd) return child;
throw "Not found";
}
bool isPrimaryConstructorBody() {
ParserAstNode child = children![1];
if (child is PrimaryConstructorBodyEnd) return true;
return false;
}
PrimaryConstructorBodyEnd getPrimaryConstructorBody() {
ParserAstNode child = children![1];
if (child is PrimaryConstructorBodyEnd) return child;
throw "Not found";
}
}
// Coverage-ignore(suite): Not run.
@@ -548,6 +548,30 @@ abstract class AbstractParserAstListener implements Listener {
seen(data);
}
@override
void beginPrimaryConstructorBody(Token token) {
PrimaryConstructorBodyBegin data = new PrimaryConstructorBodyBegin(
ParserAstType.BEGIN,
token: token,
);
seen(data);
}
@override
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
PrimaryConstructorBodyEnd data = new PrimaryConstructorBodyEnd(
ParserAstType.END,
beginToken: beginToken,
beginInitializers: beginInitializers,
endToken: endToken,
);
seen(data);
}
@override
void beginCombinators(Token token) {
CombinatorsBegin data = new CombinatorsBegin(
@@ -5082,6 +5106,46 @@ class NoPrimaryConstructorHandle extends ParserAstNode {
R accept<R>(ParserAstVisitor<R> v) => v.visitNoPrimaryConstructorHandle(this);
}
class PrimaryConstructorBodyBegin extends ParserAstNode {
final Token token;
PrimaryConstructorBodyBegin(ParserAstType type, {required this.token})
: super("PrimaryConstructorBody", type);
@override
Map<String, Object?> get deprecatedArguments => {"token": token};
@override
R accept<R>(ParserAstVisitor<R> v) =>
v.visitPrimaryConstructorBodyBegin(this);
}
class PrimaryConstructorBodyEnd extends ParserAstNode
implements BeginAndEndTokenParserAstNode {
@override
final Token beginToken;
final Token? beginInitializers;
@override
final Token endToken;
PrimaryConstructorBodyEnd(
ParserAstType type, {
required this.beginToken,
this.beginInitializers,
required this.endToken,
}) : super("PrimaryConstructorBody", type);
@override
Map<String, Object?> get deprecatedArguments => {
"beginToken": beginToken,
"beginInitializers": beginInitializers,
"endToken": endToken,
};
@override
R accept<R>(ParserAstVisitor<R> v) => v.visitPrimaryConstructorBodyEnd(this);
}
class CombinatorsBegin extends ParserAstNode {
final Token token;
@@ -11379,6 +11443,8 @@ abstract class ParserAstVisitor<R> {
R visitPrimaryConstructorBegin(PrimaryConstructorBegin node);
R visitPrimaryConstructorEnd(PrimaryConstructorEnd node);
R visitNoPrimaryConstructorHandle(NoPrimaryConstructorHandle node);
R visitPrimaryConstructorBodyBegin(PrimaryConstructorBodyBegin node);
R visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node);
R visitCombinatorsBegin(CombinatorsBegin node);
R visitCombinatorsEnd(CombinatorsEnd node);
R visitCompilationUnitBegin(CompilationUnitBegin node);
@@ -11917,6 +11983,14 @@ class RecursiveParserAstVisitor implements ParserAstVisitor<void> {
void visitNoPrimaryConstructorHandle(NoPrimaryConstructorHandle node) =>
node.visitChildren(this);
@override
void visitPrimaryConstructorBodyBegin(PrimaryConstructorBodyBegin node) =>
node.visitChildren(this);
@override
void visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node) =>
node.visitChildren(this);
@override
void visitCombinatorsBegin(CombinatorsBegin node) => node.visitChildren(this);
@@ -13384,6 +13458,15 @@ class RecursiveParserAstVisitorWithDefaultNodeAsync
NoPrimaryConstructorHandle node,
) => defaultNode(node);
@override
Future<void> visitPrimaryConstructorBodyBegin(
PrimaryConstructorBodyBegin node,
) => defaultNode(node);
@override
Future<void> visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node) =>
defaultNode(node);
@override
Future<void> visitCombinatorsBegin(CombinatorsBegin node) =>
defaultNode(node);
@@ -0,0 +1,15 @@
class C1() {
this {}
}
class C2() {
this : assert(1 > 2) {}
}
class C3() {
this;
}
class C4() {
this : assert(1 > 2);
}
@@ -0,0 +1,134 @@
beginCompilationUnit(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C1, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C2, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C3, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C4, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
endCompilationUnit(4, )
@@ -0,0 +1,264 @@
parseUnit(class)
skipErrorTokens(class)
listener: beginCompilationUnit(class)
syntheticPreviousToken(class)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C1, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
parseClass(C1, class, class, null, C1)
parsePrimaryConstructorOpt(C1, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C1)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C1)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C2, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
parseClass(C2, class, class, null, C2)
parsePrimaryConstructorOpt(C2, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C2)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C2)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C3, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
parseClass(C3, class, class, null, C3)
parsePrimaryConstructorOpt(C3, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C3)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C3)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C4, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
parseClass(C4, class, class, null, C4)
parsePrimaryConstructorOpt(C4, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C4)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C4)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(class)
listener: endCompilationUnit(4, )
@@ -0,0 +1,33 @@
class C1() {
this {}
}
class C2() {
this : assert(1 > 2) {}
}
class C3() {
this;
}
class C4() {
this : assert(1 > 2);
}
class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,33 @@
class C1() {
this {}
}
class C2() {
this : assert(1 > 2) {}
}
class C3() {
this;
}
class C4() {
this : assert(1 > 2);
}
class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,15 @@
class C1() {
this() {}
}
class C2() {
this(int x) : assert(1 > 2) {}
}
class C3() {
this();
}
class C4() {
this(int x) : assert(1 > 2);
}
@@ -0,0 +1,204 @@
Problems reported:
parser/declaring_constructors/class_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
this() {}
^^^^
parser/declaring_constructors/class_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
this(int x) : assert(1 > 2) {}
^^^^
parser/declaring_constructors/class_primary_constructor_body_error:6:3: The name of a constructor must match the name of the enclosing class.
this(int x) : assert(1 > 2) {}
^^^^
parser/declaring_constructors/class_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
this();
^^^^
parser/declaring_constructors/class_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
this(int x) : assert(1 > 2);
^^^^
parser/declaring_constructors/class_primary_constructor_body_error:14:3: The name of a constructor must match the name of the enclosing class.
this(int x) : assert(1 > 2);
^^^^
beginCompilationUnit(class)
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C1, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C1)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endClassMethod(null, this, (, null, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C2, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C2)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
handleRecoverableError(ConstructorWithWrongName, this, this)
endClassConstructor(null, this, (, :, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C3, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C3)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endClassMethod(null, this, (, null, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
beginMetadataStar(class)
endMetadataStar(0)
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
handleIdentifier(C4, classOrMixinDeclaration)
handleNoTypeVariables(()
beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, false)
handleNoType())
handleClassExtends(null, 1)
handleClassNoWithClause()
handleImplements(null, 0)
handleClassHeader(class, class, null)
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C4)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
handleRecoverableError(ConstructorWithWrongName, this, this)
endClassConstructor(null, this, (, :, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
endCompilationUnit(4, )
@@ -0,0 +1,344 @@
parseUnit(class)
skipErrorTokens(class)
listener: beginCompilationUnit(class)
syntheticPreviousToken(class)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C1, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
parseClass(C1, class, class, null, C1)
parsePrimaryConstructorOpt(C1, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C1)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C1)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.Class, C1, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C1)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endClassMethod(null, this, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C2, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
parseClass(C2, class, class, null, C2)
parsePrimaryConstructorOpt(C2, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C2)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C2)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.Class, C2, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C2)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
reportRecoverableError(this, ConstructorWithWrongName)
listener: handleRecoverableError(ConstructorWithWrongName, this, this)
listener: endClassConstructor(null, this, (, :, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C3, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
parseClass(C3, class, class, null, C3)
parsePrimaryConstructorOpt(C3, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C3)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C3)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.Class, C3, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C3)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
listener: endClassMethod(null, this, (, null, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(class)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
ensureIdentifier(class, classOrMixinDeclaration)
listener: handleIdentifier(C4, classOrMixinDeclaration)
listener: handleNoTypeVariables(()
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
parseClass(C4, class, class, null, C4)
parsePrimaryConstructorOpt(C4, null, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(C4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, false)
parseClassHeaderOpt(), class, class)
parseClassExtendsOpt(), DeclarationHeaderKind.Class)
listener: handleNoType())
listener: handleClassExtends(null, 1)
parseClassWithClauseOpt())
listener: handleClassNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleClassHeader(class, class, null)
parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C4)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C4)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.Class, C4, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C4)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
reportRecoverableError(this, ConstructorWithWrongName)
listener: handleRecoverableError(ConstructorWithWrongName, this, this)
listener: endClassConstructor(null, this, (, :, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(class)
listener: endCompilationUnit(4, )
@@ -0,0 +1,33 @@
class C1() {
this() {}
}
class C2() {
this(int x) : assert(1 > 2) {}
}
class C3() {
this();
}
class C4() {
this(int x) : assert(1 > 2);
}
class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,33 @@
class C1() {
this() {}
}
class C2() {
this(int x) : assert(1 > 2) {}
}
class C3() {
this();
}
class C4() {
this(int x) : assert(1 > 2);
}
class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,19 @@
enum const E1() {
e;
this {}
}
enum const E2() {
e;
this : assert(1 > 2) {}
}
enum const E3() {
e;
this;
}
enum const E4() {
e;
this : assert(1 > 2);
}
@@ -0,0 +1,170 @@
beginCompilationUnit(enum)
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E1, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(e)
endMetadataStar(0)
handleIdentifier(e, enumValueDeclaration)
handleNoTypeNameInConstructorReference(;)
beginConstructorReference(e)
handleNoTypeArguments(;)
handleNoConstructorReferenceContinuationAfterTypeArguments(e)
endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
handleNoArguments(e)
handleEnumElement({, null)
handleEnumElements(;, 1)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 1, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E2, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(e)
endMetadataStar(0)
handleIdentifier(e, enumValueDeclaration)
handleNoTypeNameInConstructorReference(;)
beginConstructorReference(e)
handleNoTypeArguments(;)
handleNoConstructorReferenceContinuationAfterTypeArguments(e)
endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
handleNoArguments(e)
handleEnumElement({, null)
handleEnumElements(;, 1)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 1, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E3, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(e)
endMetadataStar(0)
handleIdentifier(e, enumValueDeclaration)
handleNoTypeNameInConstructorReference(;)
beginConstructorReference(e)
handleNoTypeArguments(;)
handleNoConstructorReferenceContinuationAfterTypeArguments(e)
endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
handleNoArguments(e)
handleEnumElement({, null)
handleEnumElements(;, 1)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 1, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E4, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(e)
endMetadataStar(0)
handleIdentifier(e, enumValueDeclaration)
handleNoTypeNameInConstructorReference(;)
beginConstructorReference(e)
handleNoTypeArguments(;)
handleNoConstructorReferenceContinuationAfterTypeArguments(e)
endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
handleNoArguments(e)
handleEnumElement({, null)
handleEnumElements(;, 1)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 1, })
endTopLevelDeclaration(})
endCompilationUnit(4, )
@@ -0,0 +1,300 @@
parseUnit(enum)
skipErrorTokens(enum)
listener: beginCompilationUnit(enum)
syntheticPreviousToken(enum)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, , enum, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E1, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E1)
parsePrimaryConstructorOpt(E1, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(e)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
listener: handleIdentifier(e, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(;)
listener: beginConstructorReference(e)
listener: handleNoTypeArguments(;)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
listener: handleNoArguments(e)
listener: handleEnumElement({, null)
listener: handleEnumElements(;, 1)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E1)
parseMetadataStar(;)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 1, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E2, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E2)
parsePrimaryConstructorOpt(E2, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(e)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
listener: handleIdentifier(e, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(;)
listener: beginConstructorReference(e)
listener: handleNoTypeArguments(;)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
listener: handleNoArguments(e)
listener: handleEnumElement({, null)
listener: handleEnumElements(;, 1)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E2)
parseMetadataStar(;)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 1, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E3, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E3)
parsePrimaryConstructorOpt(E3, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(e)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
listener: handleIdentifier(e, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(;)
listener: beginConstructorReference(e)
listener: handleNoTypeArguments(;)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
listener: handleNoArguments(e)
listener: handleEnumElement({, null)
listener: handleEnumElements(;, 1)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E3)
parseMetadataStar(;)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 1, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E4, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E4)
parsePrimaryConstructorOpt(E4, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(e)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
listener: handleIdentifier(e, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(;)
listener: beginConstructorReference(e)
listener: handleNoTypeArguments(;)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
listener: handleNoArguments(e)
listener: handleEnumElement({, null)
listener: handleEnumElements(;, 1)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E4)
parseMetadataStar(;)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 1, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(enum)
listener: endCompilationUnit(4, )
@@ -0,0 +1,41 @@
enum const E1() {
e;
this {}
}
enum const E2() {
e;
this : assert(1 > 2) {}
}
enum const E3() {
e;
this;
}
enum const E4() {
e;
this : assert(1 > 2);
}
enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,41 @@
enum const E1() {
e;
this {}
}
enum const E2() {
e;
this : assert(1 > 2) {}
}
enum const E3() {
e;
this;
}
enum const E4() {
e;
this : assert(1 > 2);
}
enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
e[StringToken];[SimpleToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,23 @@
enum const E1() {
this() {}
}
enum const E2() {
this(int x) : assert(1 > 2) {}
}
enum const E3() {
this();
}
enum const E4() {
this(int x) : assert(1 > 2);
}
enum const E5() { // missing constants
this : assert(1 > 2);
}
enum const E6() { // missing constants
this {}
}
@@ -0,0 +1,257 @@
Problems reported:
parser/declaring_constructors/enum_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
this() {}
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:2:10: Expected '}' before this.
this() {}
^
parser/declaring_constructors/enum_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
this(int x) : assert(1 > 2) {}
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:6:12: Expected ',' before this.
this(int x) : assert(1 > 2) {}
^
parser/declaring_constructors/enum_primary_constructor_body_error:6:15: Expected '}' before this.
this(int x) : assert(1 > 2) {}
^
parser/declaring_constructors/enum_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
this();
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
this(int x) : assert(1 > 2);
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:14:12: Expected ',' before this.
this(int x) : assert(1 > 2);
^
parser/declaring_constructors/enum_primary_constructor_body_error:14:15: Expected '}' before this.
this(int x) : assert(1 > 2);
^
parser/declaring_constructors/enum_primary_constructor_body_error:18:3: 'this' can't be used as an identifier because it's a keyword.
this : assert(1 > 2);
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:18:8: Expected '}' before this.
this : assert(1 > 2);
^
parser/declaring_constructors/enum_primary_constructor_body_error:22:3: 'this' can't be used as an identifier because it's a keyword.
this {}
^^^^
parser/declaring_constructors/enum_primary_constructor_body_error:22:8: Expected '}' before this.
this {}
^
beginCompilationUnit(enum)
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E1, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference(()
beginConstructorReference(this)
handleNoTypeArguments(()
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
beginArguments(()
endArguments(0, (, ))
handleEnumElement({, null)
handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
handleEnumElements(}, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E2, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference(()
beginConstructorReference(this)
handleNoTypeArguments(()
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
beginArguments(()
handleIdentifier(int, expression)
handleNoTypeArguments(x)
handleNoArguments(x)
handleSend(int, int)
handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
handleIdentifier(x, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(x, x)
endArguments(2, (, ))
handleEnumElement({, null)
handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
handleEnumElements(}, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E3, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference(()
beginConstructorReference(this)
handleNoTypeArguments(()
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
beginArguments(()
endArguments(0, (, ))
handleEnumElement({, null)
handleEnumElements(;, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E4, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference(()
beginConstructorReference(this)
handleNoTypeArguments(()
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
beginArguments(()
handleIdentifier(int, expression)
handleNoTypeArguments(x)
handleNoArguments(x)
handleSend(int, int)
handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
handleIdentifier(x, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(x, x)
endArguments(2, (, ))
handleEnumElement({, null)
handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
handleEnumElements(}, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E5, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E5)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference(:)
beginConstructorReference(this)
handleNoTypeArguments(:)
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
handleNoArguments(this)
handleEnumElement({, null)
handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
handleEnumElements(}, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
beginMetadataStar(enum)
endMetadataStar(0)
beginEnumDeclarationPrelude(enum)
handleIdentifier(E6, enumDeclaration)
handleNoTypeVariables(()
beginEnumDeclaration(enum, null, enum, E6)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, const, false, false)
handleEnumNoWithClause()
handleImplements(null, 0)
handleEnumHeader(null, enum, {)
beginEnumBody({)
beginMetadataStar(this)
endMetadataStar(0)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, enumValueDeclaration)
handleNoTypeNameInConstructorReference({)
beginConstructorReference(this)
handleNoTypeArguments({)
handleNoConstructorReferenceContinuationAfterTypeArguments(this)
endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
handleNoArguments(this)
handleEnumElement({, null)
handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
handleEnumElements(}, 1)
endEnumBody({, })
endEnumDeclaration(enum, enum, {, 0, })
endTopLevelDeclaration(})
endCompilationUnit(6, )
@@ -0,0 +1,343 @@
parseUnit(enum)
skipErrorTokens(enum)
listener: beginCompilationUnit(enum)
syntheticPreviousToken(enum)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, , enum, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E1, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E1)
parsePrimaryConstructorOpt(E1, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(()
listener: beginConstructorReference(this)
listener: handleNoTypeArguments(()
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
parseConstructorInvocationArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
listener: endArguments(0, (, ))
listener: handleEnumElement({, null)
reportRecoverableError({, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
listener: handleEnumElements(}, 1)
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E2, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E2)
parsePrimaryConstructorOpt(E2, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(()
listener: beginConstructorReference(this)
listener: handleNoTypeArguments(()
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
parseConstructorInvocationArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(int)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(int, expression)
listener: handleNoTypeArguments(x)
parseArgumentsOpt(int)
listener: handleNoArguments(x)
listener: handleSend(int, int)
rewriteAndRecover(int, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
reportRecoverableError(x, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
rewriter()
allowedToShortcutParseExpression()
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments())
listener: handleNoArguments())
listener: handleSend(x, x)
listener: endArguments(2, (, ))
listener: handleEnumElement({, null)
reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
listener: handleEnumElements(}, 1)
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E3, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E3)
parsePrimaryConstructorOpt(E3, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(()
listener: beginConstructorReference(this)
listener: handleNoTypeArguments(()
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
parseConstructorInvocationArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
listener: endArguments(0, (, ))
listener: handleEnumElement({, null)
listener: handleEnumElements(;, 1)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E4, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E4)
parsePrimaryConstructorOpt(E4, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(()
listener: beginConstructorReference(this)
listener: handleNoTypeArguments(()
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
parseConstructorInvocationArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(int)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(int, expression)
listener: handleNoTypeArguments(x)
parseArgumentsOpt(int)
listener: handleNoArguments(x)
listener: handleSend(int, int)
rewriteAndRecover(int, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
reportRecoverableError(x, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
rewriter()
allowedToShortcutParseExpression()
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments())
listener: handleNoArguments())
listener: handleSend(x, x)
listener: endArguments(2, (, ))
listener: handleEnumElement({, null)
reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
listener: handleEnumElements(}, 1)
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E5, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E5)
parsePrimaryConstructorOpt(E5, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E5, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference(:)
listener: beginConstructorReference(this)
listener: handleNoTypeArguments(:)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
listener: handleNoArguments(this)
listener: handleEnumElement({, null)
reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
listener: handleEnumElements(}, 1)
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(enum)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseEnum(enum, null, enum)
listener: beginEnumDeclarationPrelude(enum)
ensureIdentifier(const, enumDeclaration)
listener: handleIdentifier(E6, enumDeclaration)
listener: handleNoTypeVariables(()
listener: beginEnumDeclaration(enum, null, enum, E6)
parsePrimaryConstructorOpt(E6, const, false)
listener: beginPrimaryConstructor(()
parseFormalParameters(E6, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, const, false, false)
parseEnumHeaderOpt(), enum)
parseEnumWithClauseOpt())
listener: handleEnumNoWithClause()
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
listener: handleEnumHeader(null, enum, {)
listener: beginEnumBody({)
parseEnumElement({)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
ensureIdentifier({, enumValueDeclaration)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, enumValueDeclaration)
listener: handleNoTypeNameInConstructorReference({)
listener: beginConstructorReference(this)
listener: handleNoTypeArguments({)
listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
listener: handleNoArguments(this)
listener: handleEnumElement({, null)
reportRecoverableError({, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
listener: handleEnumElements(}, 1)
listener: endEnumBody({, })
listener: endEnumDeclaration(enum, enum, {, 0, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(enum)
listener: endCompilationUnit(6, )
@@ -0,0 +1,51 @@
NOTICE: Stream was rewritten by parser!
enum const E1() {
this() {}
}
enum const E2() {
this(int ,x) : assert(1 > 2) {}
}
enum const E3() {
this();
}
enum const E4() {
this(int ,x) : assert(1 > 2);
}
enum const E5() {
this : assert(1 > 2);
}
enum const E6() {
this {}
}
enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] ,[SyntheticToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] ,[SyntheticToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E5[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E6[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,49 @@
enum const E1() {
this() {}
}
enum const E2() {
this(int x) : assert(1 > 2) {}
}
enum const E3() {
this();
}
enum const E4() {
this(int x) : assert(1 > 2);
}
enum const E5() {
this : assert(1 > 2);
}
enum const E6() {
this {}
}
enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E5[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
enum[KeywordToken] const[KeywordToken] E6[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,15 @@
extension type E1(int x) {
this {}
}
extension type E2(int x) {
this : assert(1 > 2) {}
}
extension type E3(int x) {
this;
}
extension type E4(int x) {
this : assert(1 > 2);
}
@@ -0,0 +1,150 @@
beginCompilationUnit(extension)
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endPrimaryConstructorBody(this, this, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
handleNoInitializers()
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginPrimaryConstructorBody(this)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
endPrimaryConstructorBody(this, this, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
endCompilationUnit(4, )
@@ -0,0 +1,276 @@
parseUnit(extension)
skipErrorTokens(extension)
listener: beginCompilationUnit(extension)
syntheticPreviousToken(extension)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, , extension, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E1)
parsePrimaryConstructorOpt(E1, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E1)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E1)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E2)
parsePrimaryConstructorOpt(E2, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E2)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E2)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endPrimaryConstructorBody(this, this, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E3)
parsePrimaryConstructorOpt(E3, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E3)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E3)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
listener: handleNoInitializers()
parseAsyncModifierOpt(this)
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(this, false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E4)
parsePrimaryConstructorOpt(E4, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E4)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E4)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parsePrimaryConstructorBody(this)
listener: beginPrimaryConstructorBody(this)
parseInitializersOpt(this)
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
listener: endPrimaryConstructorBody(this, this, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(extension)
listener: endCompilationUnit(4, )
@@ -0,0 +1,33 @@
extension type E1(int x) {
this {}
}
extension type E2(int x) {
this : assert(1 > 2) {}
}
extension type E3(int x) {
this;
}
extension type E4(int x) {
this : assert(1 > 2);
}
extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,33 @@
extension type E1(int x) {
this {}
}
extension type E2(int x) {
this : assert(1 > 2) {}
}
extension type E3(int x) {
this;
}
extension type E4(int x) {
this : assert(1 > 2);
}
extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken];[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,15 @@
extension type E1(int x) {
this(this.x) {}
}
extension type E2(int x) {
this(this.x) : assert(1 > 2) {}
}
extension type E3(int x) {
this(this.x) ;
}
extension type E4(int x) {
this(this.x) : assert(1 > 2);
}
@@ -0,0 +1,235 @@
Problems reported:
parser/declaring_constructors/extension_type_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
this(this.x) {}
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
this(this.x) : assert(1 > 2) {}
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:6:3: The name of a constructor must match the name of the enclosing class.
this(this.x) : assert(1 > 2) {}
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
this(this.x) ;
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:10:3: Extension types can't declare abstract members.
this(this.x) ;
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
this(this.x) : assert(1 > 2);
^^^^
parser/declaring_constructors/extension_type_primary_constructor_body_error:14:3: The name of a constructor must match the name of the enclosing class.
this(this.x) : assert(1 > 2);
^^^^
beginCompilationUnit(extension)
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E1)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E1)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
beginMetadataStar(this)
endMetadataStar(0)
beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
handleNoType(()
handleIdentifier(x, fieldInitializer)
handleFormalParameterWithoutValue())
endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endExtensionTypeMethod(null, this, (, null, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E2)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E2)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
beginMetadataStar(this)
endMetadataStar(0)
beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
handleNoType(()
handleIdentifier(x, fieldInitializer)
handleFormalParameterWithoutValue())
endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
handleRecoverableError(ConstructorWithWrongName, this, this)
endExtensionTypeConstructor(null, this, (, :, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E3)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E3)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
beginMetadataStar(this)
endMetadataStar(0)
beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
handleNoType(()
handleIdentifier(x, fieldInitializer)
handleFormalParameterWithoutValue())
endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
handleNoInitializers()
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
handleRecoverableError(ExtensionTypeDeclaresAbstractMember, this, this)
endExtensionTypeMethod(null, this, (, null, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
beginMetadataStar(extension)
endMetadataStar(0)
beginExtensionDeclarationPrelude(extension)
handleNoTypeVariables(()
beginExtensionTypeDeclaration(null, extension, E4)
beginPrimaryConstructor(()
beginFormalParameters((, MemberKind.PrimaryConstructor)
beginMetadataStar(int)
endMetadataStar(0)
beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
handleIdentifier(int, typeReference)
handleNoTypeArguments(x)
handleType(int, null)
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
endPrimaryConstructor((, null, false, true)
handleImplements(null, 0)
beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
beginMetadataStar(this)
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E4)
handleNoType({)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
beginMetadataStar(this)
endMetadataStar(0)
beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
handleNoType(()
handleIdentifier(x, fieldInitializer)
handleFormalParameterWithoutValue())
endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
beginInitializers(:)
beginInitializer(assert)
beginAssert(assert, Assert.Initializer)
handleLiteralInt(1)
beginBinaryExpression(>)
handleLiteralInt(2)
endBinaryExpression(>, 2)
endAssert(assert, Assert.Initializer, (, null, ))
endInitializer())
endInitializers(1, :, ))
handleAsyncModifier(null, null)
handleEmptyFunctionBody(;)
handleRecoverableError(ConstructorWithWrongName, this, this)
endExtensionTypeConstructor(null, this, (, :, ;)
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
endExtensionTypeDeclaration(extension, null, extension, type, })
endTopLevelDeclaration(})
endCompilationUnit(4, )
@@ -0,0 +1,374 @@
parseUnit(extension)
skipErrorTokens(extension)
listener: beginCompilationUnit(extension)
syntheticPreviousToken(extension)
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
parseMetadataStar()
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, , extension, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E1)
parsePrimaryConstructorOpt(E1, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E1, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E1)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E1)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.ExtensionType, E1, false)
listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E1)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier(., fieldInitializer)
listener: handleIdentifier(x, fieldInitializer)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
listener: endExtensionTypeMethod(null, this, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E2)
parsePrimaryConstructorOpt(E2, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E2, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E2)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E2)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.ExtensionType, E2, false)
listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E2)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier(., fieldInitializer)
listener: handleIdentifier(x, fieldInitializer)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
parseInitializersOpt())
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(0, {, })
reportRecoverableError(this, ConstructorWithWrongName)
listener: handleRecoverableError(ConstructorWithWrongName, this, this)
listener: endExtensionTypeConstructor(null, this, (, :, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E3)
parsePrimaryConstructorOpt(E3, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E3, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E3)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E3)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.ExtensionType, E3, false)
listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E3)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier(., fieldInitializer)
listener: handleIdentifier(x, fieldInitializer)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
reportRecoverableError(this, ExtensionTypeDeclaresAbstractMember)
listener: handleRecoverableError(ExtensionTypeDeclaresAbstractMember, this, this)
listener: endExtensionTypeMethod(null, this, (, null, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
parseMetadataStar(})
listener: beginMetadataStar(extension)
listener: endMetadataStar(0)
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
parseExtension(extension, null, extension)
listener: beginExtensionDeclarationPrelude(extension)
parseExtensionTypeDeclaration(extension, type, null, extension, type)
listener: handleNoTypeVariables(()
listener: beginExtensionTypeDeclaration(null, extension, E4)
parsePrimaryConstructorOpt(E4, null, true)
listener: beginPrimaryConstructor(()
parseFormalParameters(E4, MemberKind.PrimaryConstructor)
parseFormalParametersRest((, MemberKind.PrimaryConstructor)
listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
listener: endPrimaryConstructor((, null, false, true)
parseClassOrMixinOrEnumImplementsOpt())
listener: handleImplements(null, 0)
parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E4)
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
notEofOrType(CLOSE_CURLY_BRACKET, this)
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E4)
parseMetadataStar({)
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginMember()
parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, this, DeclarationKind.ExtensionType, E4, false)
listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E4)
listener: handleNoType({)
ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(this)
listener: endMetadataStar(0)
listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier(., fieldInitializer)
listener: handleIdentifier(x, fieldInitializer)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
parseInitializersOpt())
parseInitializers(:)
listener: beginInitializers(:)
parseInitializer(:)
listener: beginInitializer(assert)
parseAssert(:, Assert.Initializer)
listener: beginAssert(assert, Assert.Initializer)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseLiteralInt(()
listener: handleLiteralInt(1)
listener: beginBinaryExpression(>)
parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
parseUnaryExpression(>, true, ConstantPatternContext.none)
parsePrimary(>, expression, ConstantPatternContext.none)
parseLiteralInt(>)
listener: handleLiteralInt(2)
listener: endBinaryExpression(>, 2)
listener: endAssert(assert, Assert.Initializer, (, null, ))
listener: endInitializer())
listener: endInitializers(1, :, ))
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
inPlainSync()
parseFunctionBody(), false, true)
listener: handleEmptyFunctionBody(;)
reportRecoverableError(this, ConstructorWithWrongName)
listener: handleRecoverableError(ConstructorWithWrongName, this, this)
listener: endExtensionTypeConstructor(null, this, (, :, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
listener: endExtensionTypeDeclaration(extension, null, extension, type, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(extension)
listener: endCompilationUnit(4, )
@@ -0,0 +1,33 @@
extension type E1(int x) {
this(this.x) {}
}
extension type E2(int x) {
this(this.x) : assert(1 > 2) {}
}
extension type E3(int x) {
this(this.x) ;
}
extension type E4(int x) {
this(this.x) : assert(1 > 2);
}
extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] ;[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -0,0 +1,33 @@
extension type E1(int x) {
this(this.x) {}
}
extension type E2(int x) {
this(this.x) : assert(1 > 2) {}
}
extension type E3(int x) {
this(this.x) ;
}
extension type E4(int x) {
this(this.x) : assert(1 > 2);
}
extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] ;[SimpleToken]
}[SimpleToken]
extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
@@ -1669,29 +1669,28 @@ parseUnit(class)
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginMember()
recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, SimpleType(), null, DeclarationKind.Class, WrapperClass)
parseFields(;, null, null, null, null, null, null, null, ;, SimpleType(), this, DeclarationKind.Class, WrapperClass, false)
listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, fieldDeclaration)
parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
listener: beginFieldInitializer(=)
parseExpression(=)
looksLikeOuterPatternEquals(=)
skipOuterPattern(=)
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
parseUnaryExpression(=, true, ConstantPatternContext.none)
parsePrimary(=, expression, ConstantPatternContext.none)
parseLiteralInt(=)
listener: handleLiteralInt(42)
listener: endFieldInitializer(=, 42)
listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
parseFields(;, null, null, null, null, null, null, null, ;, SimpleType(), this, DeclarationKind.Class, WrapperClass, false)
listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, fieldDeclaration)
parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
listener: beginFieldInitializer(=)
parseExpression(=)
looksLikeOuterPatternEquals(=)
skipOuterPattern(=)
parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
parseUnaryExpression(=, true, ConstantPatternContext.none)
parsePrimary(=, expression, ConstantPatternContext.none)
parseLiteralInt(=)
listener: handleLiteralInt(42)
listener: endFieldInitializer(=, 42)
listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, int)
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
parseMetadataStar(;)
@@ -348,14 +348,6 @@ parser/error_recovery/keyword_named_class_methods:298:7: 'this' can't be used as
int this(int x) {
^^^^
parser/error_recovery/keyword_named_class_methods:298:7: Expected ';' after this.
int this(int x) {
^^^^
parser/error_recovery/keyword_named_class_methods:298:11: Expected an identifier, but got '('.
int this(int x) {
^
parser/error_recovery/keyword_named_class_methods:303:7: 'throw' can't be used as an identifier because it's a keyword.
int throw(int x) {
^^^^^
@@ -4105,23 +4097,12 @@ beginCompilationUnit(class)
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
handleIdentifier(int, typeReference)
handleNoTypeArguments(this)
handleType(int, null)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, fieldDeclaration)
handleNoFieldInitializer(()
handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
endClassFields(null, null, null, null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
handleNoType(;)
handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
handleIdentifier(, methodDeclaration)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
@@ -4170,7 +4151,7 @@ beginCompilationUnit(class)
endBinaryExpression(+, 1)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endClassMethod(null, int, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
@@ -4778,7 +4759,7 @@ beginCompilationUnit(class)
endBlockFunctionBody(2, {, })
endClassMethod(null, int, (, null, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
endCompilationUnit(1, )
@@ -8915,163 +8915,138 @@ parseUnit(class)
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginMember()
recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, DeclarationKind.Class, WrapperClass)
parseFields(}, null, null, null, null, null, null, null, }, SimpleType(), this, DeclarationKind.Class, WrapperClass, false)
listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, fieldDeclaration)
parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
listener: handleNoFieldInitializer(()
ensureSemicolon(this)
reportRecoverableError(this, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
rewriter()
listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, ()
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
parseMetadataStar(;)
listener: beginMetadataStar(()
listener: endMetadataStar(0)
listener: beginMember()
recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, WrapperClass)
parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, (, DeclarationKind.Class, WrapperClass, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
listener: handleNoType(;)
ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
rewriter()
listener: handleIdentifier(, methodDeclaration)
parseQualifiedRestOpt(, methodDeclarationContinuation)
parseMethodTypeVar()
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(, (, false, MemberKind.NonStaticMethod)
parseFormalParameters(, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, this, DeclarationKind.Class, WrapperClass, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, if)
parseStatement({)
parseStatementX({)
parseIfStatement({)
listener: beginIfStatement(if)
ensureParenthesizedCondition(if, allowCase: false)
parseExpressionInParenthesisRest((, allowCase: false)
parseExpression(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(==)
parseArgumentsOpt(x)
listener: handleNoArguments(==)
listener: handleSend(x, x)
listener: beginBinaryExpression(==)
parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
parseUnaryExpression(==, true, ConstantPatternContext.none)
parsePrimary(==, expression, ConstantPatternContext.none)
parseLiteralInt(==)
listener: handleLiteralInt(0)
listener: endBinaryExpression(==, 0)
ensureCloseParen(0, ()
listener: handleParenthesizedCondition((, null, null)
listener: beginThenStatement(return)
parseStatement())
parseStatementX())
parseReturnStatement())
listener: beginReturnStatement(return)
parseExpression(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseLiteralInt(return)
listener: handleLiteralInt(42)
ensureSemicolon(42)
listener: endReturnStatement(true, return, ;)
inGenerator()
listener: endThenStatement(return, ;)
listener: endIfStatement(if, null, ;)
notEofOrType(CLOSE_CURLY_BRACKET, return)
parseStatement(;)
parseStatementX(;)
parseReturnStatement(;)
listener: beginReturnStatement(return)
parseExpression(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseThisExpression(return, expression)
listener: handleThisExpression(this, expression)
listener: handleNoTypeArguments(()
parseArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(-)
parseArgumentsOpt(x)
listener: handleNoArguments(-)
listener: handleSend(x, x)
listener: beginBinaryExpression(-)
parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
parseUnaryExpression(-, true, ConstantPatternContext.none)
parsePrimary(-, expression, ConstantPatternContext.none)
parseLiteralInt(-)
listener: handleLiteralInt(1)
listener: endBinaryExpression(-, 1)
listener: endArguments(1, (, ))
listener: handleSend(this, ))
listener: beginBinaryExpression(+)
parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
parseUnaryExpression(+, true, ConstantPatternContext.none)
parsePrimary(+, expression, ConstantPatternContext.none)
parseLiteralInt(+)
listener: handleLiteralInt(1)
listener: endBinaryExpression(+, 1)
ensureSemicolon(1)
listener: endReturnStatement(true, return, ;)
inGenerator()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(2, {, })
listener: endClassMethod(null, , (, null, })
listener: endMember()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, if)
parseStatement({)
parseStatementX({)
parseIfStatement({)
listener: beginIfStatement(if)
ensureParenthesizedCondition(if, allowCase: false)
parseExpressionInParenthesisRest((, allowCase: false)
parseExpression(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(==)
parseArgumentsOpt(x)
listener: handleNoArguments(==)
listener: handleSend(x, x)
listener: beginBinaryExpression(==)
parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
parseUnaryExpression(==, true, ConstantPatternContext.none)
parsePrimary(==, expression, ConstantPatternContext.none)
parseLiteralInt(==)
listener: handleLiteralInt(0)
listener: endBinaryExpression(==, 0)
ensureCloseParen(0, ()
listener: handleParenthesizedCondition((, null, null)
listener: beginThenStatement(return)
parseStatement())
parseStatementX())
parseReturnStatement())
listener: beginReturnStatement(return)
parseExpression(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseLiteralInt(return)
listener: handleLiteralInt(42)
ensureSemicolon(42)
listener: endReturnStatement(true, return, ;)
inGenerator()
listener: endThenStatement(return, ;)
listener: endIfStatement(if, null, ;)
notEofOrType(CLOSE_CURLY_BRACKET, return)
parseStatement(;)
parseStatementX(;)
parseReturnStatement(;)
listener: beginReturnStatement(return)
parseExpression(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseThisExpression(return, expression)
listener: handleThisExpression(this, expression)
listener: handleNoTypeArguments(()
parseArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(-)
parseArgumentsOpt(x)
listener: handleNoArguments(-)
listener: handleSend(x, x)
listener: beginBinaryExpression(-)
parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
parseUnaryExpression(-, true, ConstantPatternContext.none)
parsePrimary(-, expression, ConstantPatternContext.none)
parseLiteralInt(-)
listener: handleLiteralInt(1)
listener: endBinaryExpression(-, 1)
listener: endArguments(1, (, ))
listener: handleSend(this, ))
listener: beginBinaryExpression(+)
parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
parseUnaryExpression(+, true, ConstantPatternContext.none)
parsePrimary(+, expression, ConstantPatternContext.none)
parseLiteralInt(+)
listener: handleLiteralInt(1)
listener: endBinaryExpression(+, 1)
ensureSemicolon(1)
listener: endReturnStatement(true, return, ;)
inGenerator()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(2, {, })
listener: endClassMethod(null, int, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, int)
parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
parseMetadataStar(})
@@ -10613,7 +10588,7 @@ parseUnit(class)
listener: endClassMethod(null, int, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(class)
@@ -296,7 +296,7 @@ if (x == 0) return 42;
return sync(x-1) + 1;
}
int this;*synthetic*(int x) {
int this(int x) {
if (x == 0) return 42;
return this(x-1) + 1;
}
@@ -644,7 +644,7 @@ if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[Sim
return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
}[SimpleToken]
int[StringToken] this[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
}[SimpleToken]
@@ -336,14 +336,6 @@ parser/error_recovery/keyword_named_class_methods_2:297:7: 'this' can't be used
int this(int x) {
^^^^
parser/error_recovery/keyword_named_class_methods_2:297:7: Expected ';' after this.
int this(int x) {
^^^^
parser/error_recovery/keyword_named_class_methods_2:297:11: Expected an identifier, but got '('.
int this(int x) {
^
parser/error_recovery/keyword_named_class_methods_2:302:7: 'throw' can't be used as an identifier because it's a keyword.
int throw(int x) {
^^^^^
@@ -4081,23 +4073,12 @@ beginCompilationUnit(class)
beginMetadataStar(int)
endMetadataStar(0)
beginMember()
beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
handleIdentifier(int, typeReference)
handleNoTypeArguments(this)
handleType(int, null)
handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
handleIdentifier(this, fieldDeclaration)
handleNoFieldInitializer(()
handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
endClassFields(null, null, null, null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(()
endMetadataStar(0)
beginMember()
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
handleNoType(;)
handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
handleIdentifier(, methodDeclaration)
handleIdentifier(this, methodDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.NonStaticMethod)
beginMetadataStar(int)
@@ -4146,7 +4127,7 @@ beginCompilationUnit(class)
endBinaryExpression(+, 1)
endReturnStatement(true, return, ;)
endBlockFunctionBody(2, {, })
endClassMethod(null, , (, null, })
endClassMethod(null, int, (, null, })
endMember()
beginMetadataStar(int)
endMetadataStar(0)
@@ -4754,7 +4735,7 @@ beginCompilationUnit(class)
endBlockFunctionBody(2, {, })
endClassMethod(null, int, (, null, })
endMember()
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
endClassDeclaration(class, })
endTopLevelDeclaration(})
endCompilationUnit(1, )
@@ -9518,173 +9518,148 @@ parseUnit(class)
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginMember()
recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, DeclarationKind.Class, WrapperClass)
parseFields(}, null, null, null, null, null, null, null, }, SimpleType(), this, DeclarationKind.Class, WrapperClass, false)
listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, fieldDeclaration)
parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
listener: handleNoFieldInitializer(()
ensureSemicolon(this)
reportRecoverableError(this, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
rewriter()
listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, ()
parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
parseMetadataStar(;)
listener: beginMetadataStar(()
listener: endMetadataStar(0)
listener: beginMember()
recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, WrapperClass)
parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, (, DeclarationKind.Class, WrapperClass, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
listener: handleNoType(;)
ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
rewriter()
listener: handleIdentifier(, methodDeclaration)
parseQualifiedRestOpt(, methodDeclarationContinuation)
parseMethodTypeVar()
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(, (, false, MemberKind.NonStaticMethod)
parseFormalParameters(, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, this, DeclarationKind.Class, WrapperClass, false)
listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(this)
listener: handleType(int, null)
ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
listener: handleRecoverableError(Message[Template(ExpectedIdentifierButGotKeyword), 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
listener: handleIdentifier(this, methodDeclaration)
parseQualifiedRestOpt(this, methodDeclarationContinuation)
parseMethodTypeVar(this)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
parseFormalParameters(this, MemberKind.NonStaticMethod)
parseFormalParametersRest((, MemberKind.NonStaticMethod)
listener: beginFormalParameters((, MemberKind.NonStaticMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
parseMetadataStar(()
listener: beginMetadataStar(int)
listener: endMetadataStar(0)
listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
listener: handleIdentifier(int, typeReference)
listener: handleNoTypeArguments(x)
listener: handleType(int, null)
ensureIdentifier(int, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
parseInitializersOpt())
listener: handleNoInitializers()
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, if)
parseStatement({)
parseStatementX({)
parseIfStatement({)
listener: beginIfStatement(if)
ensureParenthesizedCondition(if, allowCase: true)
parseExpressionInParenthesisRest((, allowCase: true)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(x)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(==)
parseArgumentsOpt(x)
listener: handleNoArguments(==)
listener: handleSend(x, x)
listener: beginBinaryExpression(==)
parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
parseUnaryExpression(==, true, ConstantPatternContext.none)
parsePrimary(==, expression, ConstantPatternContext.none)
parseLiteralInt(==)
listener: handleLiteralInt(0)
listener: endBinaryExpression(==, 0)
ensureCloseParen(0, ()
listener: handleParenthesizedCondition((, null, null)
listener: beginThenStatement(return)
parseStatement())
parseStatementX())
parseReturnStatement())
listener: beginReturnStatement(return)
parseExpression(return)
looksLikeOuterPatternEquals(return)
skipOuterPattern(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseLiteralInt(return)
listener: handleLiteralInt(42)
ensureSemicolon(42)
listener: endReturnStatement(true, return, ;)
inGenerator()
listener: endThenStatement(return, ;)
listener: endIfStatement(if, null, ;)
notEofOrType(CLOSE_CURLY_BRACKET, return)
parseStatement(;)
parseStatementX(;)
parseReturnStatement(;)
listener: beginReturnStatement(return)
parseExpression(return)
looksLikeOuterPatternEquals(return)
skipOuterPattern(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseThisExpression(return, expression)
listener: handleThisExpression(this, expression)
listener: handleNoTypeArguments(()
parseArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(x)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(-)
parseArgumentsOpt(x)
listener: handleNoArguments(-)
listener: handleSend(x, x)
listener: beginBinaryExpression(-)
parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
parseUnaryExpression(-, true, ConstantPatternContext.none)
parsePrimary(-, expression, ConstantPatternContext.none)
parseLiteralInt(-)
listener: handleLiteralInt(1)
listener: endBinaryExpression(-, 1)
listener: endArguments(1, (, ))
listener: handleSend(this, ))
listener: beginBinaryExpression(+)
parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
parseUnaryExpression(+, true, ConstantPatternContext.none)
parsePrimary(+, expression, ConstantPatternContext.none)
parseLiteralInt(+)
listener: handleLiteralInt(1)
listener: endBinaryExpression(+, 1)
ensureSemicolon(1)
listener: endReturnStatement(true, return, ;)
inGenerator()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(2, {, })
listener: endClassMethod(null, , (, null, })
listener: endMember()
inPlainSync()
parseFunctionBody(), false, true)
listener: beginBlockFunctionBody({)
notEofOrType(CLOSE_CURLY_BRACKET, if)
parseStatement({)
parseStatementX({)
parseIfStatement({)
listener: beginIfStatement(if)
ensureParenthesizedCondition(if, allowCase: true)
parseExpressionInParenthesisRest((, allowCase: true)
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(x)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(==)
parseArgumentsOpt(x)
listener: handleNoArguments(==)
listener: handleSend(x, x)
listener: beginBinaryExpression(==)
parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
parseUnaryExpression(==, true, ConstantPatternContext.none)
parsePrimary(==, expression, ConstantPatternContext.none)
parseLiteralInt(==)
listener: handleLiteralInt(0)
listener: endBinaryExpression(==, 0)
ensureCloseParen(0, ()
listener: handleParenthesizedCondition((, null, null)
listener: beginThenStatement(return)
parseStatement())
parseStatementX())
parseReturnStatement())
listener: beginReturnStatement(return)
parseExpression(return)
looksLikeOuterPatternEquals(return)
skipOuterPattern(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseLiteralInt(return)
listener: handleLiteralInt(42)
ensureSemicolon(42)
listener: endReturnStatement(true, return, ;)
inGenerator()
listener: endThenStatement(return, ;)
listener: endIfStatement(if, null, ;)
notEofOrType(CLOSE_CURLY_BRACKET, return)
parseStatement(;)
parseStatementX(;)
parseReturnStatement(;)
listener: beginReturnStatement(return)
parseExpression(return)
looksLikeOuterPatternEquals(return)
skipOuterPattern(return)
parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
parseUnaryExpression(return, true, ConstantPatternContext.none)
parsePrimary(return, expression, ConstantPatternContext.none)
parseThisExpression(return, expression)
listener: handleThisExpression(this, expression)
listener: handleNoTypeArguments(()
parseArguments(this)
parseArgumentsRest(()
listener: beginArguments(()
allowedToShortcutParseExpression()
parseExpression(()
looksLikeOuterPatternEquals(()
skipOuterPattern(()
skipObjectPatternRest(x)
parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
parseUnaryExpression((, true, ConstantPatternContext.none)
parsePrimary((, expression, ConstantPatternContext.none)
parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
parseSend((, expression, ConstantPatternContext.none)
ensureIdentifier((, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments(-)
parseArgumentsOpt(x)
listener: handleNoArguments(-)
listener: handleSend(x, x)
listener: beginBinaryExpression(-)
parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
parseUnaryExpression(-, true, ConstantPatternContext.none)
parsePrimary(-, expression, ConstantPatternContext.none)
parseLiteralInt(-)
listener: handleLiteralInt(1)
listener: endBinaryExpression(-, 1)
listener: endArguments(1, (, ))
listener: handleSend(this, ))
listener: beginBinaryExpression(+)
parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
parseUnaryExpression(+, true, ConstantPatternContext.none)
parsePrimary(+, expression, ConstantPatternContext.none)
parseLiteralInt(+)
listener: handleLiteralInt(1)
listener: endBinaryExpression(+, 1)
ensureSemicolon(1)
listener: endReturnStatement(true, return, ;)
inGenerator()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endBlockFunctionBody(2, {, })
listener: endClassMethod(null, int, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, int)
parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
parseMetadataStar(})
@@ -11333,7 +11308,7 @@ parseUnit(class)
listener: endClassMethod(null, int, (, null, })
listener: endMember()
notEofOrType(CLOSE_CURLY_BRACKET, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
listener: endClassDeclaration(class, })
listener: endTopLevelDeclaration(})
reportAllErrorTokens(class)
@@ -296,7 +296,7 @@ if (x == 0) return 42;
return sync(x-1) + 1;
}
int this;*synthetic*(int x) {
int this(int x) {
if (x == 0) return 42;
return this(x-1) + 1;
}
@@ -644,7 +644,7 @@ if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[Sim
return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
}[SimpleToken]
int[StringToken] this[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
}[SimpleToken]
@@ -704,6 +704,15 @@ List<String> processItem(ParserAstNode item, List<int> data) {
decl.endToken.offset + decl.endToken.length,
),
];
} else if (item.isPrimaryConstructorBody()) {
PrimaryConstructorBodyEnd decl = item.getPrimaryConstructorBody();
return [
getCutContent(
data,
decl.beginToken.offset,
decl.endToken.offset + decl.endToken.length,
),
];
} else {
if (item.type == ParserAstType.BEGIN) return const [];
if (item.type == ParserAstType.HANDLE) return const [];
@@ -596,6 +596,34 @@ class ParserTestListener implements Listener {
);
}
@override
void beginPrimaryConstructorBody(Token token) {
seen(token);
doPrint(
'beginPrimaryConstructorBody('
'$token)',
);
indent++;
}
@override
void endPrimaryConstructorBody(
Token beginToken,
Token? beginInitializers,
Token endToken,
) {
indent--;
seen(beginToken);
seen(beginInitializers);
seen(endToken);
doPrint(
'endPrimaryConstructorBody('
'$beginToken, '
'$beginInitializers, '
'$endToken)',
);
}
@override
void beginCombinators(Token token) {
seen(token);
@@ -1235,6 +1235,18 @@ class TestParser extends Parser {
return result;
}
@override
Token parsePrimaryConstructorBody(Token token) {
doPrint(
'parsePrimaryConstructorBody('
'$token)',
);
indent++;
var result = super.parsePrimaryConstructorBody(token);
indent--;
return result;
}
@override
Token parseExtensionTypeDeclaration(
Token beginToken,
@@ -2,45 +2,91 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: 'this' can't be used as an identifier because it's a keyword.
// Try renaming this to be an identifier that isn't a keyword.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// this.y = 2;
// ^
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
// this.y = 2;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
// Try inserting an identifier before '2'.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
// final int y;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
// this.x = 1;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
// Try adding {}.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
// Try removing the return type.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
// final int x;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
// final int y;
// ^
//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
final field core::int y;
erroneous constructor y() → self::E
: self::E::y = null, self::E::x = null, super core::Object::•()
invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
Try removing the return type.
this.y = 2;
^";
erroneous constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
^", this self::E::named()
;
constructor named() → self::E
: self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
this.y = 6;
^"
: self::E::x = 5, self::E::y = 6, super core::Object::•()
;
}
static method main() → dynamic {}
@@ -2,45 +2,91 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: 'this' can't be used as an identifier because it's a keyword.
// Try renaming this to be an identifier that isn't a keyword.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// this.y = 2;
// ^
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
// this.y = 2;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
// Try inserting an identifier before '2'.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
// final int y;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
// this.x = 1;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
// Try adding {}.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
// Try removing the return type.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
// final int x;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
// final int y;
// ^
//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
final field core::int y;
erroneous constructor y() → self::E
: self::E::y = null, self::E::x = null, super core::Object::•()
invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
Try removing the return type.
this.y = 2;
^";
erroneous constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
^", this self::E::named()
;
constructor named() → self::E
: self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
this.y = 6;
^"
: self::E::x = 5, self::E::y = 6, super core::Object::•()
;
}
static method main() → dynamic {}
@@ -2,25 +2,41 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: 'this' can't be used as an identifier because it's a keyword.
// Try renaming this to be an identifier that isn't a keyword.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// this.y = 2;
// ^
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
// this.y = 2;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
// Try inserting an identifier before '2'.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
// final int y;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
// this.y = 2;
// ^
//
import self as self;
import "dart:core" as core;
@@ -28,6 +44,8 @@ import "dart:core" as core;
class E extends core::Object {
final field core::int x;
final field core::int y;
constructor y() → self::E
;
constructor •() → self::E
;
constructor named() → self::E
@@ -2,45 +2,91 @@ library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: 'this' can't be used as an identifier because it's a keyword.
// Try renaming this to be an identifier that isn't a keyword.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// this.y = 2;
// ^
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
// this.y = 2;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
// Try inserting an identifier before '2'.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
// final int y;
// ^
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
// this.y = 2;
// ^^^^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
// this.x = 1;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
// Try adding {}.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
// Try removing the return type.
// this.y = 2;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
// final int x;
// ^
//
// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
// Try to initialize the field using an initializing formal or a field initializer.
// this.y = 2;
// ^
// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
// final int y;
// ^
//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
final field core::int y;
erroneous constructor y() → self::E
: self::E::y = null, self::E::x = null, super core::Object::•()
invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
Try removing the return type.
this.y = 2;
^";
erroneous constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
^", this self::E::named()
;
constructor named() → self::E
: self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
this.y = 6;
^"
: self::E::x = 5, self::E::y = 6, super core::Object::•()
;
}
static method main() → dynamic {}
@@ -2,8 +2,8 @@ class E {
final int x;
final int y;
E() : this.named(), this.x = 1;
this.
y = 2;
this.y ()= ;
2;
E.named() : this.x = 5, this.y = 6;
}