Chromium Code Reviews| Index: compiler/java/com/google/dart/compiler/ast/DartFunctionObjectInvocation.java |
| =================================================================== |
| --- compiler/java/com/google/dart/compiler/ast/DartFunctionObjectInvocation.java (revision 12980) |
| +++ compiler/java/com/google/dart/compiler/ast/DartFunctionObjectInvocation.java (working copy) |
| @@ -12,11 +12,17 @@ |
| public class DartFunctionObjectInvocation extends DartInvocation { |
| private DartExpression target; |
| + private boolean isCascade; |
|
scheglov
2012/09/27 22:38:43
Can you give example of cascade here?
Brian Wilkerson
2012/09/28 15:54:39
Not off the top of my head. I'll double check and
|
| - public DartFunctionObjectInvocation(DartExpression target, |
| + public DartFunctionObjectInvocation(DartExpression target, List<DartExpression> args) { |
| + this(target, false, args); |
| + } |
| + |
| + public DartFunctionObjectInvocation(DartExpression target, boolean isCascade, |
| List<DartExpression> args) { |
| super(args); |
| this.target = becomeParentOf(target); |
| + this.isCascade = isCascade; |
| } |
| @Override |
| @@ -24,6 +30,24 @@ |
| return target; |
| } |
| + public DartExpression getRealTarget() { |
|
scheglov
2012/09/27 22:38:43
We could put (at least implementation) into ASTNod
Brian Wilkerson
2012/09/28 15:54:39
Let's discuss this off-line.
|
| + if (isCascade) { |
| + DartNode ancestor = getParent(); |
| + while (!(ancestor instanceof DartCascadeExpression)) { |
| + if (ancestor == null) { |
| + return target; |
| + } |
| + ancestor = ancestor.getParent(); |
| + } |
| + return ((DartCascadeExpression) ancestor).getTarget(); |
| + } |
| + return target; |
| + } |
| + |
| + public boolean isCascade() { |
| + return isCascade; |
| + } |
| + |
| @Override |
| public void visitChildren(ASTVisitor<?> visitor) { |
| safelyVisitChild(target, visitor); |