Index: pkg/compiler/lib/src/inferrer/builder.dart |
diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart |
index ea4b8c833eb25a18e30f08c96f42de0929d8b7bd..afbd8be42b4372525414a34d81f3ca1ae4cb6822 100644 |
--- a/pkg/compiler/lib/src/inferrer/builder.dart |
+++ b/pkg/compiler/lib/src/inferrer/builder.dart |
@@ -131,6 +131,12 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation> |
} |
} |
+ void initializationIsIndefinite() { |
+ if (analyzedElement.isGenerativeConstructor) { |
+ locals.fieldScope.isIndefinite = true; |
+ } |
+ } |
+ |
DiagnosticReporter get reporter => compiler.reporter; |
ClosedWorld get closedWorld => inferrer.closedWorld; |
@@ -710,6 +716,7 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation> |
TypeInformation visitTryStatement(ast.TryStatement node) { |
LocalsHandler saved = locals; |
locals = new LocalsHandler.from(locals, node, useOtherTryBlock: false); |
+ initializationIsIndefinite(); |
visit(node.tryBlock); |
saved.mergeDiamondFlow(locals, null); |
locals = saved; |
@@ -2863,6 +2870,7 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation> |
recordReturnType( |
expression == null ? types.nullType : expression.accept(this)); |
locals.seenReturnOrThrow = true; |
+ initializationIsIndefinite(); |
return null; |
} |