started with interpret and bytecode classes
[mTask.git] / mTaskInterpret.dcl
1 definition module mTaskInterpret
2
3 import mTask
4
5 :: BC
6 = BCNop
7 | BCPush Int
8 | BCPop
9 //Unary ops
10 | BCNeg
11 | BCNot
12 //Binary Int ops
13 | BCAdd
14 | BCSub
15 | BCMul
16 | BCDiv
17
18 :: ByteCode a p = BC ((ReadWrite a) BCState -> ([BC], BCState))
19 :: BCState = {
20 a::()
21 }
22
23 toByteVal :: BC -> String
24 toReadableByteVal :: BC -> String
25
26 //instance toCode Pin
27 //instance toCode MTask
28 //instance toCode ()
29 //instance toCode Long
30 //
31 //class toCode a :: a -> String
32 //instance toCode Bool
33 //instance toCode Int
34 //instance toCode Real
35 //instance toCode Char
36 //instance toCode String
37 //instance toCode DigitalPin
38 //instance toCode AnalogPin
39 //
40 //argType :: (((Code a p)->Code b q)->In ((Code a p)->Code b q) (Code c s)) -> a | type a
41 //
42 //class argTypes t :: ((t->Code b Expr)->In (t->Code b2 q) (Main (Code c s))) -> t
43 //instance argTypes (Code a p) | showType a
44 //instance argTypes (Code a p, Code b q) | showType a & showType b
45 //instance argTypes (Code a p, Code b q, Code c r) | showType a & showType b & showType c
46 //
47 //instance toCode (SV t)
48 //
49 //instance arith Code
50 //instance boolExpr Code
51 //instance If Code Stmt Stmt Stmt
52 //instance If Code e Stmt Stmt
53 //instance If Code Stmt e Stmt
54 //instance If Code x y Expr
55 //instance IF Code
56 //instance sds Code
57 //
58 //defCode :: ((Code t p) -> In t (Main (Code u q))) -> Main (Code u r) | type t
59 //
60 //var :: String (ReadWrite (Code v q)) CODE -> CODE
61 //
62 //instance assign Code
63 //instance seq Code
64 //instance step` Code
65 //codeSteps :: [Step Code t] -> Code u p
66 //optBreak :: Mode -> Code u p
67 //
68 //instance setDelay Code
69 //instance mtask Code a | taskImp2 a & types a
70 //instance mtasks Code a b | taskImp2 a & types a & taskImp2 b & types b
71 //
72 //loopCode :: Int (Code a b) -> Code c d
73 //
74 //class taskImp2 a :: Int a -> ((Code Long p) a->Code MTask Expr, a) | /*long Code delay &*/ isExpr p
75 //instance taskImp2 ()
76 //instance taskImp2 (Code t p)
77 //instance taskImp2 (Code a p, Code b q)
78 //instance taskImp2 (Code a p, Code b q, Code c r)
79 //instance taskImp2 (Code a p, Code b q, Code c r, Code d s)
80 //
81 //class taskImp a :: Int a -> (Int a->Code MTask Expr, a)
82 //instance taskImp ()
83 //instance taskImp (Code t p)
84 //instance taskImp (Code a p, Code b q)
85 //instance taskImp (Code a p, Code b q, Code c r)
86 //instance taskImp (Code a p, Code b q, Code c r, Code d s)
87 //
88 //tasksMain :: Int Int ((a->Code MTask Expr,b->Code MTask Expr) -> In (a->Code c d,b->Code e f) (Main (Code g h))) -> Main (Code i j) | taskImp a & types a & taskImp b & types b
89 //class types a :: a
90 //instance types ()
91 //instance types (Code a p) | typeSelector a & isExpr p
92 //instance types (Code a p, Code b q) | typeSelector a & isExpr p & typeSelector b & isExpr q
93 //instance types (Code a p, Code b q, Code c r) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r
94 //instance types (Code a p, Code b q, Code c r, Code d s) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r & typeSelector d & isExpr s
95 //
96 //codeMTaskBody :: (Code v w) (Code c d) -> Code e f
97 //instance fun Code ()
98 //instance fun Code (Code t p) | type, showType t & isExpr p
99 //instance fun Code (Code a p, Code b q) | showType a & showType b
100 //instance fun Code (Code a p, Code b q, Code c r) | showType a & showType b & showType c
101 //instance output Code
102 //instance pinMode Code
103 //instance digitalIO Code
104 //instance dIO Code
105 //instance aIO Code
106 //instance analogIO Code
107 //instance noOp Code
108 //
109 //:: Code a p = C ((ReadWrite (Code a Expr)) CODE -> CODE)
110 //:: CODE =
111 // { fresh :: Int
112 // , freshMTask :: Int
113 // , funs :: [String]
114 // , ifuns :: Int
115 // , vars :: [String]
116 // , ivars :: Int
117 // , setup :: [String]
118 // , isetup :: Int
119 // , loop :: [String]
120 // , iloop :: Int
121 // , includes :: [String]
122 // , def :: Def
123 // , mode :: Mode
124 // , binds :: [String]
125 // }
126 //
127 //unC :: (Code a p) -> ((ReadWrite (Code a Expr)) CODE -> CODE)
128 //
129 //:: Def = Var | Fun | Setup | Loop
130 //:: Mode = /*MainMode |*/ NoReturn | Return String | SubExp | Assign String
131 //
132 //setMode :: Mode -> Code a p
133 //getMode :: (Mode -> Code a p) -> Code a p
134 //embed :: (Code a p) -> Code a p
135 //(+.+) infixl 5 :: (Code a p) (Code b q) -> Code c r
136 //fresh :: (Int -> (Code a p)) -> (Code a p)
137 //freshMTask :: (Int -> (Code a p)) -> (Code a p)
138 //setCode :: Def -> (Code a p)
139 //getCode :: (Def -> Code a p) -> (Code a p)
140 //brac :: (Code a p) -> Code b q
141 //funBody :: (Code a p) -> Code b q
142 //codeOp2 :: (Code a p) String (Code b q) -> Code c r
143 //include :: String -> Code a b
144 //argList :: [a] -> String | toCode a
145 //c :: a -> Code b p | toCode a
146 //indent :: Code a p
147 //unindent :: Code a p
148 //nl :: Code a p
149 //setBinds :: [String] -> Code a p
150 //addBinds :: String -> Code a p
151 //getBinds :: ([String] -> Code a p) -> (Code a p)
152 //
153 //// ----- driver ----- //
154 //
155 //compile :: (Main (Code a p)) -> [String]
156 //mkset :: [a] -> [a] | Eq a
157 //newCode :: CODE