X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=c%CE%BBash%2FCLasH%2FTranslator%2FTranslatorTypes.hs;h=257c543e2f9f799980f8035ab89bb7ac4b009050;hb=08b9e0c5831fc9ea188395b6e272359bf439568f;hp=5fb97c2b31831c4c1f5380d51f5250ceacd57517;hpb=fcadaad2e47e5f6cba4b9f7d4341477b8fe74158;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git "a/c\316\273ash/CLasH/Translator/TranslatorTypes.hs" "b/c\316\273ash/CLasH/Translator/TranslatorTypes.hs" index 5fb97c2..257c543 100644 --- "a/c\316\273ash/CLasH/Translator/TranslatorTypes.hs" +++ "b/c\316\273ash/CLasH/Translator/TranslatorTypes.hs" @@ -12,6 +12,7 @@ import qualified Data.Accessor.Template import Data.Accessor -- GHC API +import qualified GHC import qualified CoreSyn import qualified Type import qualified HscTypes @@ -23,6 +24,20 @@ 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 = (CoreSyn.CoreBndr, Maybe CoreSyn.CoreExpr, 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 { getType :: Type.Type } instance Eq OrdType where @@ -62,13 +77,6 @@ data TypeState = TypeState { -- Derive accessors $( Data.Accessor.Template.deriveAccessors ''TypeState ) --- Compatibility with old VHDLSession -vsTypes = tsTypes -vsTypeDecls = tsTypeDecls -vsTypeFuns = tsTypeFuns -vsTfpInts = tsTfpInts -vsHscEnv = tsHscEnv - -- Define a session type TypeSession = State.State TypeState -- A global state for the translator @@ -86,12 +94,9 @@ $( Data.Accessor.Template.deriveAccessors ''TranslatorState ) type TranslatorSession = State.State TranslatorState --- Compatibility for the old VHDLSesssion -vsType = tsType -type VHDLSession = TranslatorSession - --- Compatibility for the old TransformSession -type TransformSession = TranslatorSession +----------------------------------------------------------------------------- +-- Some accessors +----------------------------------------------------------------------------- -- Does the given binder reference a top level binder in the current -- module(s)? @@ -100,4 +105,20 @@ isTopLevelBinder bndr = do bindings <- getA 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 <- getA tsBindings + return $ Map.lookup bndr bindings + +-- Adds a new global binding with the given value +addGlobalBind :: CoreSyn.CoreBndr -> CoreSyn.CoreExpr -> TranslatorSession () +addGlobalBind bndr expr = modA tsBindings (Map.insert bndr expr) + +-- Returns a list of all global binders +getGlobalBinders :: TranslatorSession [CoreSyn.CoreBndr] +getGlobalBinders = do + bindings <- getA tsBindings + return $ Map.keys bindings + -- vim: set ts=8 sw=2 sts=2 expandtab: