Skip to content

Commit 2a85a34

Browse files
danrubelcommit-bot@chromium.org
danrubel
authored and
commit-bot@chromium.org
committed
Update handleType event to take questionMark token
... which in this CL will always null. This is the first step when adding NNDB support as outlined in dart-lang/language#110 Change-Id: If3810bcaf1b73e70924f09d619e2a84e7d5ba8d6 Reviewed-on: https://dart-review.googlesource.com/c/86860 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Dan Rubel <danrubel@google.com>
1 parent 4d63202 commit 2a85a34

File tree

10 files changed

+148
-119
lines changed

10 files changed

+148
-119
lines changed

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -960,8 +960,9 @@ class AstBuilder extends StackListener {
960960
}
961961

962962
@override
963-
void handleType(Token beginToken) {
963+
void handleType(Token beginToken, Token questionMark) {
964964
debugEvent("Type");
965+
reportErrorIfNullableType(questionMark);
965966

966967
TypeArgumentList arguments = pop();
967968
Identifier name = pop();
@@ -2552,7 +2553,7 @@ class AstBuilder extends StackListener {
25522553
// keyword up to an element?
25532554
handleIdentifier(voidKeyword, IdentifierContext.typeReference);
25542555
handleNoTypeArguments(voidKeyword);
2555-
handleType(voidKeyword);
2556+
handleType(voidKeyword, null);
25562557
}
25572558

25582559
@override

pkg/analyzer/tool/summary/mini_ast.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,8 +478,9 @@ class MiniAstBuilder extends StackListener {
478478
}
479479

480480
@override
481-
void handleType(Token beginToken) {
481+
void handleType(Token beginToken, Token questionMark) {
482482
debugEvent("Type");
483+
reportErrorIfNullableType(questionMark);
483484
List<TypeName> typeArguments = popTypedList();
484485
String name = pop();
485486
push(new TypeName(name, typeArguments));

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2467,9 +2467,10 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
24672467
}
24682468

24692469
@override
2470-
void handleType(Token beginToken) {
2470+
void handleType(Token beginToken, Token questionMark) {
24712471
// TODO(ahe): The scope is wrong for return types of generic functions.
24722472
debugEvent("Type");
2473+
reportErrorIfNullableType(questionMark);
24732474
List<UnresolvedType<KernelTypeBuilder>> arguments = pop();
24742475
Object name = pop();
24752476
if (name is QualifiedName) {

pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,8 +1349,8 @@ class ForwardingListener implements Listener {
13491349
}
13501350

13511351
@override
1352-
void handleType(Token beginToken) {
1353-
listener?.handleType(beginToken);
1352+
void handleType(Token beginToken, Token questionMark) {
1353+
listener?.handleType(beginToken, questionMark);
13541354
}
13551355

13561356
@override
@@ -1398,6 +1398,11 @@ class ForwardingListener implements Listener {
13981398
listener?.logEvent(name);
13991399
}
14001400

1401+
@override
1402+
void reportErrorIfNullableType(Token questionMark) {
1403+
listener?.reportErrorIfNullableType(questionMark);
1404+
}
1405+
14011406
@override
14021407
set suppressParseErrors(bool value) {
14031408
listener?.suppressParseErrors = value;

pkg/front_end/lib/src/fasta/parser/listener.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ library fasta.parser.listener;
66

77
import '../../scanner/token.dart' show Token;
88

9-
import '../fasta_codes.dart' show Message;
9+
import '../fasta_codes.dart' show Message, templateUnexpectedToken;
1010

1111
import '../quote.dart' show UnescapeErrorListener;
1212

@@ -18,6 +18,8 @@ import 'identifier_context.dart' show IdentifierContext;
1818

1919
import 'member_kind.dart' show MemberKind;
2020

21+
import 'util.dart' show optional;
22+
2123
/// A parser event listener that does nothing except throw exceptions
2224
/// on parser errors.
2325
///
@@ -933,10 +935,22 @@ class Listener implements UnescapeErrorListener {
933935
logEvent("TryStatement");
934936
}
935937

936-
void handleType(Token beginToken) {
938+
void handleType(Token beginToken, Token questionMark) {
937939
logEvent("Type");
938940
}
939941

942+
// TODO(danrubel): Remove this once all listeners have been updated
943+
// to properly handle nullable types
944+
void reportErrorIfNullableType(Token questionMark) {
945+
if (questionMark != null) {
946+
assert(optional('?', questionMark));
947+
handleRecoverableError(
948+
templateUnexpectedToken.withArguments(questionMark),
949+
questionMark,
950+
questionMark);
951+
}
952+
}
953+
940954
void handleNoName(Token token) {
941955
logEvent("NoName");
942956
}

pkg/front_end/lib/src/fasta/parser/type_info_impl.dart

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class PrefixedType implements TypeInfo {
148148
listener.handleQualified(period);
149149

150150
listener.handleNoTypeArguments(token.next);
151-
listener.handleType(start);
151+
listener.handleType(start, null);
152152
return token;
153153
}
154154

@@ -183,10 +183,13 @@ class SimpleTypeWith1Argument implements TypeInfo {
183183
Token parseType(Token token, Parser parser) {
184184
Token start = token = token.next;
185185
assert(token.isKeywordOrIdentifier);
186-
Listener listener = parser.listener;
187-
listener.handleIdentifier(token, IdentifierContext.typeReference);
186+
parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
188187
token = typeArg.parseArguments(token, parser);
189-
listener.handleType(start);
188+
return parseTypeRest(start, token, parser);
189+
}
190+
191+
Token parseTypeRest(Token start, Token token, Parser parser) {
192+
parser.listener.handleType(start, null);
190193
return token;
191194
}
192195

@@ -221,10 +224,13 @@ class SimpleType implements TypeInfo {
221224
Token parseType(Token token, Parser parser) {
222225
token = token.next;
223226
assert(isValidTypeReference(token));
224-
Listener listener = parser.listener;
225-
listener.handleIdentifier(token, IdentifierContext.typeReference);
227+
parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
226228
token = noTypeParamOrArg.parseArguments(token, parser);
227-
listener.handleType(token);
229+
return parseTypeRest(token, parser);
230+
}
231+
232+
Token parseTypeRest(Token token, Parser parser) {
233+
parser.listener.handleType(token, null);
228234
return token;
229235
}
230236

@@ -372,7 +378,7 @@ class ComplexTypeInfo implements TypeInfo {
372378
}
373379
}
374380
token = typeArguments.parseArguments(token, parser);
375-
parser.listener.handleType(typeRefOrPrefix);
381+
parser.listener.handleType(typeRefOrPrefix, null);
376382
}
377383
}
378384

pkg/front_end/lib/src/fasta/source/diet_listener.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class DietListener extends StackListener {
148148
}
149149

150150
@override
151-
void handleType(Token beginToken) {
151+
void handleType(Token beginToken, Token questionMark) {
152152
debugEvent("Type");
153153
discard(1);
154154
}

pkg/front_end/lib/src/fasta/source/outline_builder.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,8 +961,9 @@ class OutlineBuilder extends StackListener {
961961
}
962962

963963
@override
964-
void handleType(Token beginToken) {
964+
void handleType(Token beginToken, Token questionMark) {
965965
debugEvent("Type");
966+
reportErrorIfNullableType(questionMark);
966967
List<TypeBuilder> arguments = pop();
967968
int charOffset = pop();
968969
Object name = pop();

pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,7 @@ class TypePromotionLookAheadListener extends Listener {
12121212
}
12131213

12141214
@override
1215-
void handleType(Token beginToken) {
1215+
void handleType(Token beginToken, Token questionMark) {
12161216
debugEvent("Type", beginToken);
12171217
state.pop();
12181218
}

0 commit comments

Comments
 (0)