gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemauthor | Doni Pracner <quinnuendo@gmail.com> | |
Fri, 18 Jul 2014 18:45:18 +0000 (20:45 +0200) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Fri, 18 Jul 2014 18:45:18 +0000 (20:45 +0200) |
samples/fields.mj | [new file with mode: 0644] | patch | blob |
src-wsl/transf-exp.wsl | patch | blob | history | |
src/mjc2wsl.java | patch | blob | history |
diff --git a/samples/fields.mj b/samples/fields.mj
--- /dev/null
+++ b/samples/fields.mj
@@ -0,0 +1,44 @@
+program F
+ class HolderClass {
+ int simple;
+ int[] arry;
+ }
+
+ HolderClass holder;
+
+{
+ void main()
+ int i, size;
+ {
+ holder = new HolderClass;
+ holder.simple = 5;
+
+ print(holder.simple,10);
+
+ print(chr(10));
+
+ size = 5;
+ holder.arry = new int[size];
+ holder.arry[0] = size+1;
+ i = 1;
+ while (i < size){
+ holder.arry[i] = holder.arry[i-1]-1;
+ i++;
+ }
+
+ i = 0;
+ while (i < size){
+ print(holder.arry[i],3);
+ i++;
+ }
+ print(chr(10));
+
+ i = 0;
+ while (i < size){
+ holder.arry[i]--;
+ print(holder.arry[i],3);
+ i++;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src-wsl/transf-exp.wsl b/src-wsl/transf-exp.wsl
--- a/src-wsl/transf-exp.wsl
+++ b/src-wsl/transf-exp.wsl
@Delete
FI
OD;
- FOREACH Statement DO
- IF @Trans?(TR_Flag_Removal) THEN
- @Trans(TR_Flag_Removal, "");
- FI
- OD;
+
C:"remove all the comments ";
FOREACH Statement DO
IF @ST(@I) = T_Comment THEN
@Trans(TR_Floop_To_While, "");
FI
OD;
+ FOREACH Statement DO
+ IF @Trans?(TR_Flag_Removal) THEN
+ @Trans(TR_Flag_Removal, "");
+ FI
+ OD;
C:"Go back to the start, and remove redundant";
@GOTO(< >);
@Trans(TR_Delete_All_Redundant, "");
diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java
--- a/src/mjc2wsl.java
+++ b/src/mjc2wsl.java
case getfield: {
int f = get2();
+ prl(createStartVar("tempa"));
prl(createTopEStack());
prl(createToEStack(createObject("tempa") + "[" + (f + 1) + "]"));
+ prl(createEndVar());
break;
}
case putfield: {
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(createTopTwoEStack());
- prl("VAR < tempArray := " + createObject("tempb") + " > :");
- prl("tempArray[" + (f + 1) + "]:=tempa ENDVAR;");
+ prl(createStartVar("tempa", "tempb"));
+ prl(createTopTwoEStack());
+ prl(createObject("tempb") + "[" + (f + 1) + "]:=tempa;");
+ prl(createEndVar());
break;
}
break;
}
+ case const_m1: {
+ prl(createToEStack(-1));
+ break;
+ }
+
case const_0:
case const_1:
case const_2: