Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2933733002: Throw NSM on unresolved factory redirection. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 59578cedf592ed68c0ea720ce38745bfcbb6d7c6..d0970fa01290df1405f4ab3b91221e2d39c0cbcb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -64,7 +64,11 @@ import '../quote.dart'
import '../modifier.dart' show Modifier, constMask, finalMask;
-import 'redirecting_factory_body.dart' show getRedirectionTarget;
+import 'redirecting_factory_body.dart'
+ show
+ RedirectingFactoryBody,
+ getRedirectingFactoryBody,
+ getRedirectionTarget;
import 'kernel_builder.dart';
@@ -2173,6 +2177,15 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
nameToken.charOffset));
return;
}
+ RedirectingFactoryBody body = getRedirectingFactoryBody(target);
+ if (body != null) {
+ // If the redirection target is itself a redirecting factory, it
+ // means that it is unresolved. So we set target to null so we
+ // can generate a no-such-method error below.
+ assert(body.isUnresolved);
+ target = null;
+ errorName = body.unresolvedName;
+ }
}
if (target is Constructor ||
(target is Procedure && target.kind == ProcedureKind.Factory)) {
@@ -2182,7 +2195,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
initialTarget: initialTarget));
return;
} else {
- errorName = debugName(type.name, name);
+ errorName ??= debugName(type.name, name);
}
} else {
errorName = debugName(getNodeName(type), name);

Powered by Google App Engine
This is Rietveld 408576698