instance Pretty id => Pretty (Signal id) where
pPrint (Signal id) = pPrint id
+instance Pretty NamedSignal where
+ pPrint (NamedSignal name) = pPrint name
+
instance Pretty VHDLSession where
pPrint (VHDLSession mod nameCount funcs) =
text "Module: " $$ nest 15 (text modname)
$+$ text "Functions: " $$ nest 15 (vcat (map ppfunc (Map.toList funcs)))
where
ppfunc (hsfunc, (FuncData flatfunc)) =
- pPrint hsfunc $+$ (text "Flattened: " $$ nest 15 (pPrint flatfunc))
+ pPrint hsfunc $+$ (text "Flattened: " $$ nest 15 (ppffunc flatfunc))
+ ppffunc (Just (Left f)) = pPrint f
+ ppffunc (Just (Right f)) = pPrint f
+ ppffunc Nothing = text "Nothing"
modname = showSDoc $ Module.pprModule (HscTypes.cm_module mod)
instance (OutputableBndr b) => Pretty (CoreSyn.Bind b) where
-- Flatten the function
let flatfunc = flattenFunction hsfunc bind
addFunc hsfunc
- setFlatFunc hsfunc flatfunc
+ setFlatFunc hsfunc (Left flatfunc)
let used_hsfuncs = map appFunc (apps flatfunc)
State.mapM resolvFunc used_hsfuncs
return ()
-- function along the way.
type FuncMap = Map.Map HsFunction FuncData
+-- | A signal that has been assigned a (unique) name
+data NamedSignal = NamedSignal String
+
+-- | A function in which all signals have been assigned unique names
+type NamedFlatFunction = FlatFunction' NamedSignal
+
-- | Some stuff we collect about a function along the way.
data FuncData = FuncData {
- flatFunc :: Maybe FlatFunction
+ flatFunc :: Maybe (Either FlatFunction NamedFlatFunction)
}
data VHDLSession = VHDLSession {
return $ Map.lookup hsfunc fs
-- | Sets the FlatFunction for the given HsFunction in the given setting.
-setFlatFunc :: HsFunction -> FlatFunction -> VHDLState ()
+setFlatFunc :: HsFunction -> (Either FlatFunction NamedFlatFunction) -> VHDLState ()
setFlatFunc hsfunc flatfunc = do
fs <- State.gets funcs -- Get the funcs element from the session
let fs'= Map.adjust (\d -> d { flatFunc = Just flatfunc }) hsfunc fs