summaryrefslogtreecommitdiff
path: root/src/spiglet/spiglet2kanga/SpgExpr.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/spiglet/spiglet2kanga/SpgExpr.java')
-rw-r--r--src/spiglet/spiglet2kanga/SpgExpr.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/spiglet/spiglet2kanga/SpgExpr.java b/src/spiglet/spiglet2kanga/SpgExpr.java
index f10c4b7..9f5fef9 100644
--- a/src/spiglet/spiglet2kanga/SpgExpr.java
+++ b/src/spiglet/spiglet2kanga/SpgExpr.java
@@ -1,10 +1,18 @@
package spiglet.spiglet2kanga;
+import java.util.HashSet;
import java.util.Vector;
public class SpgExpr extends SpgSym {
public enum ExpType { CALL, ALLOC, BinOp, Simple };
+ /*
+ * CALL Simp (Tmp Tmp ...)
+ * HALLOCATE Simp
+ * BinOP Tmp Simp
+ * Simp := Tmp | Int | Label
+ */
+
public ExpType type;
public String op;
public SpgTemp oprand;
@@ -44,4 +52,26 @@ public class SpgExpr extends SpgSym {
}
}
+
+ public HashSet<SpgTemp> getTmpUsed() {
+ HashSet<SpgTemp> s = new HashSet<SpgTemp>();
+ switch (type) {
+ case ALLOC:
+ return se.getTmpUsed();
+ case BinOp:
+ s.add(oprand);
+ s.addAll(se.getTmpUsed());
+ return s;
+ case CALL:
+ s.addAll(se.getTmpUsed());
+ s.addAll(callParams);
+ return s;
+ case Simple:
+ System.err.println("Should not be here...");
+ return ((SpgSimpExpr)this).getTmpUsed();
+ default:
+ return null;
+
+ }
+ }
}