X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=Pretty.hs;h=ba0e3d01113c05167ca2387fd69dad2ef4b6fdc9;hb=e273d2759db01787f0599a1cbe9059864e1704d7;hp=ff84a56cc61c5f39bbedec587584f0f0755026da;hpb=2f1cf3a17e4d206c01031b3117779e99d21a4dce;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/Pretty.hs b/Pretty.hs index ff84a56..ba0e3d0 100644 --- a/Pretty.hs +++ b/Pretty.hs @@ -1,10 +1,24 @@ module Pretty (prettyShow) where +import qualified Data.Map as Map import qualified CoreSyn +import qualified Module +import qualified HscTypes import Text.PrettyPrint.HughesPJClass import Outputable ( showSDoc, ppr, Outputable, OutputableBndr) -import Flatten + +import qualified ForSyDe.Backend.Ppr +import qualified ForSyDe.Backend.VHDL.AST as AST + +import HsValueMap +import FlattenTypes import TranslatorTypes +import VHDLTypes + +-- | A version of the default pPrintList method, which uses a custom function +-- f instead of pPrint to print elements. +printList :: (a -> Doc) -> [a] -> Doc +printList f = brackets . fsep . punctuate comma . map f instance Pretty HsFunction where pPrint (HsFunction name args res) = @@ -23,32 +37,69 @@ instance Pretty HsValueUse where pPrint (HighOrder _ _) = text "Higher Order" instance Pretty FlatFunction where - pPrint (FlatFunction args res apps conds) = + pPrint (FlatFunction args res apps conds sigs) = (text "Args: ") $$ nest 10 (pPrint args) $+$ (text "Result: ") $$ nest 10 (pPrint res) $+$ (text "Apps: ") $$ nest 10 (vcat (map pPrint apps)) $+$ (text "Conds: ") $$ nest 10 (pPrint conds) + $+$ text "Signals: " $$ nest 10 (printList ppsig sigs) + where + ppsig (id, info) = pPrint id <> pPrint info instance Pretty FApp where pPrint (FApp func args res) = pPrint func <> text " : " <> pPrint args <> text " -> " <> pPrint res -instance Pretty SignalDef where - pPrint (SignalDef id) = pPrint id - -instance Pretty SignalUse where - pPrint (SignalUse id) = pPrint id - instance Pretty CondDef where pPrint _ = text "TODO" +instance Pretty SignalInfo where + pPrint (SignalInfo name use ty) = + text ":" <> (pPrint use) <> (ppname name) + where + ppname Nothing = empty + ppname (Just name) = text ":" <> text name + +instance Pretty SigUse where + pPrint SigPortIn = text "PI" + pPrint SigPortOut = text "PO" + pPrint SigInternal = text "I" + pPrint (SigStateOld n) = text "SO:" <> int n + pPrint (SigStateNew n) = text "SN:" <> int n + pPrint SigSubState = text "s" + instance Pretty VHDLSession where - pPrint (VHDLSession nameCount funcs) = - text "NameCount: " $$ nest 15 (int nameCount) - $+$ text "Functions: " $$ nest 15 (vcat (map ppfunc funcs)) + pPrint (VHDLSession mod nameCount funcs) = + text "Module: " $$ nest 15 (text modname) + $+$ text "NameCount: " $$ nest 15 (int nameCount) + $+$ text "Functions: " $$ nest 15 (vcat (map ppfunc (Map.toList funcs))) + where + ppfunc (hsfunc, fdata) = + pPrint hsfunc $+$ nest 5 (pPrint fdata) + modname = showSDoc $ Module.pprModule (HscTypes.cm_module mod) + +instance Pretty FuncData where + pPrint (FuncData flatfunc entity arch) = + text "Flattened: " $$ nest 15 (ppffunc flatfunc) + $+$ text "Entity" $$ nest 15 (ppent entity) + $+$ pparch arch where - ppfunc (hsfunc, (flatfunc)) = - pPrint hsfunc $+$ (text "Flattened: " $$ nest 15 (pPrint flatfunc)) + ppffunc (Just f) = pPrint f + ppffunc Nothing = text "Nothing" + ppent (Just e) = pPrint e + ppent Nothing = text "Nothing" + pparch Nothing = text "VHDL architecture not present" + pparch (Just _) = text "VHDL architecture present" + +instance Pretty Entity where + pPrint (Entity id args res decl) = + text "Entity: " $$ nest 10 (pPrint id) + $+$ text "Args: " $$ nest 10 (pPrint args) + $+$ text "Result: " $$ nest 10 (pPrint res) + $+$ ppdecl decl + where + ppdecl Nothing = text "VHDL entity not present" + ppdecl (Just _) = text "VHDL entity present" instance (OutputableBndr b) => Pretty (CoreSyn.Bind b) where pPrint (CoreSyn.NonRec b expr) = @@ -56,6 +107,9 @@ instance (OutputableBndr b) => Pretty (CoreSyn.Bind b) where pPrint (CoreSyn.Rec binds) = text "Rec: " $$ nest 10 (vcat $ map (prettyBind) binds) +instance Pretty AST.VHDLId where + pPrint id = ForSyDe.Backend.Ppr.ppr id + prettyBind :: (Outputable b, Outputable e) => (b, e) -> Doc prettyBind (b, expr) = text b' <> text " = " <> text expr'