[still discard unused rules and definitions when not specializing in type analysis
John Meacham <john@repetae.net>**20060406003901] hunk ./E/TypeAnalysis.hs 74
-    if doSpecialize then do
-        unusedRules <- supplyReadValues ur >>= return . fsts . filter (not . snd)
-        unusedValues <- supplyReadValues uv >>= return . fsts . filter (not . snd)
-        let (prog',stats) = runStatM $ specializeProgram (Set.fromList unusedRules) (Set.fromList unusedValues) prog
-        prog <- annotateProgram mempty lamdel (\_ -> return) (\_ -> return) prog'
-        return prog { progStats = progStats prog `mappend` stats }
-     else return prog
+    unusedRules <- supplyReadValues ur >>= return . fsts . filter (not . snd)
+    unusedValues <- supplyReadValues uv >>= return . fsts . filter (not . snd)
+    let (prog',stats) = runStatM $ specializeProgram doSpecialize (Set.fromList unusedRules) (Set.fromList unusedValues) prog
+    prog <- annotateProgram mempty lamdel (\_ -> return) (\_ -> return) prog'
+    return prog { progStats = progStats prog `mappend` stats }
hunk ./E/TypeAnalysis.hs 260
-    (Set.Set (Module,Int))  -- ^ used rules
-    -> (Set.Set TVr)        -- ^ used values
+    Bool                       -- ^ do specialization
+    -> (Set.Set (Module,Int))  -- ^ used rules
+    -> (Set.Set TVr)           -- ^ used values
hunk ./E/TypeAnalysis.hs 265
-specializeProgram usedRules usedValues prog = do
-    (nds,_) <- specializeDs (usedRules,usedValues,progDataTable prog,mempty) (programDs prog)
+specializeProgram doSpecialize usedRules usedValues prog = do
+    (nds,_) <- specializeDs doSpecialize (usedRules,usedValues,progDataTable prog,mempty) (programDs prog)
hunk ./E/TypeAnalysis.hs 270
-specializeDef (_,unusedVals,_,_) (tvr,e) | tvr `Set.member` unusedVals = return (tvr,EError "Unused" (tvrType tvr))
-specializeDef _(t,e) | getProperty prop_PLACEHOLDER t = return (t,e)
-specializeDef (_,_,dataTable,_) (tvr,e) = ans where
+specializeDef _ (_,unusedVals,_,_) (tvr,e) | tvr `Set.member` unusedVals = return (tvr,EError "Unused" (tvrType tvr))
+specializeDef _ _ (t,e) | getProperty prop_PLACEHOLDER t = return (t,e)
+specializeDef True (_,_,dataTable,_) (tvr,e) = ans where
hunk ./E/TypeAnalysis.hs 285
+specializeDef _ _ (t,e) = return (t,e)
hunk ./E/TypeAnalysis.hs 288
-specBody :: MonadStats m => SpecEnv -> E -> m E
-specBody env@(_,unusedVars,dataTable,_) e | (EVar h,as) <- fromAp e, h `Set.member` unusedVars = do
+specBody :: MonadStats m => Bool -> SpecEnv -> E -> m E
+specBody _ env@(_,unusedVars,dataTable,_) e | (EVar h,as) <- fromAp e, h `Set.member` unusedVars = do
hunk ./E/TypeAnalysis.hs 292
-specBody (_,_,_,dmap) e | (EVar h,as) <- fromAp e, Just os <- Map.lookup h dmap = do
+specBody True (_,_,_,dmap) e | (EVar h,as) <- fromAp e, Just os <- Map.lookup h dmap = do
hunk ./E/TypeAnalysis.hs 295
-specBody env (ELetRec ds e) = do
-    (nds,nenv) <- specializeDs env ds
-    e <- specBody nenv e
+specBody doSpecialize env (ELetRec ds e) = do
+    (nds,nenv) <- specializeDs doSpecialize env ds
+    e <- specBody doSpecialize nenv e
hunk ./E/TypeAnalysis.hs 299
-specBody env e = emapE' (specBody env) e
+specBody doSpecialize env e = emapE' (specBody doSpecialize env) e
hunk ./E/TypeAnalysis.hs 302
-specializeDs env@(unusedRules,_,dataTable,_) ds = do
-    (ds,nenv) <- runWriterT $ mapM (specializeDef env) ds
+specializeDs doSpecialize env@(unusedRules,_,dataTable,_) ds = do
+    (ds,nenv) <- runWriterT $ mapM (specializeDef doSpecialize env) ds
hunk ./E/TypeAnalysis.hs 311
-        sb = specBody tenv
+        sb = specBody doSpecialize tenv