rw scStep to use instantiateU
by **extremely** rough estimate, this performs 40% less allocations and 4% more reductions
This commit is contained in:
16
src/TIM.hs
16
src/TIM.hs
@@ -196,12 +196,13 @@ step st =
|
|||||||
TiState (f:ap:s) d h g sts
|
TiState (f:ap:s) d h g sts
|
||||||
|
|
||||||
scStep :: Name -> [Name] -> Expr -> TiState -> TiState
|
scStep :: Name -> [Name] -> Expr -> TiState -> TiState
|
||||||
scStep n as b (TiState s d h g sts) =
|
scStep n as e (TiState s d h g sts) =
|
||||||
TiState s' d h'' g sts
|
TiState s' d h' g sts
|
||||||
where
|
where
|
||||||
h'' = update h' (s !! length as) (NInd resAddr)
|
s' = rootAddr : drop (length as + 1) s
|
||||||
s' = resAddr : drop (length as + 1) s
|
rootAddr = (s !! length as)
|
||||||
(h', resAddr) = instantiate b h env
|
h' = instantiateU e rootAddr h env
|
||||||
|
|
||||||
env = argBinds ++ g
|
env = argBinds ++ g
|
||||||
argBinds = as `zip` argAddrs
|
argBinds = as `zip` argAddrs
|
||||||
argAddrs = getArgs h s
|
argAddrs = getArgs h s
|
||||||
@@ -322,6 +323,11 @@ letrecExample = Program
|
|||||||
, ScDef "main" [] $ "f" :$ Prim (IntP 3) :$ Prim (IntP 4)
|
, ScDef "main" [] $ "f" :$ Prim (IntP 3) :$ Prim (IntP 4)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
idExample :: Program
|
||||||
|
idExample = Program
|
||||||
|
[ ScDef "main" [] $ "id" :$ Prim (IntP 3)
|
||||||
|
]
|
||||||
|
|
||||||
indExample1 :: Program
|
indExample1 :: Program
|
||||||
indExample1 = Program
|
indExample1 = Program
|
||||||
[ ScDef "main" [] $ "twice" :$ "twice" :$ "id" :$ Prim (IntP 3)
|
[ ScDef "main" [] $ "twice" :$ "twice" :$ "id" :$ Prim (IntP 3)
|
||||||
|
|||||||
Reference in New Issue
Block a user