definition module mTaskInterpret
+import mTask
+
from Data.Functor.Identity import :: Identity
from Control.Monad.State import :: State, :: StateT
-import mTask
+from Control.Monad.RWST import :: RWST, :: RWS
+from Data.Either import :: Either
+from iTasks._Framework.Generic.Defaults import generic gDefault
+from GenPrint import generic gPrint
+from Generics.gCons import class gCons, generic conses, generic consName, generic consIndex, generic consNum
+
+:: MTaskMSGRecv
+ = MTTaskAck Int Int
+ | MTTaskDelAck Int
+ | MTSDSAck Int
+ | MTSDSDelAck Int
+ | MTPub Int BCValue
+ | MTMessage String
+ | MTDevSpec MTaskDeviceSpec
+ | MTEmpty
+
+:: MTaskMSGSend
+ = MTTask MTaskInterval Char String
+ | MTTaskDel Int
+ | MTSds Int BCValue
+ | MTUpd Int BCValue
+ | MTSpec
+
+:: MTaskInterval
+ = OneShot
+ | OnInterval Int
+ | OnInterrupt Int
+
+:: MTaskDeviceSpec =
+ {haveLed :: Bool
+ ,haveAio :: Bool
+ ,haveDio :: Bool
+ ,bytesMemory :: Int
+ }
+
+:: BCValue = E.e: BCValue e & mTaskType e
+
+instance toString MTaskInterval
+instance toString MTaskMSGRecv
+instance toString MTaskMSGSend
+encode :: MTaskMSGSend -> String
+decode :: String -> MTaskMSGRecv
:: BC
= BCNop
| BCLab Int
- | BCPush [Char]
+ | BCPush BCValue
+// | BCPush String
| BCPop
//SDS functions
| BCSdsStore Int
//Binary Bool ops
| BCAnd
| BCOr
+ //Binary ops
| BCEq
| BCNeq
| BCLes
| BCJmp Int
| BCJmpT Int
| BCJmpF Int
+ //UserLED
+ | BCLedOn
+ | BCLedOff
//Serial
| BCSerialAvail
| BCSerialPrint
| BCAnalogWrite Pin
| BCDigitalRead Pin
| BCDigitalWrite Pin
- | BCTest AnalogPin
+ //Return
+ | BCReturn
+
+derive gPrint BCValue, MTaskDeviceSpec
+derive consIndex BCValue
+derive consName BCValue
+derive conses BCValue
+derive consNum BCValue
+
+derive class gCons Long, UserLED, Button, AnalogPin, DigitalPin, PinMode, Pin
+derive class iTask UserLED, Long, Pin, Button, AnalogPin, DigitalPin, PinMode, MTaskDeviceSpec
+derive gEditor BCValue
+derive gText BCValue
+derive JSONEncode BCValue
+derive JSONDecode BCValue
+derive gDefault BCValue
+derive gEq BCValue
+
+:: ByteCode a p = BC (RWS () [BC] BCState ())
+
+:: BCShare = {
+ sdsi :: Int,
+ sdspub :: Bool,
+ sdsval :: BCValue
+ }
-:: ByteCode a p = BC (BCState -> ([BC], BCState))
-//:: ByteCode a p = BC [BC]
-//:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState))
:: BCState = {
freshl :: [Int],
- freshs :: [Int]
+ freshs :: [Int],
+ sdss :: [BCShare]
}
+instance zero BCState
+
+class toByteCode a :: a -> String
+class fromByteCode a :: String -> a
+class mTaskType a | toByteCode, fromByteCode, iTask, TC a
+
+instance toByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
+instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
+instance toByteCode MTaskInterval
+instance fromByteCode MTaskInterval, MTaskDeviceSpec
+
+instance arith ByteCode
+instance boolExpr ByteCode
+instance analogIO ByteCode
+instance digitalIO ByteCode
+instance userLed ByteCode
+instance If ByteCode Stmt Stmt Stmt
+instance If ByteCode e Stmt Stmt
+instance If ByteCode Stmt e Stmt
+instance If ByteCode x y Stmt
+instance IF ByteCode
+instance noOp ByteCode
+instance retrn ByteCode
+
+instance sds ByteCode
+instance assign ByteCode
+instance seq ByteCode
+instance serial ByteCode
-class toByteCode a :: a -> [Char]
-instance toByteCode Int
-instance toByteCode Bool
-instance toByteCode Char
-instance toByteCode String
-instance toByteCode Long
-instance toByteCode Button
+toMessages :: MTaskInterval (Main (ByteCode a b)) BCState -> ([MTaskMSGSend], BCState)
-toByteVal :: BC -> [Char]
+toByteVal :: BC -> String
+toReadableByteCode :: (ByteCode a b) BCState -> (String, BCState)
+toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)