X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FHscStats.lhs;h=21d47eb32c2d4d83696711fe57f8e528b5a0c0c7;hp=a750ad84ccaa1d79cd8cfbfbb4a7d4e05a41a738;hb=17b297d97d327620ed6bfab942f8992b2446f1bf;hpb=72264dbcb05c7045dff28aa88b55634fa6c1ddf0 diff --git a/compiler/main/HscStats.lhs b/compiler/main/HscStats.lhs index a750ad8..21d47eb 100644 --- a/compiler/main/HscStats.lhs +++ b/compiler/main/HscStats.lhs @@ -4,6 +4,13 @@ \section[GHC_Stats]{Statistics for per-module compilations} \begin{code} +{-# OPTIONS_GHC -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/WorkingConventions#Warnings +-- for details + module HscStats ( ppSourceStats ) where #include "HsVersions.h" @@ -23,7 +30,7 @@ import Util ( count ) %************************************************************************ \begin{code} -ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) +ppSourceStats short (L _ (HsModule _ exports imports ldecls _ _ _ _)) = (if short then hcat else vcat) (map pp_val [("ExportAll ", export_all), -- 1 if no export list @@ -38,10 +45,10 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) ("FixityDecls ", fixity_sigs), ("DefaultDecls ", default_ds), ("TypeDecls ", type_ds), - ("TypeFunDecls ", type_fun_ds), - ("TypeEquations ", type_equs), ("DataDecls ", data_ds), ("NewTypeDecls ", newt_ds), + ("TypeFamilyDecls ", type_fam_ds), + ("FamilyInstDecls ", fam_inst_ds), ("DataConstrs ", data_constrs), ("DataDerivings ", data_derivs), ("ClassDecls ", class_ds), @@ -49,6 +56,8 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) ("DefaultMethods ", default_method_ds), ("InstDecls ", inst_ds), ("InstMethods ", inst_method_ds), + ("InstType ", inst_type_ds), + ("InstData ", inst_data_ds), ("TypeSigs ", bind_tys), ("ValBinds ", val_bind_ds), ("FunBinds ", fn_bind_ds), @@ -75,7 +84,7 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) -- in class decls. ToDo tycl_decls = [d | TyClD d <- decls] - (class_ds, type_ds, type_fun_ds, type_equs, data_ds, newt_ds) = + (class_ds, type_ds, data_ds, newt_ds, type_fam_ds, fam_inst_ds) = countTyClDecls tycl_decls inst_decls = [d | InstD d <- decls] @@ -99,8 +108,8 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) = foldr add2 (0,0) (map data_info tycl_decls) (class_method_ds, default_method_ds) = foldr add2 (0,0) (map class_info tycl_decls) - (inst_method_ds, method_specs, method_inlines) - = foldr add3 (0,0,0) (map inst_info inst_decls) + (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 {}) = (0,1) @@ -135,21 +144,30 @@ ppSourceStats short (L _ (HsModule _ exports imports ldecls _)) (classops, addpr (foldr add2 (0,0) (map (count_bind.unLoc) (bagToList (tcdMeths decl))))) class_info other = (0,0) - inst_info (InstDecl _ inst_meths inst_sigs _) -- !!!TODO: ATs info -=chak + inst_info (InstDecl _ inst_meths inst_sigs ats) = case count_sigs (map unLoc inst_sigs) of (_,_,ss,is) -> - (addpr (foldr add2 (0,0) (map (count_bind.unLoc) (bagToList inst_meths))), ss, is) + case foldr add2 (0, 0) (map (countATDecl . unLoc) ats) of + (tyDecl, dtDecl) -> + (addpr (foldr add2 (0,0) + (map (count_bind.unLoc) (bagToList inst_meths))), + ss, is, tyDecl, dtDecl) + where + countATDecl (TyData {}) = (0, 1) + countATDecl (TySynonym {}) = (1, 0) 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}