X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;h=4b231aab04e6d3fdb2c0d84d63aff4713b0f9f5a;hp=3a9727031b389fd4833b5ee2f8026e5be3a9f0ea;hb=a2bd7f29ece868c30e34f85e4e474ad947794642;hpb=a2b31532a5ab77cf13fc50ddc28c303949ad1207 diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index 3a97270..4b231aa 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -463,8 +463,30 @@ public class mjc2wsl{ prl("tempArray[tempa+1]:=tempres ENDVAR;"); break; } - //TODO arraylength - //TODO dup, dup2 + case arraylength :{ + prl(getTop()); + //TODO make an array length function of some sort! + prl(createComment("array length not known - LENGTH not aplicable to arrays",C_ERR)); + message("array length not known - LENGTH not aplicable to arrays",M_ERR); + prl(createComment("put 1 on the stack for consistency",C_SPEC)); + prl(cmdToEStack(1)); + break; + } + + case dup : { + prl(getTop()); + prl(cmdToEStack("tempa")); + prl(cmdToEStack("tempa")); + break; + } + case dup2 : { + prl(getTopTwo()); + prl(cmdToEStack("tempb")); + prl(cmdToEStack("tempa")); + prl(cmdToEStack("tempb")); + prl(cmdToEStack("tempa")); + break; + } case pop : { prl(cmdPopEStack()); @@ -496,9 +518,9 @@ public class mjc2wsl{ } case return_: { - prl("IF EMPTY?(mjvm_mstack) THEN CALL Z FI"); - //else we let things return - prl("END b"+counter+" =="); + //we let the actions return + // there is nothing to clean up + prl("SKIP END b"+counter+" =="); break; } case enter: {