Index: pkg/kernel/lib/transformations/closure/rewriter.dart |
diff --git a/pkg/kernel/lib/transformations/closure/rewriter.dart b/pkg/kernel/lib/transformations/closure/rewriter.dart |
index ec258de70c0b7c134b85aeb5439ee02163ca57c8..255398cb061bccc3658478b2c2066477a5a732ae 100644 |
--- a/pkg/kernel/lib/transformations/closure/rewriter.dart |
+++ b/pkg/kernel/lib/transformations/closure/rewriter.dart |
@@ -87,12 +87,10 @@ class BlockRewriter extends AstRewriter { |
/// Creates and updates the context as [Let] bindings around the initializer |
/// expression. |
-class InitializerRewriter extends AstRewriter { |
+abstract class InitializerRewriter extends AstRewriter { |
final Expression initializingExpression; |
- InitializerRewriter(this.initializingExpression) { |
- assert(initializingExpression.parent is FieldInitializer); |
- } |
+ InitializerRewriter(this.initializingExpression); |
@override |
BlockRewriter forNestedBlock(Block block) { |
@@ -102,11 +100,9 @@ class InitializerRewriter extends AstRewriter { |
@override |
void insertContextDeclaration(Expression accessParent) { |
_createDeclaration(); |
- FieldInitializer parent = initializingExpression.parent; |
Let binding = new Let(contextDeclaration, initializingExpression); |
+ setInitializerExpression(binding); |
initializingExpression.parent = binding; |
- parent.value = binding; |
- binding.parent = parent; |
} |
@override |
@@ -117,4 +113,34 @@ class InitializerRewriter extends AstRewriter { |
parent.body = binding; |
binding.parent = parent; |
} |
+ |
+ void setInitializerExpression(Expression expression); |
+} |
+ |
+class FieldInitializerRewriter extends InitializerRewriter { |
+ FieldInitializerRewriter(Expression initializingExpression) |
+ : super(initializingExpression) { |
+ assert(initializingExpression.parent is FieldInitializer); |
+ } |
+ |
+ void setInitializerExpression(Expression expression) { |
+ assert(initializingExpression.parent is FieldInitializer); |
+ FieldInitializer parent = initializingExpression.parent; |
+ parent.value = expression; |
+ expression.parent = parent; |
+ } |
+} |
+ |
+class LocalInitializerRewriter extends InitializerRewriter { |
+ LocalInitializerRewriter(Expression initializingExpression) |
+ : super(initializingExpression) { |
+ assert(initializingExpression.parent is LocalInitializer); |
+ } |
+ |
+ void setInitializerExpression(Expression expression) { |
+ assert(initializingExpression.parent is LocalInitializer); |
+ LocalInitializer parent = initializingExpression.parent; |
+ parent.variable.initializer = expression; |
+ expression.parent = parent; |
+ } |
} |