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/transformer/AddAccessorsPhase.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/transformer/AddAccessorsPhase.java')
-rw-r--r-- | sources/scalac/transformer/AddAccessorsPhase.java | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/sources/scalac/transformer/AddAccessorsPhase.java b/sources/scalac/transformer/AddAccessorsPhase.java deleted file mode 100644 index 2f684e1acb..0000000000 --- a/sources/scalac/transformer/AddAccessorsPhase.java +++ /dev/null @@ -1,146 +0,0 @@ -/* ____ ____ ____ ____ ______ *\ -** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** -** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL ** -** /_____/\____/\___/\____/____/ ** -\* */ - -// $OldId: AddAccessorsPhase.java,v 1.1 2002/10/17 12:27:11 schinz Exp $ -// $Id$ - -package scalac.transformer; - -import java.util.Map; -import java.util.HashMap; - -import scalac.Global; -import scalac.Phase; -import scalac.PhaseDescriptor; -import scalac.CompilationUnit; -import scalac.ast.GenTransformer; -import scalac.ast.Tree; -import scalac.ast.Tree.Template; -import scalac.ast.TreeList; -import scalac.symtab.Modifiers; -import scalac.symtab.Symbol; -import scalac.symtab.Type; -import scalac.util.Name; -import scalac.util.Debug; - - -/** - * This phase adds private accessor fields and methods for all class - * constructor arguments which are accessed from within the class' - * methods, or nested classes. - */ -public class AddAccessorsPhase extends Phase { - - //######################################################################## - // Public Constructors - - /** Initializes this instance. */ - public AddAccessorsPhase(Global global, PhaseDescriptor descriptor) { - super(global, descriptor); - } - - //######################################################################## - // Public Methods - - /** Applies this phase to the given compilation unit. */ - public void apply(CompilationUnit unit) { - treeTransformer.apply(unit); - } - - //######################################################################## - // Private Class - Tree transformer - - /** The tree transformer */ - private final GenTransformer treeTransformer = new GenTransformer(global) { - - /** The parameter to accessor method map */ - private final Map/*<Symbol,Symbol>*/ methods = new HashMap(); - - /** The current method */ - private Symbol method; - - /** Creates an accessor field symbol for given parameter. */ - private Symbol createAccessorField(Symbol param) { - int flags = Modifiers.PRIVATE | Modifiers.STABLE; - Name name = Name.fromString(param.name + "$"); - Symbol owner = param.owner().constructorClass(); - Symbol field = owner.newField(param.pos, flags, name); - field.setType(param.type()); - owner.members().enterOrOverload(field); - return field; - } - - /** Creates an accessor method symbol for given parameter. */ - private Symbol createAccessorMethod(Symbol param) { - int flags = Modifiers.PRIVATE | Modifiers.STABLE | Modifiers.ACCESSOR; - Name name = param.name; - Symbol owner = param.owner().constructorClass(); - Symbol method = owner.newMethod(param.pos, flags, name); - method.setType(Type.MethodType(Symbol.EMPTY_ARRAY, param.type())); - owner.members().enterOrOverload(method); - methods.put(param, method); - return method; - } - - /** Transforms the given tree. */ - public Tree transform(Tree tree) { - switch (tree) { - case ClassDef(_, _, _, _, _, Template impl): { - Symbol clasz = tree.symbol(); - // transform parents and body - Symbol backup = this.method; - this.method = clasz.primaryConstructor(); - Tree[] parents = transform(impl.parents); - Tree[] body = transform(impl.body); - this.method = backup; - // create accessor field & method trees - TreeList accessors = new TreeList(); - Symbol[] params = clasz.valueParams(); - for (int i = 0; i < params.length; ++i) { - Symbol param = params[i]; - Symbol method = (Symbol)methods.remove(param); - if (method == null) continue; - Symbol field = createAccessorField(param); - accessors.append( - gen.ValDef( - field, - gen.Ident(param.pos, param))); - accessors.append( - gen.DefDef( - method, - gen.Select(gen.This(param.pos, clasz), field))); - } - body = Tree.concat(accessors.toArray(), body); - impl = gen.Template(clasz.pos, impl.symbol(), parents, body); - return gen.ClassDef(clasz, impl); - } - case AbsTypeDef(_, _, _, _): - case AliasTypeDef(_, _, _, _): - return Tree.Empty; // eliminate - case Typed(Tree expr, _): - return transform(expr); // eliminate - case DefDef(_, _, _, _, _, _): - Symbol backup = this.method; - this.method = tree.symbol(); - tree = super.transform(tree); - this.method = backup; - return tree; - case Ident(_): - Symbol symbol = tree.symbol(); - if (!symbol.owner().isPrimaryConstructor()) break; - if (symbol.owner() == this.method) break; - Symbol method = (Symbol)methods.get(symbol); - if (method == null) method = createAccessorMethod(symbol); - Tree qualifier = gen.This(tree.pos, method.owner()); - return gen.Apply(gen.Select(tree.pos, qualifier, method)); - } - return super.transform(tree); - } - - }; - - //######################################################################## -} |