1286a41bd55d6846c23074362b8633ecd0cba53c
[matthijs/master-project/cλash.git] / TranslatorTypes.hs
1 --
2 -- Simple module providing some types used by Translator. These are in a
3 -- separate module to prevent circular dependencies in Pretty for example.
4 --
5 {-# LANGUAGE TemplateHaskell #-}
6 module TranslatorTypes where
7
8 import qualified Control.Monad.Trans.State as State
9 import qualified Data.Map as Map
10 import qualified Data.Accessor.Template
11 import Data.Accessor
12
13 import qualified HscTypes
14
15 import qualified Language.VHDL.AST as AST
16
17 import FlattenTypes
18 import VHDLTypes
19 import HsValueMap
20
21
22 -- | A map from a HsFunction identifier to various stuff we collect about a
23 --   function along the way.
24 type FlatFuncMap  = Map.Map HsFunction FlatFunction
25
26 data TranslatorSession = TranslatorSession {
27   tsCoreModule_ :: HscTypes.CoreModule, -- ^ The current module
28   tsNameCount_ :: Int, -- ^ A counter that can be used to generate unique names
29   tsFlatFuncs_ :: FlatFuncMap -- ^ A map from HsFunction to FlatFunction
30 }
31
32 -- Derive accessors
33 $( Data.Accessor.Template.deriveAccessors ''TranslatorSession )
34
35 type TranslatorState = State.State TranslatorSession
36
37 -- vim: set ts=8 sw=2 sts=2 expandtab: