gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a2bd7f2)
raw | patch | inline | side by side (parent: a2bd7f2)
author | Doni Pracner <quinnuendo@gmail.com> | |
Mon, 20 Jan 2014 19:39:17 +0000 (20:39 +0100) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Mon, 20 Jan 2014 19:39:17 +0000 (20:39 +0100) |
src/mjc2wsl.java | patch | blob | history |
diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java
index 4b231aab04e6d3fdb2c0d84d63aff4713b0f9f5a..274bb7e448cd0d90f883ecab19e0093b868ac04a 100644 (file)
--- a/src/mjc2wsl.java
+++ b/src/mjc2wsl.java
ret.append("mjvm_locals := ARRAY(1,0), ");
ret.append("\n\tmjvm_statics := ARRAY("+numWords+",0), ");
ret.append("\n\tmjvm_arrays := < >, ");
+ ret.append("\n\tmjvm_objects := < >, ");
ret.append("\n mjvm_estack := < >, mjvm_mstack := < >, ");
ret.append("\n mjvm_fp := 0, mjvm_sp := 0,");
ret.append("\n t_e_m_p := 0 > :");
return "mjvm_arrays["+ i+"]";
}
+ private String genObject(String i){
+ return "mjvm_objects["+ i+"]";
+ }
+
/**
* Creates a WSL comment with care to quote chars.
*/
prl(cmdFromEStack(genStatic(get2())));
break;
}
- //TODO getfield, putfield
- case getfield:
+
+ case getfield:{
+ int f = get2();
+ prl(getTop());
+ prl(cmdToEStack(genObject("tempa")+"["+(f+1)+"]"));
+ break;
+ }
case putfield:{
- prl(createComment("fields are not processed properly", C_ERR));
- message("fields are not processed properly", M_ERR);
- get2();
+ int f = get2();
+ //we need to use a temparray as a pointer, WSL
+ //otherwise tries to access it as a list of lists and fails
+ prl(getTopTwo());
+ prl("VAR < tempArray := "+genObject("tempb")+" > :");
+ prl("tempArray["+(f+1)+"]:=tempa ENDVAR;");
break;
}
prl(loc(b1)+" := " +loc(b1)+" + "+b2+";");
break;
}
- //TODO new_ newarray
+
case new_ :{
- prl(createComment("memory allocation not processed properly", C_ERR));
- message("memory allocation not processed properly", M_ERR);
- get2();
+ int size = get2();
+ //TODO maybe objects and arrays should be in the same list?
+ prl("mjvm_objects := mjvm_objects ++ < ARRAY("+size+",0) >;");
+ prl(cmdToEStack("LENGTH(mjvm_objects)"));
break;
}
case newarray :{