Chromium Code Reviews| 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..6df53272b85746eac383c2d5e55572e4f41a0344 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 ctor; |
|
Dmitry Stefantsov
2017/07/13 07:19:53
Please, use a more descriptive name than [ctor].
sjindel
2017/07/13 11:34:05
Done.
|
| + final List<Initializer> prefix = []; |
| - InitializerRewriter(this.initializingExpression); |
| + InitializerListRewriter(this.ctor); |
| @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 = ctor; |
| + 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 = ctor; |
| + prefix.add(init); |
| } |
| } |