[add grinStats field to 'Grin', make transformGrin use it to decide how to iterate
John Meacham <john@repetae.net>**20070602012131] hunk ./Grin/Grin.hs 312
---    grinReturnTags :: Map.Map Atom Item,
---    grinArgTags :: Map.Map Atom [Item],
hunk ./Grin/Grin.hs 324
-    grinStats = mempty,
---    grinReturnTags = mempty,
---    grinArgTags = mempty,
hunk ./Grin/Grin.hs 326
+    grinStats = mempty,
hunk ./Grin/Lint.hs 23
+import qualified Stats
hunk ./Grin/Lint.hs 70
-    --when (dodump && dump FD.CorePass) $ printGrin prog
-    --let istat = progStats prog
hunk ./Grin/Lint.hs 78
-    prog' <- Control.Exception.catch (transformOperation tp prog) ferr
---    let estat = progStats prog'
+    let istat = grinStats prog
+    prog' <- Control.Exception.catch (transformOperation tp prog { grinStats = mempty }) ferr
+    let estat = grinStats prog'
hunk ./Grin/Lint.hs 84
---            Stats.printStat name estat
+            Stats.printStat name estat
hunk ./Grin/Lint.hs 87
---    if transformSkipNoStats tp && estat == mempty then do
---        when dodump $ putErrLn "program not changed"
---        return prog
---     else do
---    when (dodump && dump FD.CoreSteps && estat /= mempty) $ Stats.printLStat (optStatLevel options) name estat
- --   when collectPassStats $ do
---        Stats.tick Stats.theStats scname
---        Stats.tickStat Stats.theStats (Stats.prependStat scname estat)
+    if transformSkipNoStats tp && Stats.null estat then do
+        when dodump $ putErrLn "program not changed"
+        return prog
+     else do
+    when (dodump && not (Stats.null estat)) $ Stats.printStat  name estat
hunk ./Grin/Lint.hs 93
-    if doIterate iterate False then transformGrin tp { transformIterate = iterateStep iterate } prog' else return prog'
+    let tstat = istat `mappend` estat
+    if doIterate iterate (not $ Stats.null estat) then transformGrin tp { transformIterate = iterateStep iterate } prog' { grinStats = tstat } else return prog' { grinStats = tstat }