| 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]) {
|
|
|