| 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 82c4e6cbf019806fd79d3d01185076d9704792bc..5f88d97efb5d38f581902af584b4cb19066cdaab 100644
|
| --- a/pkg/kernel/lib/transformations/closure/rewriter.dart
|
| +++ b/pkg/kernel/lib/transformations/closure/rewriter.dart
|
| @@ -85,12 +85,11 @@ class BlockRewriter extends AstRewriter {
|
| }
|
| }
|
|
|
| -/// Creates and updates the context as [Let] bindings around the initializer
|
| -/// expression.
|
| -abstract class InitializerRewriter extends AstRewriter {
|
| - final Expression initializingExpression;
|
| +class InitializerListRewriter extends AstRewriter {
|
| + final Constructor parentConstructor;
|
| + final List<Initializer> prefix = [];
|
|
|
| - InitializerRewriter(this.initializingExpression);
|
| + InitializerListRewriter(this.parentConstructor);
|
|
|
| @override
|
| BlockRewriter forNestedBlock(Block block) {
|
| @@ -100,44 +99,16 @@ abstract class InitializerRewriter extends AstRewriter {
|
| @override
|
| void insertContextDeclaration(Expression accessParent) {
|
| _createDeclaration();
|
| - var oldParent = initializingExpression.parent;
|
| - Let binding = new Let(contextDeclaration, initializingExpression);
|
| - binding.parent = oldParent;
|
| - setInitializerExpression(binding);
|
| + var init = new LocalInitializer(contextDeclaration);
|
| + init.parent = parentConstructor;
|
| + prefix.add(init);
|
| }
|
|
|
| @override
|
| void insertExtendContext(VectorSet extender) {
|
| - Let parent = initializingExpression.parent;
|
| - Let binding = new Let(new VariableDeclaration(null, initializer: extender),
|
| - initializingExpression);
|
| - 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) {
|
| - (expression.parent as FieldInitializer).value = expression;
|
| - }
|
| -}
|
| -
|
| -class LocalInitializerRewriter extends InitializerRewriter {
|
| - LocalInitializerRewriter(Expression initializingExpression)
|
| - : super(initializingExpression) {
|
| - // The initializer is up two levels because the variable declaration node is
|
| - // in between.
|
| - assert(initializingExpression.parent.parent is LocalInitializer);
|
| - }
|
| -
|
| - void setInitializerExpression(Expression expression) {
|
| - (expression.parent as VariableDeclaration).initializer = expression;
|
| + var init = new LocalInitializer(
|
| + new VariableDeclaration(null, initializer: extender));
|
| + init.parent = parentConstructor;
|
| + prefix.add(init);
|
| }
|
| }
|
|
|