on 3b08065 help sign in
elk/src/Optimize/Environment.hs
63 lines 1.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Optimize.Environment
4 ( Optimizer, run
5 , Env
6 , getVariantDict
7 , getHome
8 , getTailCall, setTailCall
9 , freshName
10 ) where
12import qualified Control.Monad.State as State
13import qualified Data.Text as Text
14import Data.Text (Text)
16import qualified AST.Module.Name as ModuleName
17import qualified Optimize.DecisionTree as DT
20type Optimizer a =
21 State.State Env a
24run :: DT.VariantDict -> ModuleName.Canonical -> Optimizer a -> a
25run variantDict home optimizer =
26 State.evalState optimizer (Env False 0 variantDict home)
29data Env = Env
30 { _hasTailCall :: Bool
31 , _uid :: Int
32 , _variantDict :: DT.VariantDict
33 , _home :: ModuleName.Canonical
34 }
37getVariantDict :: Optimizer DT.VariantDict
38getVariantDict =
39 State.gets _variantDict
42getHome :: Optimizer ModuleName.Canonical
43getHome =
44 State.gets _home
47getTailCall :: Optimizer Bool
48getTailCall =
49 State.gets _hasTailCall
52setTailCall :: Bool -> Optimizer ()
53setTailCall bool =
54 do env <- State.get
55 State.put (env { _hasTailCall = bool })
58freshName :: Optimizer Text
59freshName =
60 do (Env htc uid vd home) <- State.get
61 State.put (Env htc (uid + 1) vd home)
62 return (Text.append "_p" (Text.pack (show uid)))