on fdb21df help sign in
elk/src/Optimize/Environment.hs
59 lines 1.2 kB history raw
1module Optimize.Environment
2 ( Optimizer, run
3 , Env
4 , getVariantDict
5 , getHome
6 , getTailCall, setTailCall
7 , freshName
8 ) where
10import qualified Control.Monad.State as State
12import qualified AST.Module.Name as ModuleName
13import qualified Optimize.DecisionTree as DT
16type Optimizer a =
17 State.State Env a
20run :: DT.VariantDict -> ModuleName.Canonical -> Optimizer a -> a
21run variantDict home optimizer =
22 State.evalState optimizer (Env False 0 variantDict home)
25data Env = Env
26 { _hasTailCall :: Bool
27 , _uid :: Int
28 , _variantDict :: DT.VariantDict
29 , _home :: ModuleName.Canonical
30 }
33getVariantDict :: Optimizer DT.VariantDict
34getVariantDict =
35 State.gets _variantDict
38getHome :: Optimizer ModuleName.Canonical
39getHome =
40 State.gets _home
43getTailCall :: Optimizer Bool
44getTailCall =
45 State.gets _hasTailCall
48setTailCall :: Bool -> Optimizer ()
49setTailCall bool =
50 do env <- State.get
51 State.put (env { _hasTailCall = bool })
54freshName :: Optimizer String
55freshName =
56 do (Env htc uid vd home) <- State.get
57 State.put (Env htc (uid + 1) vd home)
58 return ("_p" ++ show uid)