Skip to content

Commit

Permalink
update parser to allow "late var" in NNBD
Browse files Browse the repository at this point in the history
Fix dart-lang/sdk#38022
Fix dart-lang/sdk#37857

Change-Id: I9ddfeddd424312e584b67bb1f42c73957ed7b05c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116243
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
  • Loading branch information
danrubel authored and commit-bot@chromium.org committed Sep 9, 2019
1 parent 99007f3 commit cb1efb8
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
16 changes: 12 additions & 4 deletions pkg/analyzer/test/generated/parser_fasta_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -253,9 +253,6 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
createParser('late var f;', featureSet: nonNullable);
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertErrors(errors: [
expectedError(ParserErrorCode.CONFLICTING_MODIFIERS, 5, 3),
]);
expect(member, isFieldDeclaration);
FieldDeclaration field = member;
expect(field.covariantKeyword, isNull);
Expand All @@ -280,7 +277,7 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
ClassMember member = parser.parseClassMember('C');
expect(member, isNotNull);
assertErrors(errors: [
expectedError(ParserErrorCode.CONFLICTING_MODIFIERS, 4, 4),
expectedError(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 4, 4),
]);
expect(member, isFieldDeclaration);
FieldDeclaration field = member;
Expand Down Expand Up @@ -3344,6 +3341,17 @@ class SimpleParserTest_Fasta extends FastaParserTestCase
expect(declarationList.variables, hasLength(1));
}

void test_parseVariableDeclaration_late_var() {
var statement = parseStatement('late var a;', featureSet: nonNullable)
as VariableDeclarationStatement;
var declarationList = statement.variables;
assertNoErrors();
expect(declarationList.lateKeyword, isNotNull);
expect(declarationList.keyword?.lexeme, 'var');
expect(declarationList.type, isNull);
expect(declarationList.variables, hasLength(1));
}

void test_typeAlias_37733() {
// https://github.com/dart-lang/sdk/issues/37733
var unit = parseCompilationUnit(r'typedef K=Function(<>($', errors: [
Expand Down
6 changes: 1 addition & 5 deletions pkg/front_end/lib/src/fasta/parser/modifier_context.dart
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ class ModifierRecoveryContext {
if (constToken != null) {
reportConflictingModifiers(next, constToken);
} else if (varToken != null) {
reportConflictingModifiers(next, varToken);
reportModifierOutOfOrder(next, varToken.lexeme);
} else if (finalToken != null) {
reportModifierOutOfOrder(next, finalToken.lexeme);
}
Expand Down Expand Up @@ -429,10 +429,6 @@ class ModifierRecoveryContext {
assert(optional('var', next));
if (varFinalOrConst == null && !afterFactory) {
varToken = next;

if (lateToken != null) {
reportConflictingModifiers(next, lateToken);
}
return next;
}

Expand Down
3 changes: 2 additions & 1 deletion pkg/front_end/lib/src/fasta/parser/parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5399,7 +5399,8 @@ class Parser {
} else if (optional('late', next)) {
lateToken = token = next;
next = token.next;
if (isModifier(next) && optional('final', next)) {
if (isModifier(next) &&
(optional('var', next) || optional('final', next))) {
varFinalOrConst = token = next;
next = token.next;
}
Expand Down

0 comments on commit cb1efb8

Please sign in to comment.