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

Unified Diff: tests/compiler/dart2js/backend_dart/sexpr_unstringifier.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/tree_ir/tree_ir_tracer.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
diff --git a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
index 56315ad2ad78e314908c829a1c43a8daa2d98e37..d0eeba8d360b89f852ba3614c68560144a2ebc5a 100644
--- a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
+++ b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
@@ -184,6 +184,8 @@ class SExpressionUnstringifier {
new Tokens(
s.replaceAll("(", " ( ")
.replaceAll(")", " ) ")
+ .replaceAll("{", " { ")
+ .replaceAll("}", " } ")
.replaceAll(new RegExp(r"[ \t\n]+"), " ")
.trim()
.split(" ")
@@ -269,19 +271,37 @@ class SExpressionUnstringifier {
// name
Element element = new DummyElement("");
- if (tokens.current != "(") {
+ if (tokens.current != '(' && tokens.current != '{') {
// This is a named function.
element = new DummyElement(tokens.read());
}
+ // [closure-vars]
+ List<ClosureVariable> closureVariables = <ClosureVariable>[];
+ if (tokens.current == '{') {
+ tokens.read('{');
+ while (tokens.current != '}') {
+ String varName = tokens.read();
+ ClosureVariable variable =
+ new ClosureVariable(element, new DummyElement(varName));
+ closureVariables.add(variable);
+ name2variable[varName] = variable;
+ }
+ tokens.read('}');
+ }
+
// (args cont)
- List<Parameter> parameters = <Parameter>[];
+ List<Definition> parameters = <Definition>[];
tokens.consumeStart();
while (tokens.next != ")") {
String paramName = tokens.read();
- Parameter param = new Parameter(new DummyElement(paramName));
- name2variable[paramName] = param;
- parameters.add(param);
+ if (name2variable.containsKey(paramName)) {
+ parameters.add(name2variable[paramName]);
+ } else {
+ Parameter param = new Parameter(new DummyElement(paramName));
+ name2variable[paramName] = param;
+ parameters.add(param);
+ }
}
String contName = tokens.read("return");
@@ -293,7 +313,8 @@ class SExpressionUnstringifier {
Expression body = parseExpression();
tokens.consumeEnd();
- return new FunctionDefinition(element, cont, parameters, body, null, null);
+ return new FunctionDefinition(element, cont, parameters, body, null, null,
+ closureVariables);
}
/// (IsTrue arg)
@@ -339,7 +360,7 @@ class SExpressionUnstringifier {
tokens.consumeStart(DECLARE_FUNCTION);
// name =
- Local local = new DummyLocal(tokens.read());
+ ClosureVariable local = name2variable[tokens.read()];
tokens.read("=");
// function in
@@ -480,7 +501,7 @@ class SExpressionUnstringifier {
SetClosureVariable parseSetClosureVariable() {
tokens.consumeStart(SET_CLOSURE_VARIABLE);
- Local local = new DummyLocal(tokens.read());
+ ClosureVariable local = name2variable[tokens.read()];
Primitive value = name2variable[tokens.read()];
assert(value != null);
@@ -642,7 +663,7 @@ class SExpressionUnstringifier {
GetClosureVariable parseGetClosureVariable() {
tokens.consumeStart(GET_CLOSURE_VARIABLE);
- Local local = new DummyLocal(tokens.read());
+ ClosureVariable local = name2variable[tokens.read()];
tokens.consumeEnd();
return new GetClosureVariable(local);
« no previous file with comments | « pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698