summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-12-11 14:07:46 +0000
committerpaltherr <paltherr@epfl.ch>2003-12-11 14:07:46 +0000
commit58d053ebedf92597ea38ab40cae0acd706a47660 (patch)
tree327b0f2549c82a164bd719f01bf20e0df56e307d
parent063e9a81fa4840230617a12bc6fada0648d71782 (diff)
downloadscala-58d053ebedf92597ea38ab40cae0acd706a47660.tar.gz
scala-58d053ebedf92597ea38ab40cae0acd706a47660.tar.bz2
scala-58d053ebedf92597ea38ab40cae0acd706a47660.zip
- Added translation of statements
- Added stubs for translation of expressions
-rw-r--r--sources/scalac/atree/ATreeFromSTree.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/sources/scalac/atree/ATreeFromSTree.java b/sources/scalac/atree/ATreeFromSTree.java
index 18afd2a767..218291188a 100644
--- a/sources/scalac/atree/ATreeFromSTree.java
+++ b/sources/scalac/atree/ATreeFromSTree.java
@@ -8,10 +8,14 @@
package scalac.atree;
+import java.util.List;
+import java.util.ArrayList;
+
import scalac.Unit;
import scalac.ast.Tree;
import scalac.ast.Tree.Template;
import scalac.symtab.Definitions;
+import scalac.symtab.Symbol;
import scalac.util.Debug;
/** This class translates syntax trees into attributed trees. */
@@ -104,6 +108,7 @@ public class ATreeFromSTree {
case DefDef(_, _, _, _, _, Tree rhs):
AMethod method = new AMethod(tree.symbol(), false);
clasz.addMethod(method);
+ if (!method.isAbstract()) method.setCode(expression(rhs));
return;
default:
@@ -112,6 +117,52 @@ public class ATreeFromSTree {
}
//########################################################################
+ // Private Methods - Translating statements
+
+ /** Translates the statements. */
+ private ACode[] statement(List locals, Tree[] trees, int start, int count){
+ List codes = new ArrayList();
+ for (int i = start; i < count; i++) {
+ ACode code = statement(locals, trees[i]);
+ if (code != ACode.Void) codes.add(code);
+ }
+ return (ACode[])codes.toArray(new ACode[codes.size()]);
+ }
+
+ /** Translates the statement. */
+ private ACode statement(List locals, Tree tree) {
+ switch (tree) {
+
+ case Empty:
+ return make.Void;
+
+ case ValDef(_, _, _, Tree rhs):
+ Symbol symbol = tree.symbol();
+ locals.add(symbol);
+ ALocation location = ALocation.Local(symbol, false);
+ return make.Store(tree, location, expression(rhs));
+
+ default:
+ return ACode.Drop(expression(tree), tree.type());
+ }
+ }
+
+ //########################################################################
+ // Private Methods - Translating expressions
+
+ /** Translates the expressions. */
+ private ACode[] expression(Tree[] trees) {
+ ACode[] codes = new ACode[trees.length];
+ for (int i = 0; i < codes.length; i++) codes[i] = expression(trees[i]);
+ return codes;
+ }
+
+ /** Translates the expression. */
+ private ACode expression(Tree tree) {
+ return ACode.Void;
+ }
+
+ //########################################################################
// Private Methods - Translating constants
/** Translates the constant. */