Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: pkg/kernel/lib/transformations/closure/rewriter.dart

Issue 2944433002: Add tests for handling closures in LocalInitializers (Closed)
Patch Set: Merge in latest changes in master (e340ee517a) Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698