summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/AddAccessors.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-11-12 19:12:52 +0000
committerpaltherr <paltherr@epfl.ch>2003-11-12 19:12:52 +0000
commita61eb893701f4d6d34ee7156e8fa8b52375ace07 (patch)
tree15fc7e22f70cd653cc68fc2eef78e3f05f8c6f25 /sources/scalac/transformer/AddAccessors.java
parentf5437e9a8bb543cf57b295739dd3abdebb7be651 (diff)
downloadscala-a61eb893701f4d6d34ee7156e8fa8b52375ace07.tar.gz
scala-a61eb893701f4d6d34ee7156e8fa8b52375ace07.tar.bz2
scala-a61eb893701f4d6d34ee7156e8fa8b52375ace07.zip
- Fixed some bugs in AddAccessors
- Moved all code into AddAccessorsPhase
Diffstat (limited to 'sources/scalac/transformer/AddAccessors.java')
-rw-r--r--sources/scalac/transformer/AddAccessors.java146
1 files changed, 0 insertions, 146 deletions
diff --git a/sources/scalac/transformer/AddAccessors.java b/sources/scalac/transformer/AddAccessors.java
deleted file mode 100644
index 9b91677a83..0000000000
--- a/sources/scalac/transformer/AddAccessors.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ____ ____ ____ ____ ______ *\
-** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
-** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
-** /_____/\____/\___/\____/____/ **
-\* */
-
-// $OldId: AddAccessors.java,v 1.2 2002/11/21 14:14:31 schinz Exp $
-// $Id$
-
-package scalac.transformer;
-
-import scalac.*;
-import scalac.ast.*;
-import scalac.typechecker.*;
-import scalac.symtab.*;
-import scalac.util.*;
-
-import java.util.*;
-
-/**
- * Add private accessor functions for all class constructor arguments
- * which are accessed from within the class' methods, or nested
- * classes.
- *
- * @author Michel Schinz
- * @version 1.0
- */
-
-public class AddAccessors extends Transformer {
- public AddAccessors(Global global) {
- super(global);
- }
-
- protected Name valName(Symbol sym) {
- return Name.fromString(sym.name.toString() + "$");
- }
-
- protected final HashMap/*<Symbol,Symbol>*/ accessorMap = new HashMap();
- protected boolean inClassContext;
- protected Symbol clasz;
-
- protected Symbol accessor(Symbol sym) {
- Symbol accessor = (Symbol)accessorMap.get(sym);
- if (accessor == null) {
- accessor = new TermSymbol(sym.pos,
- sym.name,
- sym.classOwner(),
- Modifiers.STABLE
- | Modifiers.ACCESSOR
- | Modifiers.PRIVATE);
- accessor.setType(Type.MethodType(Symbol.EMPTY_ARRAY, sym.type()));
- accessorMap.put(sym, accessor);
- }
- return accessor;
- }
-
- public Tree transform(Tree tree) {
- switch (tree) {
- case ClassDef(_, // :
- _,
- Tree.AbsTypeDef[] tparams,
- Tree.ValDef[][] vparams,
- Tree tpe,
- Tree.Template impl): {
- Symbol backup = clasz;
- Symbol clsSym = clasz = tree.symbol();
- assert vparams.length == 1;
- Tree.ValDef[] params = vparams[0];
-
- // Recursively transform body
- Tree[] body = impl.body;
- LinkedList/*<Tree>*/ newBody = new LinkedList();
- for (int i = 0; i < body.length; ++i) {
- Tree mem = body[i];
- Symbol sym = mem.symbol();
- inClassContext =
- mem.definesSymbol() && (sym.isClass() || sym.isMethod());
- newBody.add(transform(mem));
- }
-
- // Add value definitions and accessors for all constructor
- // arguments which were found in the body of the class.
- Scope newMembers = new Scope(clsSym.members());
- for (int i = 0; i < params.length; ++i) {
- Symbol paramSym = params[i].symbol();
- if (accessorMap.containsKey(paramSym)) {
- int pos = paramSym.pos;
- Symbol accessorSym = (Symbol)accessorMap.get(paramSym);
-
- Symbol valSym = new TermSymbol(pos,
- valName(paramSym),
- clsSym,
- Modifiers.PRIVATE);
- valSym.setType(paramSym.type());
-
- newBody.addFirst(gen.DefDef(accessorSym, gen.Ident(pos, valSym)));
- newMembers.enter(accessorSym);
-
- newBody.addFirst(gen.ValDef(valSym, gen.Ident(pos, paramSym)));
- newMembers.enter(valSym);
- }
- }
-
- // Update class type with new values/accessors.
- clsSym.updateInfo(Type.compoundType(clsSym.parents(),
- newMembers,
- clsSym));
-
- inClassContext = false;
- Tree[] newParents = transform(impl.parents);
-
- Tree[] newBodyA = (Tree[])newBody.toArray(new Tree[newBody.size()]);
-
- clasz = backup;
- return copy.ClassDef(tree,
- clsSym,
- transform(tparams),
- transform(vparams),
- transform(tpe),
- copy.Template(impl, newParents, newBodyA));
- }
-
- case Select(Tree qualifier, _): {
- Symbol sym = tree.symbol();
- assert sym.kind != Kinds.NONE : tree;
- if (sym.owner().isPrimaryConstructor())
- return gen.Apply(gen.Select(tree.pos, transform(qualifier), accessor(sym)));
- else
- return copy.Select(tree, sym, transform(qualifier));
- }
-
- case Ident(_): {
- Symbol sym = tree.symbol();
- if (inClassContext
- && sym.name.isTermName()
- && sym.owner().isPrimaryConstructor())
- return gen.Apply(gen.Select(gen.This(tree.pos, clasz), accessor(sym)));
- else
- return copy.Ident(tree, sym);
- }
-
- default:
- return super.transform(tree);
- }
- }
-}