X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FHscStats.lhs;h=d90262633c86732e1b81b8d4f2c8c1b272f1fa73;hp=188b4f338d84d231057a22cfd6999bba88a9d1d0;hb=ce2ea8274f72199ac32d5219fcadb0aaeb968707;hpb=03d8585e0940e28e024548654fe3505685aca94f diff --git a/compiler/main/HscStats.lhs b/compiler/main/HscStats.lhs index 188b4f3..d902626 100644 --- a/compiler/main/HscStats.lhs +++ b/compiler/main/HscStats.lhs @@ -4,23 +4,18 @@ \section[GHC_Stats]{Statistics for per-module compilations} \begin{code} -{-# OPTIONS -w #-} --- The above warning supression flag is a temporary kludge. --- While working on this module you are encouraged to remove it and fix --- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings --- for details - module HscStats ( ppSourceStats ) where #include "HsVersions.h" import HsSyn import Outputable -import SrcLoc ( unLoc, Located(..) ) -import Char ( isSpace ) -import Bag ( bagToList ) -import Util ( count ) +import SrcLoc +import Bag +import Util +import RdrName + +import Data.Char \end{code} %************************************************************************ @@ -30,7 +25,8 @@ import Util ( count ) %************************************************************************ \begin{code} -ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) +ppSourceStats :: Bool -> Located (HsModule RdrName) -> SDoc +ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _)) = (if short then hcat else vcat) (map pp_val [("ExportAll ", export_all), -- 1 if no export list @@ -59,6 +55,7 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) ("InstType ", inst_type_ds), ("InstData ", inst_data_ds), ("TypeSigs ", bind_tys), + ("GenericSigs ", generic_sigs), ("ValBinds ", val_bind_ds), ("FunBinds ", fn_bind_ds), ("InlineMeths ", method_inlines), @@ -71,14 +68,14 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) where decls = map unLoc ldecls - pp_val (str, 0) = empty + pp_val (_, 0) = empty pp_val (str, n) | not short = hcat [text str, int n] | otherwise = hcat [text (trim str), equals, int n, semi] trim ls = takeWhile (not.isSpace) (dropWhile isSpace ls) - (fixity_sigs, bind_tys, bind_specs, bind_inlines) + (fixity_sigs, bind_tys, bind_specs, bind_inlines, generic_sigs) = count_sigs [d | SigD d <- decls] -- NB: this omits fixity decls on local bindings and -- in class decls. ToDo @@ -97,7 +94,7 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) export_ms = count (\ e -> case unLoc e of { IEModuleContents{} -> True;_ -> False}) real_exports export_ds = n_exports - export_ms - export_all = case exports of { Nothing -> 1; other -> 0 } + export_all = case exports of { Nothing -> 1; _ -> 0 } (val_bind_ds, fn_bind_ds) = foldr add2 (0,0) (map count_bind val_decls) @@ -111,19 +108,21 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) (inst_method_ds, method_specs, method_inlines, inst_type_ds, inst_data_ds) = foldr add5 (0,0,0,0,0) (map inst_info inst_decls) - count_bind (PatBind { pat_lhs = L _ (VarPat n) }) = (1,0) + count_bind (PatBind { pat_lhs = L _ (VarPat _) }) = (1,0) count_bind (PatBind {}) = (0,1) count_bind (FunBind {}) = (0,1) + count_bind b = pprPanic "count_bind: Unhandled binder" (ppr b) - count_sigs sigs = foldr add4 (0,0,0,0) (map sig_info sigs) + count_sigs sigs = foldr add5 (0,0,0,0,0) (map sig_info sigs) - sig_info (FixSig _) = (1,0,0,0) - sig_info (TypeSig _ _) = (0,1,0,0) - sig_info (SpecSig _ _ _) = (0,0,1,0) - sig_info (InlineSig _ _) = (0,0,0,1) - sig_info _ = (0,0,0,0) + sig_info (FixSig _) = (1,0,0,0,0) + sig_info (TypeSig _ _) = (0,1,0,0,0) + sig_info (SpecSig _ _ _) = (0,0,1,0,0) + sig_info (InlineSig _ _) = (0,0,0,1,0) + sig_info (GenericSig _ _) = (0,0,0,0,1) + sig_info _ = (0,0,0,0,0) - import_info (L _ (ImportDecl _ _ qual as spec)) + import_info (L _ (ImportDecl _ _ _ qual as spec)) = add6 (1, qual_info qual, as_info as, 0,0,0) (spec_info spec) qual_info False = 0 qual_info True = 1 @@ -136,17 +135,17 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) data_info (TyData {tcdCons = cs, tcdDerivs = derivs}) = (length cs, case derivs of Nothing -> 0 Just ds -> length ds) - data_info other = (0,0) + data_info _ = (0,0) class_info decl@(ClassDecl {}) = case count_sigs (map unLoc (tcdSigs decl)) of - (_,classops,_,_) -> + (_,classops,_,_,_) -> (classops, addpr (foldr add2 (0,0) (map (count_bind.unLoc) (bagToList (tcdMeths decl))))) - class_info other = (0,0) + class_info _ = (0,0) inst_info (InstDecl _ inst_meths inst_sigs ats) = case count_sigs (map unLoc inst_sigs) of - (_,_,ss,is) -> + (_,_,ss,is,_) -> case foldr add2 (0, 0) (map (countATDecl . unLoc) ats) of (tyDecl, dtDecl) -> (addpr (foldr add2 (0,0) @@ -155,18 +154,16 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _)) where countATDecl (TyData {}) = (0, 1) countATDecl (TySynonym {}) = (1, 0) + countATDecl d = pprPanic "countATDecl: Unhandled decl" + (ppr d) addpr :: (Int,Int) -> Int add2 :: (Int,Int) -> (Int,Int) -> (Int, Int) - add3 :: (Int,Int,Int) -> (Int,Int,Int) -> (Int, Int, Int) - add4 :: (Int,Int,Int,Int) -> (Int,Int,Int,Int) -> (Int, Int, Int, Int) add5 :: (Int,Int,Int,Int,Int) -> (Int,Int,Int,Int,Int) -> (Int, Int, Int, Int, Int) add6 :: (Int,Int,Int,Int,Int,Int) -> (Int,Int,Int,Int,Int,Int) -> (Int, Int, Int, Int, Int, Int) addpr (x,y) = x+y add2 (x1,x2) (y1,y2) = (x1+y1,x2+y2) - add3 (x1,x2,x3) (y1,y2,y3) = (x1+y1,x2+y2,x3+y3) - add4 (x1,x2,x3,x4) (y1,y2,y3,y4) = (x1+y1,x2+y2,x3+y3,x4+y4) add5 (x1,x2,x3,x4,x5) (y1,y2,y3,y4,y5) = (x1+y1,x2+y2,x3+y3,x4+y4,x5+y5) add6 (x1,x2,x3,x4,x5,x6) (y1,y2,y3,y4,y5,y6) = (x1+y1,x2+y2,x3+y3,x4+y4,x5+y5,x6+y6) \end{code}