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

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

Issue 2974673002: Revert "Fix closure conversion in field and local initializers." (Closed)
Patch Set: Revert "Revert "Fix closure conversion in field and local initializers."" 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
« no previous file with comments | « no previous file | pkg/kernel/test/closures_initializers/closures_initializers.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 255398cb061bccc3658478b2c2066477a5a732ae..82c4e6cbf019806fd79d3d01185076d9704792bc 100644
--- a/pkg/kernel/lib/transformations/closure/rewriter.dart
+++ b/pkg/kernel/lib/transformations/closure/rewriter.dart
@@ -100,9 +100,10 @@ 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);
- initializingExpression.parent = binding;
}
@override
@@ -124,23 +125,19 @@ class FieldInitializerRewriter extends InitializerRewriter {
}
void setInitializerExpression(Expression expression) {
- assert(initializingExpression.parent is FieldInitializer);
- FieldInitializer parent = initializingExpression.parent;
- parent.value = expression;
- expression.parent = parent;
+ (expression.parent as FieldInitializer).value = expression;
}
}
class LocalInitializerRewriter extends InitializerRewriter {
LocalInitializerRewriter(Expression initializingExpression)
: super(initializingExpression) {
- assert(initializingExpression.parent is LocalInitializer);
+ // The initializer is up two levels because the variable declaration node is
+ // in between.
+ assert(initializingExpression.parent.parent is LocalInitializer);
}
void setInitializerExpression(Expression expression) {
- assert(initializingExpression.parent is LocalInitializer);
- LocalInitializer parent = initializingExpression.parent;
- parent.variable.initializer = expression;
- expression.parent = parent;
+ (expression.parent as VariableDeclaration).initializer = expression;
}
}
« no previous file with comments | « no previous file | pkg/kernel/test/closures_initializers/closures_initializers.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698