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 ea4771d823e0373e761f6590219f2a9449ed5f18..8170579211a924826df28ee643e03b5f7b3f868a 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
@@ -1682,6 +1682,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
{bool isConst: false, int charOffset: -1}) { |
List<TypeParameter> typeParameters = target.function.typeParameters; |
if (target is Constructor) { |
+ assert(!target.enclosingClass.isAbstract); |
typeParameters = target.enclosingClass.typeParameters; |
} |
if (!checkArguments(target.function, arguments, typeParameters)) { |
@@ -1775,7 +1776,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
// Not found. Reported below. |
} else if (b.isConstructor) { |
if (type.isAbstract) { |
- // TODO(ahe): Generate abstract instantiation error. |
+ push(buildMethodInvocation( |
+ buildAbstractClassInstantiationError( |
+ type.name, nameToken.charOffset), |
+ callName, |
+ arguments, |
+ arguments.fileOffset)); |
+ return; |
} else { |
target = b.target; |
} |
@@ -2352,8 +2359,16 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
String message = formatUnexpected(uri, charOffset, error); |
Builder constructor = library.loader.getCompileTimeError(); |
return new Throw(buildStaticInvocation(constructor.target, |
- new Arguments(<Expression>[new StringLiteral(message)]), |
- isConst: false)); // TODO(ahe): Make this const. |
+ new Arguments(<Expression>[new StringLiteral(message)]))); |
+ } |
+ |
+ Expression buildAbstractClassInstantiationError(String className, |
+ [int charOffset = -1]) { |
+ warning("The class '$className' is abstract and can't be instantiated.", |
+ charOffset); |
+ Builder constructor = library.loader.getAbstractClassInstantiationError(); |
+ return new Throw(buildStaticInvocation(constructor.target, |
+ new Arguments(<Expression>[new StringLiteral(className)]))); |
} |
Statement buildCompileTimeErrorStatement(error, [int charOffset = -1]) { |