summaryrefslogtreecommitdiff
path: root/src/spiglet/spiglet2kanga/SpgExpr.java
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2014-11-27 15:07:54 +0800
committerIru Cai <mytbk920423@gmail.com>2014-11-27 15:07:54 +0800
commitf0db604d42595101d32240cb445272dd400a9716 (patch)
treefe69c137b9d59b2f00a91187dad1183fd4fd82db /src/spiglet/spiglet2kanga/SpgExpr.java
parent13d99117abb64f97b5636029134ccae8acb89f59 (diff)
downloadminijava-f0db604d42595101d32240cb445272dd400a9716.tar.xz
get def use
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;
+
+ }
+ }
}