diff options
author | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-18 18:33:03 +0000 |
---|---|---|
committer | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-18 18:33:03 +0000 |
commit | d3819b93ab8b2de3d5cc35c33b8258ccdb5a931a (patch) | |
tree | dfc6f7f497e58ea3321e6f687b11313d2afa86b5 /sources/scalac/ast/TreeCloner.java | |
parent | 0e82079908655682e5140ad521cef0572cb6d2a4 (diff) | |
download | scala-d3819b93ab8b2de3d5cc35c33b8258ccdb5a931a.tar.gz scala-d3819b93ab8b2de3d5cc35c33b8258ccdb5a931a.tar.bz2 scala-d3819b93ab8b2de3d5cc35c33b8258ccdb5a931a.zip |
Removed old Scalac code in sources and various ...
Removed old Scalac code in sources and various other obsolete elements.
Diffstat (limited to 'sources/scalac/ast/TreeCloner.java')
-rw-r--r-- | sources/scalac/ast/TreeCloner.java | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/sources/scalac/ast/TreeCloner.java b/sources/scalac/ast/TreeCloner.java deleted file mode 100644 index 8d96c1b23e..0000000000 --- a/sources/scalac/ast/TreeCloner.java +++ /dev/null @@ -1,137 +0,0 @@ -/* ____ ____ ____ ____ ______ *\ -** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** -** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002-2005, LAMP/EPFL ** -** /_____/\____/\___/\____/____/ ** -\* */ - -// $Id$ - -package scalac.ast; - -import java.util.Map; - -import scalac.Global; -import scalac.symtab.Symbol; -import scalac.symtab.SymbolCloner; -import scalac.symtab.SymbolSubstTypeMap; -import scalac.symtab.Type; -import scalac.util.Debug; - -/** - * This class implements a deep tree cloner. It provides support to - * change tree symbols and tree types on the fly. This cloner never - * clones symbols, but its default implementation of getSymbolFor - * requires that all symbols that are defined by the tree to be cloned - * are present in the symbol substitution. This implies that if the - * tree to clone contains definitions, it must first be traversed to - * map all defined symbols. To do this, one can use TreeSymbolCloner. - */ -public class TreeCloner extends Transformer { - - //######################################################################## - // Private Fields - - /** The symbol substitution to apply to tree symbols */ - private final Map/*<Symbol,Symbol>*/ symbols; - - /** The type map to apply to tree types */ - private final Type.Map types; - - //######################################################################## - // Public Constructors - - /** Initializes a new instance. */ - public TreeCloner(Global global, SymbolSubstTypeMap types) { - this(global, types.getSymbols(), types); - } - - /** Initializes a new instance. */ - public TreeCloner(Global global, Map symbols, Type.Map types) { - super(global, global.make, new StrictTreeCopier(global.make)); - this.symbols = symbols; - this.types = types; - } - - //######################################################################## - // Public Methods - - /** - * Returns the symbol for the given cloned tree. The default - * implementation returns the result of the application of the - * symbol substitution to the given tree's symbol. If there is no - * mapping for that symbol returns that same symbol. - */ - public Symbol getSymbolFor(Tree tree) { - Symbol oldsym = tree.symbol(); - Symbol newsym = (Symbol)symbols.get(oldsym); - // cloned definitions must have a cloned symbol - assert newsym != null || !tree.definesSymbol() : Debug.show(oldsym); - return newsym != null ? newsym : oldsym; - } - - /** - * Returns the type for the given cloned tree. The default - * implementation returns the result of the application of the - * type map to the given tree's type. - */ - public Type getTypeFor(Tree tree) { - return types.apply(tree.getType()); - } - - /** Traverses the given tree and returns a deeply cloned one. */ - public Tree transform(Tree tree) { - tree = super.transform(tree); - if (tree.hasSymbol()) tree.setSymbol(getSymbolFor(tree)); - tree.setType(getTypeFor(tree)); - return tree; - } - - //######################################################################## -} - - -/** !!! */ -public class GenTreeCloner extends GenTransformer { - - //######################################################################## - // Public Fields - - /** The symbol cloner */ - public final SymbolCloner cloner; - - //######################################################################## - // Public Constructors - - /** Initializes a new instance. */ - public GenTreeCloner(Global global, Type.Map map, SymbolCloner cloner) { - super(global, map); - this.cloner = cloner; - } - - public GenTreeCloner(Global global, SymbolCloner cloner) { - super(global, cloner.getTypeMap()); - this.cloner = cloner; - } - - //######################################################################## - // Public Methods - - public Symbol getSymbolFor(Tree tree) { - switch (tree) { - case ValDef(_, _, _, _): - if (tree.symbol().owner().isClass()) break; - Symbol symbol = cloner.cloneSymbol(tree.symbol()); - symbol.setType(transform(symbol.type())); - return symbol; - case LabelDef(_, _, _): - Symbol symbol = cloner.cloneSymbol(tree.symbol()); - symbol.setType(transform(symbol.type())); - return symbol; - } - Symbol symbol = (Symbol)cloner.clones.get(tree.symbol()); - assert !tree.definesSymbol() || symbol != null: tree; - return symbol != null ? symbol : tree.symbol(); - } - - //######################################################################## -} |