Chromium Code Reviews| Index: lib/src/js/nodes.dart |
| diff --git a/lib/src/js/nodes.dart b/lib/src/js/nodes.dart |
| index 2f32feb0cfd8faa544e98ce718c8b92ea127956e..87ec7e1e074113cbc86dafed88399ef8675173c4 100644 |
| --- a/lib/src/js/nodes.dart |
| +++ b/lib/src/js/nodes.dart |
| @@ -991,9 +991,18 @@ class This extends Expression { |
| final _thisFinder = new _ThisFinder(); |
| class _ThisFinder extends BaseVisitor { |
| + int nested = 0; |
| bool found = false; |
| visitThis(This node) { |
| - found = true; |
| + if (nested <= 1) found = true; |
| + } |
| + visitFunctionExpression(FunctionExpression node) { |
|
ochafik
2015/09/15 18:05:17
Does FunctionExpression include arrow functions? (
|
| + for (var param in node.params) { |
| + param.accept(this); |
| + } |
| + ++nested; |
| + node.body.accept(this); |
| + --nested; |
| } |
| visitNode(Node node) { |
| if (!found) super.visitNode(node); |
| @@ -1030,6 +1039,11 @@ class NamedFunction extends Expression { |
| abstract class FunctionExpression extends Expression { |
| List<Parameter> get params; |
| get body; // Expression or block |
| + |
| + void visitChildren(NodeVisitor visitor) { |
| + for (Parameter param in params) param.accept(visitor); |
| + body.accept(visitor); |
| + } |
| } |
| class Fun extends FunctionExpression { |
| @@ -1045,11 +1059,6 @@ class Fun extends FunctionExpression { |
| accept(NodeVisitor visitor) => visitor.visitFun(this); |
| - void visitChildren(NodeVisitor visitor) { |
| - for (Parameter param in params) param.accept(visitor); |
| - body.accept(visitor); |
| - } |
| - |
| Fun _clone() => new Fun(params, body, |
| isGenerator: isGenerator, asyncModifier: asyncModifier); |
| @@ -1066,10 +1075,6 @@ class ArrowFun extends FunctionExpression { |
| accept(NodeVisitor visitor) => visitor.visitArrowFun(this); |
| - void visitChildren(NodeVisitor visitor) { |
| - for (Parameter param in params) param.accept(visitor); |
| - body.accept(visitor); |
| - } |
| /// True if this function actually closes of `this`. We use this in some |
| /// situations to generate different code. |
| bool get closesOverThis { |