From: Matthijs Kooijman Date: Wed, 11 Feb 2009 19:22:07 +0000 (+0100) Subject: Allow a FlatFunction to be named as well as unnamed. X-Git-Url: https://git.stderr.nl/gitweb?a=commitdiff_plain;h=4fb701e41729143a897d43cd8a9c0217b8b3f68a;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git Allow a FlatFunction to be named as well as unnamed. --- diff --git a/Pretty.hs b/Pretty.hs index 74ffec7..3c6e9fc 100644 --- a/Pretty.hs +++ b/Pretty.hs @@ -45,6 +45,9 @@ instance Pretty id => Pretty (CondDef id) where 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) @@ -52,7 +55,10 @@ instance Pretty VHDLSession where $+$ 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 diff --git a/Translator.hs b/Translator.hs index d0738d3..3b08860 100644 --- a/Translator.hs +++ b/Translator.hs @@ -108,7 +108,7 @@ flattenBind hsfunc bind@(NonRec var expr) = do -- 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 () diff --git a/TranslatorTypes.hs b/TranslatorTypes.hs index 4ced7de..cad096b 100644 --- a/TranslatorTypes.hs +++ b/TranslatorTypes.hs @@ -15,9 +15,15 @@ import HsValueMap -- 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 { @@ -40,7 +46,7 @@ getFunc hsfunc = do 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