data SignalInfo = SignalInfo {
sigName :: Maybe String,
sigUse :: SigUse,
- sigTy :: Type.Type
+ sigTy :: Type.Type,
+ nameHints :: [String]
}
-- | A flattened function
genSignalId use ty = do
(defs, sigs, n) <- State.get
-- Generate a new numbered but unnamed signal
- let s = (n, SignalInfo Nothing use ty)
+ let s = (n, SignalInfo Nothing use ty [])
State.put (defs, s:sigs, n+1)
return n
+-- | Add a name hint to the given signal
+addNameHint :: SignalId -> String -> FlattenState ()
+addNameHint id hint = do
+ info <- getSignalInfo id
+ let hints = nameHints info
+ let hints' = (hint:hints)
+ setSignalInfo id (info {nameHints = hints'})
+
-- | Returns the SignalInfo for the given signal. Errors if the signal is not
-- known in the session.
getSignalInfo :: SignalId -> FlattenState SignalInfo
parens $ pPrint a <> text " = " <> pPrint b
instance Pretty SignalInfo where
- pPrint (SignalInfo name use ty) =
+ pPrint (SignalInfo name use ty hints) =
text ":" <> (pPrint use) <> (ppname name)
where
ppname Nothing = empty
-- Name the signals in all other functions
Just flatfunc ->
let s = flat_sigs flatfunc in
- let s' = map (\(id, (SignalInfo Nothing use ty)) -> (id, SignalInfo (Just $ "sig_" ++ (show id)) use ty)) s in
+ let s' = map (\(id, (SignalInfo Nothing use ty hints)) -> (id, SignalInfo (Just $ "sig_" ++ (show id)) use ty hints)) s in
let flatfunc' = flatfunc { flat_sigs = s' } in
setFlatFunc hsfunc flatfunc'