summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2014-11-27 14:36:04 +0800
committerIru Cai <mytbk920423@gmail.com>2014-11-27 14:36:04 +0800
commit13d99117abb64f97b5636029134ccae8acb89f59 (patch)
tree6e5f6b88b3bd92c8c167de305b922bc936146f5d
parent37365fc2749ff24ef5040a8db3462fc2deebd48f (diff)
downloadminijava-13d99117abb64f97b5636029134ccae8acb89f59.tar.xz
convert jump target string to real statement
-rw-r--r--src/spiglet/spiglet2kanga/SpgProc.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/spiglet/spiglet2kanga/SpgProc.java b/src/spiglet/spiglet2kanga/SpgProc.java
index c4d6e5f..f1f0f34 100644
--- a/src/spiglet/spiglet2kanga/SpgProc.java
+++ b/src/spiglet/spiglet2kanga/SpgProc.java
@@ -1,5 +1,6 @@
package spiglet.spiglet2kanga;
+import java.util.HashMap;
import java.util.Vector;
public class SpgProc extends SpgSym {
@@ -31,4 +32,40 @@ public class SpgProc extends SpgSym {
}
System.err.println();
}
+
+ public void setJmpTarget() {
+ // convert all the jump labels to real statement
+
+ // first scan all the labels
+ HashMap<String, SpgStmt> s = new HashMap<String, SpgStmt>();
+ for (int i=0; i<statements.size(); i++) {
+ SpgStmt stmt = statements.elementAt(i);
+ if (stmt.lb!=null) {
+ s.put(stmt.lb, stmt);
+ }
+ }
+
+ for (int i=0; i<statements.size(); i++) {
+ SpgStmt stmt = statements.elementAt(i);
+ if (stmt.type==SpgStmt.StmtType.JUMP) {
+ stmt.succ1 = s.get(stmt.jmptarget);
+ stmt.succ2 = null;
+ } else if (stmt.type==SpgStmt.StmtType.CJUMP) {
+ if (i==statements.size()-1) {
+ stmt.succ1 = null;
+ } else {
+ stmt.succ1 = statements.elementAt(i+1);
+ }
+ stmt.succ2 = s.get(stmt.jmptarget);
+ } else {
+ if (i==statements.size()-1) {
+ stmt.succ1 = null;
+ }
+ }
+ }
+ }
+
+
+
+
}