X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=c%CE%BBash%2FCLasH%2FUtils%2FGhcTools.hs;h=022a997eca180bf5040ca7eb349efbf6a0f9fcc4;hb=0573ff02a62a58dc83d6d96263388e8f99b9722f;hp=d898795c9dbb6107e848f4856cba3015a4ca5d0b;hpb=829e3b461156a39d30f6796b26a8c83a119bed43;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git "a/c\316\273ash/CLasH/Utils/GhcTools.hs" "b/c\316\273ash/CLasH/Utils/GhcTools.hs" index d898795..022a997 100644 --- "a/c\316\273ash/CLasH/Utils/GhcTools.hs" +++ "b/c\316\273ash/CLasH/Utils/GhcTools.hs" @@ -19,6 +19,8 @@ import qualified Name import qualified Serialized import qualified Var import qualified Outputable +import Outputable(($+$), (<+>), nest, empty, text, vcat) +import qualified Class -- Local Imports import CLasH.Utils.Pretty @@ -26,25 +28,43 @@ import CLasH.Translator.TranslatorTypes import CLasH.Translator.Annotations import CLasH.Utils -listBindings :: FilePath -> [FilePath] -> IO [()] +-- How far to indent the values after a Foo: header +align = 20 +-- How far to indent all lines after the first +indent = 5 + +listBindings :: FilePath -> [FilePath] -> IO () listBindings libdir filenames = do (cores,_,_) <- loadModules libdir filenames Nothing let binds = concatMap (CoreSyn.flattenBinds . HscTypes.cm_binds) cores mapM listBinding binds + putStr "\n=========================\n" + let classes = concatMap (HscTypes.typeEnvClasses . HscTypes.cm_types) cores + mapM listClass classes + return () + +-- Slightly different version of hang, that always uses vcat instead of +-- sep, so the first line of d2 preserves its nesting. +hang' d1 n d2 = vcat [d1, nest n d2] listBinding :: (CoreSyn.CoreBndr, CoreSyn.CoreExpr) -> IO () -listBinding (b, e) = do - putStr "\nBinder: " - putStr $ show b ++ "[" ++ show (Var.varUnique b) ++ "]" - putStr "\nType of Binder: \n" - putStr $ Outputable.showSDoc $ Outputable.ppr $ Var.varType b - putStr "\n\nExpression: \n" - putStr $ prettyShow e - putStr "\n\n" - putStr $ Outputable.showSDoc $ Outputable.ppr e - putStr "\n\nType of Expression: \n" - putStr $ Outputable.showSDoc $ Outputable.ppr $ CoreUtils.exprType e - putStr "\n\n" +listBinding (b, e) = putStr $ Outputable.showSDoc $ + (text "Binder:") <+> (text $ show b ++ "[" ++ show (Var.varUnique b) ++ "]") + $+$ nest indent ( + hang' (text "Type of Binder:") align (Outputable.ppr $ Var.varType b) + $+$ hang' (text "Expression:") align (text $ prettyShow e) + $+$ nest align (Outputable.ppr e) + $+$ hang' (text "Type of Expression:") align (Outputable.ppr $ CoreUtils.exprType e) + ) + $+$ (text "\n") -- Add an empty line + +listClass :: Class.Class -> IO () +listClass c = putStr $ Outputable.showSDoc $ + (text "Class:") <+> (text $ show (Class.className c)) + $+$ nest indent ( + hang' (text "Selectors:") align (text $ show (Class.classSelIds c)) + ) + $+$ (text "\n") -- Add an empty line -- | Show the core structure of the given binds in the given file. listBind :: FilePath -> [FilePath] -> String -> IO ()