Rename cλash dir to clash so it behaves well within the ghc build tree
[matthijs/master-project/cλash.git] / cλash / CLasH / Translator / TranslatorTypes.hs
diff --git a/cλash/CLasH/Translator/TranslatorTypes.hs b/cλash/CLasH/Translator/TranslatorTypes.hs
deleted file mode 100644 (file)
index eabb004..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
---
--- Simple module providing some types used by Translator. These are in a
--- separate module to prevent circular dependencies in Pretty for example.
---
-module CLasH.Translator.TranslatorTypes where
-
--- Standard modules
-import qualified Control.Monad.Trans.State as State
-import qualified Data.Map as Map
-import qualified Data.Accessor.Template
-import qualified Data.Accessor.Monad.Trans.State as MonadState
-
--- GHC API
-import qualified GHC
-import qualified CoreSyn
-import qualified Type
-import qualified HscTypes
-import qualified UniqSupply
-
--- VHDL Imports
-import qualified Language.VHDL.AST as AST
-
--- Local imports
-import CLasH.VHDL.VHDLTypes
-
--- | A specification of an entity we can generate VHDL for. Consists of the
---   binder of the top level entity, an optional initial state and an optional
---   test input.
-type EntitySpec = (Maybe CoreSyn.CoreBndr, Maybe [(CoreSyn.CoreBndr, CoreSyn.CoreBndr)], Maybe CoreSyn.CoreExpr)
-
--- | A function that knows which parts of a module to compile
-type Finder =
-  HscTypes.CoreModule -- ^ The module to look at
-  -> GHC.Ghc [EntitySpec]
-
------------------------------------------------------------------------------
--- The TranslatorSession
------------------------------------------------------------------------------
-
--- A orderable equivalent of CoreSyn's Type for use as a map key
-newtype OrdType = OrdType Type.Type
-instance Eq OrdType where
-  (OrdType a) == (OrdType b) = Type.tcEqType a b
-instance Ord OrdType where
-  compare (OrdType a) (OrdType b) = Type.tcCmpType a b
-
-data HType = AggrType String [HType] |
-             EnumType String [String] |
-             VecType Int HType |
-             UVecType HType |
-             SizedWType Int |
-             RangedWType Int |
-             SizedIType Int |
-             BuiltinType String |
-             StateType
-  deriving (Eq, Ord, Show)
-
--- A map of a Core type to the corresponding type name, or Nothing when the
--- type would be empty.
-type TypeMapRec   = Maybe (AST.VHDLId, Maybe (Either AST.TypeDef AST.SubtypeIn))
-type TypeMap      = Map.Map HType TypeMapRec
-
--- A map of a vector Core element type and function name to the coressponding
--- VHDLId of the function and the function body.
-type TypeFunMap = Map.Map (HType, String) (AST.VHDLId, AST.SubProgBody)
-
-type TfpIntMap = Map.Map OrdType Int
--- A substate that deals with type generation
-data TypeState = TypeState {
-  -- | A map of Core type -> VHDL Type
-  tsTypes_      :: TypeMap,
-  -- | A list of type declarations
-  tsTypeDecls_  :: [Maybe AST.PackageDecItem],
-  -- | A map of vector Core type -> VHDL type function
-  tsTypeFuns_   :: TypeFunMap,
-  tsTfpInts_    :: TfpIntMap,
-  tsHscEnv_     :: HscTypes.HscEnv
-}
-
--- Derive accessors
-Data.Accessor.Template.deriveAccessors ''TypeState
-
--- Define a session
-type TypeSession = State.State TypeState
--- A global state for the translator
-data TranslatorState = TranslatorState {
-    tsUniqSupply_ :: UniqSupply.UniqSupply
-  , tsType_ :: TypeState
-  , tsBindings_ :: Map.Map CoreSyn.CoreBndr CoreSyn.CoreExpr
-  , tsNormalized_ :: Map.Map CoreSyn.CoreBndr CoreSyn.CoreExpr
-  , tsEntityCounter_ :: Integer
-  , tsEntities_ :: Map.Map CoreSyn.CoreBndr Entity
-  , tsArchitectures_ :: Map.Map CoreSyn.CoreBndr (Architecture, [CoreSyn.CoreBndr])
-  , tsInitStates_ :: Map.Map CoreSyn.CoreBndr CoreSyn.CoreBndr
-  , tsTransformCounter_ :: Int -- ^ How many transformations were applied?
-}
-
--- Derive accessors
-Data.Accessor.Template.deriveAccessors ''TranslatorState
-
-type TranslatorSession = State.State TranslatorState
-
------------------------------------------------------------------------------
--- Some accessors
------------------------------------------------------------------------------
-
--- Does the given binder reference a top level binder in the current
--- module(s)?
-isTopLevelBinder :: CoreSyn.CoreBndr -> TranslatorSession Bool
-isTopLevelBinder bndr = do
-  bindings <- MonadState.get tsBindings
-  return $ Map.member bndr bindings
-
--- Finds the value of a global binding, if available
-getGlobalBind :: CoreSyn.CoreBndr -> TranslatorSession (Maybe CoreSyn.CoreExpr)
-getGlobalBind bndr = do
-  bindings <- MonadState.get tsBindings
-  return $ Map.lookup bndr bindings 
-
--- Adds a new global binding with the given value
-addGlobalBind :: CoreSyn.CoreBndr -> CoreSyn.CoreExpr -> TranslatorSession ()
-addGlobalBind bndr expr = MonadState.modify tsBindings (Map.insert bndr expr)
-
--- Returns a list of all global binders
-getGlobalBinders :: TranslatorSession [CoreSyn.CoreBndr]
-getGlobalBinders = do
-  bindings <- MonadState.get tsBindings
-  return $ Map.keys bindings
-
--- vim: set ts=8 sw=2 sts=2 expandtab: