diff options
Diffstat (limited to 'sources/scalac/ast/TreeInfo.java')
-rw-r--r-- | sources/scalac/ast/TreeInfo.java | 307 |
1 files changed, 0 insertions, 307 deletions
diff --git a/sources/scalac/ast/TreeInfo.java b/sources/scalac/ast/TreeInfo.java deleted file mode 100644 index caeb7d72c0..0000000000 --- a/sources/scalac/ast/TreeInfo.java +++ /dev/null @@ -1,307 +0,0 @@ -/* ____ ____ ____ ____ ______ *\ -** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** -** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL ** -** /_____/\____/\___/\____/____/ ** -** ** -** $Id$ -\* */ - -package scalac.ast; - -import scalac.ApplicationError; -import scalac.util.Name; -import scalac.util.Names; -import scalac.symtab.Type; -import scalac.symtab.Symbol; -import scalac.symtab.Modifiers; - -import java.util.LinkedList; - -public class TreeInfo { - - public static boolean isTerm(Tree tree) { - return tree.isTerm(); - } - - public static boolean isType(Tree tree) { - return tree.isType(); - } - - public static boolean isOwnerDefinition(Tree tree) { - switch (tree) { - case PackageDef(_, _): - case ClassDef(_, _, _, _, _, _): - case ModuleDef(_, _, _, _): - case DefDef(_, _, _, _, _, _): - case Import(_, _): - return true; - default: - return false; - } - } - - public static boolean isDefinition(Tree tree) { - switch (tree) { - case PackageDef(_, _): - case ClassDef(_, _, _, _, _, _): - case ModuleDef(_, _, _, _): - case DefDef(_, _, _, _, _, _): - case ValDef(_, _, _, _): - case AbsTypeDef(_, _, _, _): - case AliasTypeDef(_, _, _, _): - case Import(_, _): - return true; - default: - return false; - } - } - - public static boolean isDeclaration(Tree tree) { - switch (tree) { - case DefDef(_, _, _, _, _, Tree rhs): - return rhs == Tree.Empty; - case ValDef(_, _, _, Tree rhs): - return rhs == Tree.Empty; - case AbsTypeDef(_, _, _, _): - case AliasTypeDef(_, _, _, _): - return true; - default: - return false; - } - } - - /** Is tree a pure definition? - */ - public static boolean isPureDef(Tree tree) { - switch (tree) { - case Tree.Empty: - case ClassDef(_, _, _, _, _, _): - case ModuleDef(_, _, _, _): - case AbsTypeDef(_, _, _, _): - case AliasTypeDef(_, _, _, _): - case Import(_, _): - return true; - case DefDef(_, Name name, _, _, _, _): - return name != Names.CONSTRUCTOR; - case ValDef(int mods, _, _, Tree rhs): - return (mods & Modifiers.MUTABLE) == 0 && isPureExpr(rhs); - case DocDef(_, Tree definition): - return isPureDef(definition); - default: - return false; - } - } - - /** Is tree a stable & pure expression? - */ - public static boolean isPureExpr(Tree tree) { - switch (tree) { - case Empty: - case This(_): - case Super(_, _): - return true; - case Ident(_): - assert tree.type != null : tree.toString(); - 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(_): - return true; - default: - return false; - } - } - - /** Is tree a pure constructor? - */ - public static boolean isPureConstr(Tree tree) { - switch (tree) { - case Ident(_): - case Select(_, _): - return tree.symbol() != null && tree.symbol().isPrimaryConstructor(); - case TypeApply(Tree constr, _): - return isPureConstr(constr); - case Apply(Tree fn, Tree[] args): - return args.length == 0 && isPureConstr(fn); - default: - return false; - } - } - - /** Is tree a self constructor call? - */ - public static boolean isSelfConstrCall(Tree tree) { - switch (tree) { - case Ident(Name name): - return name == Names.CONSTRUCTOR; - case TypeApply(Tree constr, _): - return isSelfConstrCall(constr); - case Apply(Tree constr, _): - return isSelfConstrCall(constr); - default: - return false; - } - } - - /** Is tree a variable pattern - */ - public static boolean isVarPattern(Tree pat) { - switch (pat) { - case Ident(Name name): - return name.isVariable(); - default: - return false; - } - } - - /** Is tree a this node which belongs to `enclClass'? - */ - public static boolean isSelf(Tree tree, Symbol enclClass) { - switch (tree) { - case This(_): - return tree.symbol() == enclClass; - default: - return false; - } - } - - /** 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 methPart(fn); - case TypeApply(Tree fn, _): - return methPart(fn); - case AppliedType(Tree fn, _): - return methPart(fn); - default: - return tree; - } - } - - /** The symbol with name `name' imported from import clause `tree'. - */ - public static Symbol importedSymbol(Tree tree, Name name) { - switch (tree) { - case Import(Tree expr, Name[] selectors): - Type pre = tree.symbol().type(); - if (pre != Type.ErrorType) { - boolean renamed = false; - for (int i = 0; i < selectors.length; i = i + 2) { - if (i + 1 < selectors.length && name.toTermName() == selectors[i + 1]) { - if (name.isTypeName()) - return pre.lookupNonPrivate(selectors[i].toTypeName()); - else - return pre.lookupNonPrivate(selectors[i]); - } else if (name.toTermName() == selectors[i]) { - renamed = true; - } else if (selectors[i] == Names.IMPORT_WILDCARD && !renamed) { - return pre.lookupNonPrivate(name); - } - } - } - return Symbol.NONE; - default: - throw new ApplicationError(); - } - } - - - /** returns true if the tree is a sequence-valued pattern. - * precondition: tree is a pattern. - * calls isSequenceValued( Tree, List ) because needs to remember bound - * values. - */ - public static boolean isSequenceValued( Tree tree ) { - return isSequenceValued( tree, new LinkedList() ); - } - - /** returns true if the tree is a sequence-valued pattern. - * precondition: tree is a pattern - */ - public static boolean isSequenceValued( Tree tree, LinkedList recVars ) { - switch( tree ) { - case Bind(_, Tree t): - recVars.addFirst( tree.symbol() ); - boolean res = isSequenceValued( t ); - recVars.removeFirst(); - return res; - case Sequence(_): - return true; - case Alternative(Tree[] ts): - for( int i = 0; i < ts.length; i++ ) { - if( isSequenceValued( ts[ i ] ) ) - return true; - } - return false; - case Ident(Name n): // if Ident is a recursive var, then true - return recVars.contains( tree.symbol() ); - case Apply( _, _ ): - case Literal( _ ): - case Select(_,_): - case Typed(_,_): - return false; - default: - throw new scalac.ApplicationError("Unexpected pattern "+tree.getClass()); - } - } - - /** returns true if the argument is an empty sequence pattern - */ - public static boolean isEmptySequence( Tree tree ) { - switch( tree ) { - case Sequence( Tree ts[] ): - return ( ts.length == 0 ); - default: - return false; - } - } - /** this test should correspond to the one used in TransMatch phase */ - public static boolean isRegularPattern( Tree tree ) { - switch (tree) { - case Alternative(_): - return true; - case Bind(_, Tree pat): - return isRegularPattern( pat ); - case Ident(_): - return false; - case CaseDef(Tree pat, _, _): - isRegularPattern(pat); - break; - case Sequence( Tree[] trees): - return true; - case Apply( _, Tree[] trees ): - for( int i = 0; i < trees.length; i++ ) - if( isRegularPattern( trees[i] ) ) - return true; - case Literal( _ ): - return false; - - } - return false; - } - - /** @todo replace with cleaner test (e.g. of a symbol flag) - */ - public static boolean isNameOfStarPattern( Name n ) { - String s = n.toString(); - return (s.indexOf("$") != -1) - &&(!s.startsWith("nest")); - } - -} |