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

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_class_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/kernel_class_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index c334fa203b35134adbb745f750d1612dab0a75ce..5043976aa7dacfcf7ebe2cc4279e00a8d33995d8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -10,7 +10,6 @@ import 'package:kernel/ast.dart'
Constructor,
DartType,
Expression,
- ExpressionStatement,
Field,
FunctionNode,
InterfaceType,
@@ -20,17 +19,13 @@ import 'package:kernel/ast.dart'
Procedure,
ProcedureKind,
StaticGet,
- StringLiteral,
Supertype,
- Throw,
VariableDeclaration;
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
import '../errors.dart' show internalError;
-import '../messages.dart' show warning;
-
import '../dill/dill_member_builder.dart' show DillMemberBuilder;
import 'kernel_builder.dart'
@@ -133,13 +128,17 @@ abstract class KernelClassBuilder
} else if (targetBuilder is DillMemberBuilder) {
builder.body = new RedirectingFactoryBody(targetBuilder.member);
} else {
- // TODO(ahe): Throw NSM error. This requires access to core
- // types.
String message = "Redirection constructor target not found: "
"${redirectionTarget.fullNameForErrors}";
- warning(library.fileUri, -1, message);
- builder.body = new ExpressionStatement(
- new Throw(new StringLiteral(message)));
+ if (builder.isConst) {
+ addCompileTimeError(builder.charOffset, message);
+ } else {
+ addWarning(builder.charOffset, message);
+ }
+ // CoreTypes aren't computed yet, and this is the outline
+ // phase. So we can't and shouldn't create a method body.
+ builder.body = new RedirectingFactoryBody.unresolved(
+ redirectionTarget.fullNameForErrors);
}
}
}
@@ -161,7 +160,7 @@ abstract class KernelClassBuilder
// Where each c1 ... cn are an instance of [StaticGet] whose target is
// [constructor.target].
//
- // TODO(ahe): Generate the correct factory body instead.
+ // TODO(ahe): Add a kernel node to represent redirecting factory bodies.
DillMemberBuilder constructorsField =
scope.local.putIfAbsent("_redirecting#", () {
ListLiteral literal = new ListLiteral(<Expression>[]);

Powered by Google App Engine
This is Rietveld 408576698