Index: pkg/compiler/lib/src/resolution/semantic_visitor.dart |
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
index b626bba589838d6e7b5293cbdb5e34faa5d858ed..05cdfa2257b064675cebb53200550c2daae16d2f 100644 |
--- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
@@ -5,7 +5,7 @@ |
library dart2js.semantics_visitor; |
import '../constants/expressions.dart'; |
-import '../dart2jslib.dart' show invariant; |
+import '../dart2jslib.dart' show invariant, MessageKind; |
import '../dart_types.dart'; |
import '../elements/elements.dart'; |
import '../helpers/helpers.dart'; |
@@ -3028,9 +3028,9 @@ abstract class SemanticSendVisitor<R, A> { |
/// |
/// where [type] is `C<int>`. |
/// |
- // TODO(johnniwinther): Update [type] to be [InterfaceType] when this is no |
- // longer a catch-all clause for the erroneous constructor invocations. |
- R errorUnresolvedConstructorInvoke( |
+ // TODO(johnniwinther): Change [type] to [InterfaceType] when is it not |
+ // `dynamic`. |
+ R visitUnresolvedConstructorInvoke( |
NewExpression node, |
Element constructor, |
DartType type, |
@@ -3045,7 +3045,9 @@ abstract class SemanticSendVisitor<R, A> { |
/// |
/// where [type] is the malformed type `Unresolved`. |
/// |
- R errorUnresolvedClassConstructorInvoke( |
+ // TODO(johnniwinther): Change [type] to [MalformedType] when is it not |
+ // `dynamic`. |
+ R visitUnresolvedClassConstructorInvoke( |
NewExpression node, |
Element element, |
MalformedType type, |
@@ -3053,6 +3055,22 @@ abstract class SemanticSendVisitor<R, A> { |
Selector selector, |
A arg); |
+ /// Constant invocation of a non-constant constructor. |
+ /// |
+ /// For instance |
+ /// class C { |
+ /// C(a, b); |
+ /// } |
+ /// m() => const C(true, 42); |
+ /// |
+ R errorNonConstantConstructorInvoke( |
+ NewExpression node, |
+ Element element, |
+ InterfaceType type, |
+ NodeList arguments, |
+ CallStructure callStructure, |
+ A arg); |
+ |
/// Invocation of a constructor on an abstract [type] with [arguments]. |
/// |
/// For instance |
@@ -3060,7 +3078,7 @@ abstract class SemanticSendVisitor<R, A> { |
/// |
/// where [type] is the malformed type `Unresolved`. |
/// |
- R errorAbstractClassConstructorInvoke( |
+ R visitAbstractClassConstructorInvoke( |
NewExpression node, |
ConstructorElement element, |
InterfaceType type, |
@@ -3080,12 +3098,12 @@ abstract class SemanticSendVisitor<R, A> { |
/// m1() => new C(true, 42); |
/// m2() => new C.a(true, 42); |
/// |
- R errorUnresolvedRedirectingFactoryConstructorInvoke( |
+ R visitUnresolvedRedirectingFactoryConstructorInvoke( |
NewExpression node, |
ConstructorElement constructor, |
InterfaceType type, |
NodeList arguments, |
- Selector selector, |
+ CallStructure callStructure, |
A arg); |
} |