Skip to content

Commit 59a9861

Browse files
committed
Fix some bugs related to the covariant keyword
[email protected] Review-Url: https://codereview.chromium.org/2662433002 .
1 parent a3cc5fe commit 59a9861

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

pkg/analyzer/lib/src/generated/parser.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3848,7 +3848,7 @@ class Parser {
38483848
modifiers.constKeyword = getAndAdvance();
38493849
}
38503850
} else if (keyword == Keyword.COVARIANT) {
3851-
if (modifiers.constKeyword != null) {
3851+
if (modifiers.covariantKeyword != null) {
38523852
_reportErrorForCurrentToken(
38533853
ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
38543854
_advance();
@@ -4152,6 +4152,11 @@ class Parser {
41524152
_tokenMatchesIdentifier(next)) {
41534153
covariantKeyword = getAndAdvance();
41544154
}
4155+
while (_matchesKeyword(Keyword.COVARIANT)) {
4156+
_reportErrorForCurrentToken(
4157+
ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
4158+
_advance();
4159+
}
41554160
}
41564161
FinalConstVarOrType holder = parseFinalConstVarOrType(!inFunctionType,
41574162
inFunctionType: inFunctionType);

pkg/analyzer/test/generated/parser_test.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,14 @@ class ErrorParserTest extends ParserTestCase {
987987
listener.assertErrorsWithCodes([ParserErrorCode.DUPLICATED_MODIFIER]);
988988
}
989989

990+
void test_duplicatedModifier_covariant() {
991+
createParser('covariant covariant m;');
992+
FormalParameter parameter =
993+
parser.parseFormalParameter(ParameterKind.REQUIRED);
994+
expectNotNullIfNoErrors(parameter);
995+
listener.assertErrorsWithCodes([ParserErrorCode.DUPLICATED_MODIFIER]);
996+
}
997+
990998
void test_duplicatedModifier_external() {
991999
createParser('external external f();');
9921000
ClassMember member = parser.parseClassMember('C');
@@ -8991,7 +8999,7 @@ void''');
89918999

89929000
void test_parseFormalParameter_covariant_type_normal() {
89939001
ParameterKind kind = ParameterKind.REQUIRED;
8994-
createParser('covariant A a');
9002+
createParser('covariant A<B<C>> a');
89959003
FormalParameter parameter = parser.parseFormalParameter(kind);
89969004
expectNotNullIfNoErrors(parameter);
89979005
listener.assertNoErrors();

0 commit comments

Comments
 (0)