diff options
author | Iru Cai <mytbk920423@gmail.com> | 2014-11-27 15:07:54 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2014-11-27 15:07:54 +0800 |
commit | f0db604d42595101d32240cb445272dd400a9716 (patch) | |
tree | fe69c137b9d59b2f00a91187dad1183fd4fd82db /src/spiglet/spiglet2kanga/SpgExpr.java | |
parent | 13d99117abb64f97b5636029134ccae8acb89f59 (diff) | |
download | minijava-f0db604d42595101d32240cb445272dd400a9716.tar.xz |
get def use
Diffstat (limited to 'src/spiglet/spiglet2kanga/SpgExpr.java')
-rw-r--r-- | src/spiglet/spiglet2kanga/SpgExpr.java | 30 |
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; + + } + } } |