diff --git a/src/compiler/GF/Command/Commands.hs b/src/compiler/GF/Command/Commands.hs index a743ee1f0..f3c2790fd 100644 --- a/src/compiler/GF/Command/Commands.hs +++ b/src/compiler/GF/Command/Commands.hs @@ -859,10 +859,13 @@ allCommands env@(pgf, mos) = Map.fromList [ "Show compiled source code, i.e. as it is included in GF object files.", "This command requires a source grammar to be in scope, imported with 'import -retain'.", "The optional MODULE arguments cause just these modules to be shown.", + "The -size and -detailedsize options show code size as the number of constructor nodes.", "This command must be a line of its own, and thus cannot be a part of a pipe." ], options = [ + ("detailedsize", "instead of code, show the sizes of all judgements and modules"), ("save", "save each MODULE in file MODULE.gfh instead of printing it on terminal"), + ("size", "instead of code, show the sizes of all modules"), ("strip","show only type signatures of oper's and lin's, not their definitions") ], examples = [ diff --git a/src/compiler/GF/Grammar/Analyse.hs b/src/compiler/GF/Grammar/Analyse.hs index b8c9f5042..8d41d1713 100644 --- a/src/compiler/GF/Grammar/Analyse.hs +++ b/src/compiler/GF/Grammar/Analyse.hs @@ -106,7 +106,7 @@ sizeInfo i = case i of ResOverload is fs -> 1 + sum [sizeTerm ty + sizeTerm tr | (L _ ty, L _ tr) <- fs] CncCat mty mte mtf -> 1 + msize mty -- ignoring lindef and printname CncFun mict mte mtf -> 1 + msize mte -- ignoring type and printname - AnyInd b f -> 0 + AnyInd b f -> -1 -- just to ignore these in the size _ -> 0 where msize mt = case mt of @@ -121,7 +121,7 @@ sizesModule :: SourceModule -> (Int, [(Ident,Int)]) sizesModule (_,m) = let js = Map.toList (jments m) - tb = [(i,sizeInfo j) | (i,j) <- js] + tb = [(i,k) | (i,j) <- js, let k = sizeInfo j, k >= 0] in (length tb + sum (map snd tb),tb) -- the size of a grammar