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

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

Issue 2712473003: closure conversion: Support closures in initializers (Closed)
Patch Set: Address comments Created 3 years, 10 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/lib/transformations/closure/converter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/lib/transformations/closure/context.dart
diff --git a/pkg/kernel/lib/transformations/closure/context.dart b/pkg/kernel/lib/transformations/closure/context.dart
index 3a3495e1aea04876b9755b211af885b076eb25c7..d2868b03a844d3211a42e2e7f1d33773980a4289 100644
--- a/pkg/kernel/lib/transformations/closure/context.dart
+++ b/pkg/kernel/lib/transformations/closure/context.dart
@@ -8,16 +8,12 @@ import '../../ast.dart'
show
Arguments,
Class,
- ConstructorInvocation,
Expression,
- ExpressionStatement,
IntLiteral,
- InterfaceType,
MethodInvocation,
Name,
NullLiteral,
PropertyGet,
- PropertySet,
StringLiteral,
Throw,
VariableDeclaration,
@@ -122,17 +118,12 @@ class LocalContext extends Context {
factory LocalContext(ClosureConverter converter, Context parent) {
Class contextClass = converter.contextClass;
assert(contextClass.constructors.length == 1);
- IntLiteral zero = new IntLiteral(0);
- VariableDeclaration declaration = new VariableDeclaration.forValue(
- new ConstructorInvocation(
- contextClass.constructors.first, new Arguments(<Expression>[zero])),
- type: new InterfaceType(contextClass));
- declaration.name = "#context";
- converter.insert(declaration);
- converter.insert(new ExpressionStatement(new PropertySet(
- new VariableGet(declaration), new Name('parent'), parent.expression)));
+ converter.rewriter.insertContextDeclaration(
+ contextClass, parent.expression);
- return new LocalContext._internal(converter, parent, declaration, zero);
+ return new LocalContext._internal(converter, parent,
+ converter.rewriter.contextDeclaration,
+ converter.rewriter.contextSize);
}
Expression get expression => accessor.buildSimpleRead();
@@ -142,8 +133,7 @@ class LocalContext extends Context {
void extend(VariableDeclaration variable, Expression value) {
Arguments arguments =
new Arguments(<Expression>[new IntLiteral(variables.length), value]);
- converter.insert(new ExpressionStatement(
- new MethodInvocation(expression, new Name('[]='), arguments)));
+ converter.rewriter.insertExtendContext(expression, arguments);
++size.value;
variables.add(variable);
initializers[variable] = arguments;
@@ -215,7 +205,7 @@ class NestedContext extends Context {
}
Expression lookup(VariableDeclaration variable) {
- var context = expression;
+ Expression context = expression;
for (var variables in variabless) {
var index = variables.indexOf(variable);
if (index != -1) {
@@ -229,8 +219,8 @@ class NestedContext extends Context {
Expression assign(VariableDeclaration variable, Expression value,
{bool voidContext: false}) {
- var context = expression;
- for (var variables in variabless) {
+ Expression context = expression;
+ for (List<VariableDeclaration> variables in variabless) {
var index = variables.indexOf(variable);
if (index != -1) {
return IndexAccessor
« no previous file with comments | « no previous file | pkg/kernel/lib/transformations/closure/converter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698