X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=mTaskInterpret.dcl;h=5a801898de303051e7fcc0d0eb28f546e8b7ec43;hb=aa90c851099c0f6e5993b8cf83ef6605b3835346;hp=557225f55d5d48579debbd260ab62ccd97de8725;hpb=34dfa724f02cd36ff31057ab71ba53ad57fabcb5;p=mTask.git diff --git a/mTaskInterpret.dcl b/mTaskInterpret.dcl index 557225f..5a80189 100644 --- a/mTaskInterpret.dcl +++ b/mTaskInterpret.dcl @@ -1,10 +1,12 @@ definition module mTaskInterpret +from Data.Functor.Identity import :: Identity +from Control.Monad.State import :: State, :: StateT import mTask :: BC = BCNop - | BCPush Int + | BCPush String | BCPop //Unary ops | BCNeg @@ -14,8 +16,23 @@ import mTask | BCSub | BCMul | BCDiv + //Binary Bool ops + | BCAnd + | BCOr + | BCEq + | BCNeq + | BCLes + | BCGre + | BCLeq + | BCGeq + //Conditionals and jumping + | BCJmp Int + | BCJmpT Int + | BCJmpF Int -:: ByteCode a p = BC ((ReadWrite a) BCState -> ([BC], BCState)) +//:: ByteCode a p = BC (BCState -> ([BC], BCState)) +:: ByteCode a p = BC [BC] +//:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState)) :: BCState = { a::() }