diff options
author | paltherr <paltherr@epfl.ch> | 2003-12-10 17:14:29 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-12-10 17:14:29 +0000 |
commit | 644a9f0d71bec548fc3a06be53b6a62a121ef15b (patch) | |
tree | 49ddc18fa28a0ad7ef45654aab419ec806381554 | |
parent | da6aa22fc8c683a8a520dd84d93e4f9202008120 (diff) | |
download | scala-644a9f0d71bec548fc3a06be53b6a62a121ef15b.tar.gz scala-644a9f0d71bec548fc3a06be53b6a62a121ef15b.tar.bz2 scala-644a9f0d71bec548fc3a06be53b6a62a121ef15b.zip |
- Added template and member translation
-rw-r--r-- | sources/scalac/atree/ATreeFromSTree.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/sources/scalac/atree/ATreeFromSTree.java b/sources/scalac/atree/ATreeFromSTree.java index 19129dcef8..18afd2a767 100644 --- a/sources/scalac/atree/ATreeFromSTree.java +++ b/sources/scalac/atree/ATreeFromSTree.java @@ -9,6 +9,8 @@ package scalac.atree; import scalac.Unit; +import scalac.ast.Tree; +import scalac.ast.Tree.Template; import scalac.symtab.Definitions; import scalac.util.Debug; @@ -38,6 +40,75 @@ public class ATreeFromSTree { /** Translates the unit's body and stores the result in it. */ public void translate(Unit unit) { + template(unit.repository = new ARepository(), unit.body); + } + + //######################################################################## + // Private Methods - Translating templates + + /** Translates the templates and adds them to the repository. */ + private void template(ARepository repository, Tree[] trees) { + for (int i = 0; i < trees.length; i++) template(repository, trees[i]); + } + + /** Translates the template and adds it to the repository. */ + private void template(ARepository repository, Tree tree) { + switch (tree) { + + case Empty: + return; + + case ClassDef(_, _, _, _, _, Template(_, Tree[] body)): + AClass clasz = new AClass(tree.symbol()); + repository.addClass(clasz); + member(clasz, body); + return; + + case PackageDef(_, Template(_, Tree[] body)): + template(repository, body); + return; + + case ValDef(_, _, _, Tree rhs): + // !!! + return; + + default: + throw Debug.abort("illegal case", tree); + } + } + + //######################################################################## + // Private Methods - Translating members + + /** Translates the members and adds them to the class. */ + private void member(AClass clasz, Tree[] trees) { + for (int i = 0; i < trees.length; i++) member(clasz, trees[i]); + } + + /** Translates the member and adds it to the class. */ + private void member(AClass clasz, Tree tree) { + switch (tree) { + + case Empty: + return; + + case ClassDef(_, _, _, _, _, _): + template(clasz, tree); + return; + + case ValDef(_, _, _, Tree rhs): + AField field = new AField(tree.symbol(), false); + clasz.addField(field); + return; + + case DefDef(_, _, _, _, _, Tree rhs): + AMethod method = new AMethod(tree.symbol(), false); + clasz.addMethod(method); + return; + + default: + throw Debug.abort("illegal case", tree); + } } //######################################################################## |