X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;h=77678a0beafefd26d47cee8adb44ec1bda285194;hp=c45de80f96e614e9652247d1919598fca3245f79;hb=bfa6f5cb35fa27845f7bdf72f2238f987bf6e83b;hpb=46d034455b8af0cd19a8b4eaaf179d8ba8eb7a11;ds=sidebyside diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index c45de80..77678a0 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -253,6 +253,13 @@ public class mjc2wsl{ return res; } + private String cmdPopEStack() { + String res = "mjvm_estack := TAIL(mjvm_estack);"; + if (genPrintEStackOnChange) res +="PRINT(\"eStack\",mjvm_estack);"; + return res; + } + + private String getTopTwo(){ return cmdFromEStack("tempa") + "\n" + cmdFromEStack("tempb"); } @@ -403,7 +410,18 @@ public class mjc2wsl{ break; } - //TODO neg, shl, shr, inc + case neg :{ + prl(getTop()); + prl(cmdToEStack("-tempa")); + break; + } + //TODO shl, shr + + case inc : { + int b1 = get(), b2 = get(); + prl(loc(b1)+" := " +loc(b1)+" + "+b2); + break; + } //TODO new_ newarray case new_ : get();//needs a short, but a byte will be taken bellow as well @@ -415,7 +433,12 @@ public class mjc2wsl{ } //TODO aload, asstore, baload, bastore //TODO arraylength - //TODO pop, dup, dup2 + //TODO dup, dup2 + + case pop : { + prl(cmdPopEStack()); + break; + } case jmp: { prl("CALL a" + (counter + get2()) + ";"); @@ -463,24 +486,24 @@ public class mjc2wsl{ } // read, print - case read:{ + case bread:{ //TODO make it a char for read message("char is read like a number", M_WAR); prl(createComment("char is read like a number",C_SPEC)); } - case bread: { + case read: { prl("tempa := @String_To_Num(@Read_Line(Standard_Input_Port));"); prl(cmdToEStack("tempa")); break; } // the prints - case print:{ + case bprint:{ // TODO need to make it a char on print message("chars will be printed as number codes", M_WAR); prl(createComment("char will be printed as a number code",C_SPEC)); } - case bprint: { + case print: { // TODO printing numbers needs different lengths of spacing prl(getTopTwo()); pr(createComment("print spacing",C_SPEC));