Index: pkg/compiler/lib/src/ssa/builder.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart |
index 35cf64c929b681008251d77a87edd86be31f7a14..5e89a0080dc550c283301e662a0b37d87323e350 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -3247,7 +3247,7 @@ class SsaBuilder extends ast.Visitor |
}); |
TypeMask type = |
- new TypeMask.nonNullExact(coreClasses.functionClass, compiler.world); |
+ new TypeMask.nonNullExact(closureClassElement, compiler.world); |
push(new HForeignNew(closureClassElement, type, capturedVariables) |
..sourceInformation = sourceInformationBuilder.buildCreate(node)); |
@@ -5074,7 +5074,13 @@ class SsaBuilder extends ast.Visitor |
: inferred; |
} else if (element.isGenerativeConstructor) { |
ClassElement cls = element.enclosingClass; |
- return new TypeMask.nonNullExact(cls.thisType.element, compiler.world); |
+ if (cls.isAbstract) { |
+ // An error will be thrown. |
+ return new TypeMask.nonNullEmpty(); |
+ } else { |
+ return new TypeMask.nonNullExact( |
+ cls.thisType.element, compiler.world); |
+ } |
} else { |
return TypeMaskFactory.inferredReturnTypeForElement( |
originalElement, compiler); |