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

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart

Issue 756383004: Refactored treatment of closure variables in dart2js CPS. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Comments Created 6 years 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 | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
index c2920361cc061daa33de32097a11b7f51eb95ff3..e800a5c94fe28ee1d877dc305e3b87795dfaa1cc 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
@@ -175,32 +175,37 @@ class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
});
}
+ ir.FunctionDefinition _makeFunctionBody(FunctionElement element,
+ ast.FunctionExpression node) {
+ FunctionSignature signature = element.functionSignature;
+ signature.orderedForEachParameter((ParameterElement parameterElement) {
+ irBuilder.createFunctionParameter(parameterElement);
+ });
+
+ List<ConstantExpression> defaults = new List<ConstantExpression>();
+ signature.orderedOptionalParameters.forEach((ParameterElement element) {
+ defaults.add(getConstantForVariable(element));
+ });
+
+ visit(node.body);
+
+ return irBuilder.makeFunctionDefinition(defaults);
+ }
+
ir.FunctionDefinition buildFunction(FunctionElement element) {
assert(invariant(element, element.isImplementation));
- ast.FunctionExpression function = element.node;
- assert(function != null);
- assert(elements[function] != null);
+ ast.FunctionExpression node = element.node;
+ assert(node != null);
+ assert(elements[node] != null);
DetectClosureVariables closureLocals = new DetectClosureVariables(elements);
- closureLocals.visit(function);
-
- return withBuilder(
- new IrBuilder(compiler.backend.constantSystem,
- element, closureLocals.usedFromClosure),
- () {
- FunctionSignature signature = element.functionSignature;
- signature.orderedForEachParameter((ParameterElement parameterElement) {
- irBuilder.createParameter(parameterElement);
- });
+ closureLocals.visit(node);
- List<ConstantExpression> defaults = new List<ConstantExpression>();
- signature.orderedOptionalParameters.forEach((ParameterElement element) {
- defaults.add(getConstantForVariable(element));
- });
+ IrBuilder builder = new IrBuilder(compiler.backend.constantSystem,
+ element,
+ closureLocals.usedFromClosure);
- visit(function.body);
- return irBuilder.makeFunctionDefinition(defaults);
- });
+ return withBuilder(builder, () => _makeFunctionBody(element, node));
}
ir.Primitive visit(ast.Node node) => node.accept(this);
@@ -844,7 +849,12 @@ class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
}
ir.FunctionDefinition makeSubFunction(ast.FunctionExpression node) {
- return buildFunction(elements[node]);
+ FunctionElement element = elements[node];
+ assert(invariant(element, element.isImplementation));
+
+ IrBuilder builder = new IrBuilder.innerFunction(irBuilder, element);
+
+ return withBuilder(builder, () => _makeFunctionBody(element, node));
}
ir.Primitive visitFunctionExpression(ast.FunctionExpression node) {
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698