| 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);
|
|
|