in setCode Var +.+ c (type2string v + " " + name + " = " + toCode v +
";\n") +.+ setCode Setup +.+ unMain body}
con f = defCode f
+ pub _ = undef
defCode :: ((Code t p) -> In t (Main (Code u q))) -> Main (Code u r) | type t
defCode f =
instance noOp Code where noOp = C \rw c.c
:: Code a p = C ((ReadWrite (Code a Expr)) CODE -> CODE)
-:: CODE =
- { fresh :: Int
- , freshMTask :: Int
- , funs :: [String]
- , ifuns :: Int
- , vars :: [String]
- , ivars :: Int
- , setup :: [String]
- , isetup :: Int
- , loop :: [String]
- , iloop :: Int
- , includes :: [String]
- , def :: Def
- , mode :: Mode
- , binds :: [String]
- }
-
unC :: (Code a p) -> ((ReadWrite (Code a Expr)) CODE -> CODE)
unC (C f) = f
:: Mode = /*MainMode |*/ NoReturn | Return String | SubExp | Assign String
setMode :: Mode -> Code a p
-setMode m = C \rw c.{c & mode = m}
+setMode m = C \rw c.{CODE|c & mode` = m}
getMode :: (Mode -> Code a p) -> Code a p
-getMode f = C \rw c.unC (f c.mode) rw c
+getMode f = C \rw c.unC (f c.mode`) rw c
embed :: (Code a p) -> Code a p
embed e =
(+.+) (C f) (C g) = C \rw c.g Rd (f Rd c)
fresh :: (Int -> (Code a p)) -> (Code a p)
-fresh f = C \rw c.unC (f c.fresh) rw {c & fresh = c.fresh + 1}
+fresh f = C \rw c.unC (f c.fresh) rw {CODE | c & fresh = c.fresh + 1}
freshMTask :: (Int -> (Code a p)) -> (Code a p)
-freshMTask f = C \rw c.unC (f c.freshMTask) rw {c & freshMTask = c.freshMTask + 1}
+freshMTask f = C \rw c.unC (f c.freshMTask) rw {CODE | c & freshMTask = c.freshMTask + 1}
setCode :: Def -> (Code a p)
setCode d = C \rw c.{c & def = d}
, iloop = 4
, includes = []
, def = Setup
- , mode = NoReturn
+ , mode` = NoReturn
, binds = []
}