diff options
Diffstat (limited to 'sources/scalac/ast/TreeInfo.java')
-rw-r--r-- | sources/scalac/ast/TreeInfo.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/sources/scalac/ast/TreeInfo.java b/sources/scalac/ast/TreeInfo.java index 19b2341f44..d0a8b41311 100644 --- a/sources/scalac/ast/TreeInfo.java +++ b/sources/scalac/ast/TreeInfo.java @@ -102,6 +102,10 @@ public class TreeInfo { return tree.symbol().isStable(); case Select(Tree qual, _): return tree.symbol().isStable() && isPureExpr(qual); + case Apply(Tree fn, Tree[] args): + return isPureExpr(fn) && args.length == 0; + case TypeApply(Tree fn, Tree[] targs): + return isPureExpr(fn); case Typed(Tree expr, _): return isPureExpr(expr); case Literal(_): @@ -167,19 +171,27 @@ public class TreeInfo { /** The method symbol of an application node, or Symbol.NONE, if none exists. */ public static Symbol methSymbol(Tree tree) { + Tree meth = methPart(tree); + if (meth.hasSymbol()) return meth.symbol(); + else return Symbol.NONE; + } + + /** The method part of an application node + */ + public static Tree methPart(Tree tree) { switch (tree) { case Apply(Tree fn, _): - return methSymbol(fn); + return methPart(fn); case TypeApply(Tree fn, _): - return methSymbol(fn); + return methPart(fn); case AppliedType(Tree fn, _): - return methSymbol(fn); + return methPart(fn); default: - if (tree.hasSymbol()) return tree.symbol(); - else return Symbol.NONE; + return tree; } } + /** returns true if the tree is a sequence-valued pattern. * precondition: tree is a pattern. * calls isSequenceValued( Tree, List ) because needs to remember bound |