[fix bug where the static argument transformation would clear rules. clean up a lot of code.
John Meacham <john@repetae.net>**20101207031557
 Ignore-this: a78a8819ac6728d331b9a01e9a665152
] hunk ./src/E/Inline.hs 6
+    programDecomposedCombs,
hunk ./src/E/Inline.hs 29
-
-
-
-
hunk ./src/E/LambdaLift.hs 48
-    ans = programSetDs (concat ds') prog { progStats = progStats prog `mappend` nstat }
-    (ds',nstat) = runStatM $ mapM (f True) (programDecomposedDs prog)
+    ans = progCombinators_s (concat ds') prog { progStats = progStats prog `mappend` nstat }
+    (ds',nstat) = runStatM $ mapM h (programDecomposedCombs prog)
+    h (True,[comb]) = do [(_,nb)] <- f True (Right [(combHead comb, combBody comb)]); return [combBody_s nb comb]
+    h (_,cs) = do
+        forM cs $ \ c -> do
+            e' <- g (combBody c)
+            return (combBody_s e' c)
hunk ./src/E/LambdaLift.hs 172
-    let z comb  = do      
+    let z comb  = do
hunk ./src/E/Main.hs 87
-    let finalVarMap = mappend (fromList [(tvrIdent tvr,Just $ EVar tvr) | tvr <- map combHead $ values choCombs ]) (choVarMap accumho)
-        choCombs = sfilter (\(k,_) -> k /= emptyId) choCombinators'
+    let choCombs = sfilter (\(k,_) -> k /= emptyId) choCombinators'
hunk ./src/E/Main.hs 89
-        choVarMap = finalVarMap,
hunk ./src/E/Main.hs 156
-    cho <- return $ choCombinators_u (fmap addRule) cho
+    cho <- return $ updateChoHo $ choCombinators_u (fmap addRule) cho
hunk ./src/E/Main.hs 163
-
-
hunk ./src/E/Main.hs 170
-
hunk ./src/E/Main.hs 201
-
hunk ./src/E/Main.hs 211
+        mprog <- transformProgram tparms { transformCategory = "FloatOutward", transformOperation = floatOutward } mprog
hunk ./src/E/Main.hs 216
+
hunk ./src/E/Main.hs 220
-
hunk ./src/E/Main.hs 229
-        --wdump FD.Progress $ let SubProgram rec = progType mprog in  putErr (if rec then "*" else ".")
hunk ./src/E/Main.hs 232
-    --putProgressLn "Initial optimization pass"
-
hunk ./src/E/Main.hs 247
+    putErrLn "-- ChoRulesPostSimp";
+    putErrLn "------------";
+    dumpRules (Rules $ fromList [ (combIdent x,combRules x) | x <- progCombinators prog, not $ null (combRules x) ])
hunk ./src/E/Main.hs 308
-
hunk ./src/E/Main.hs 320
-        choExternalNames = idMapToIdSet newMap,
-        choVarMap = newMap
+        choExternalNames = idMapToIdSet newMap
hunk ./src/E/Rules.hs 47
-
-
-
hunk ./src/FrontEnd/FrontEnd.hs 21
-
-
--- | Main entry point to front end
-
-{-
-parseFiles :: [Either Module String]      -- ^ List of files or modules to read
-               -> (CollectedHo -> Ho -> IO CollectedHo) -- ^ Process initial data loaded from ho files
-               -> (CollectedHo -> Ho -> Tc.TiData -> IO (CollectedHo,Ho))  -- ^ routine which takes the global ho, the partial local ho and the output of the front end, and returns the completed ho.
-               -> IO CollectedHo          -- ^ (the final combined ho,all the loaded ho data)
-parseFiles fs ifunc func = do
-    wdump FD.Progress $ do
-        putErrLn $ "Compiling " ++ show fs
-    compileModules fs ifunc (doModules func)
-
--- Process modules found by Ho
-doModules :: (CollectedHo -> Ho -> Tc.TiData -> IO (CollectedHo,Ho)) -> CollectedHo -> [HsModule] -> IO (CollectedHo,Ho)
-doModules func ho ms  = do
-    ms <- mapM modInfo ms
-    when (dump FD.Defs) $ flip mapM_ ms $ \m -> do
-         putStrLn $ " ---- Definitions for" <+> show (modInfoName m) <+> "----";
-         mapM_ print ( modInfoDefs m)
-    ms <- determineExports [ (x,y,z) | (x,(y,z)) <- Map.toList $ hoDefs $ hoTcInfo $ choHo ho] (Map.toList $ hoExports $ hoTcInfo $ choHo ho) ms
-    --(ho',tiData) <- Tc.tiModules' ho ms
-    (htc,tiData) <- Tc.tiModules (hoTcInfo (choHo ho)) ms
-    func ho mempty { hoTcInfo = htc } tiData
--}
-
hunk ./src/Ho/Build.hs 88
-
hunk ./src/Ho/Build.hs 97
- -
hunk ./src/Ho/Build.hs 99
--- | this should be updated every time the on-disk file format changes for a chunk. It is independent of the
--- version number of the compiler.
-
-
hunk ./src/Ho/Build.hs 107
-
hunk ./src/Ho/Build.hs 122
-
hunk ./src/Ho/Build.hs 149
-
-
hunk ./src/Ho/Build.hs 198
-
hunk ./src/Ho/Build.hs 261
-
hunk ./src/Ho/Collected.hs 43
-        choVarMap = mempty,
+        choVarMap = error "choVarMap-a",
hunk ./src/Ho/Collected.hs 48
-        choVarMap = choVarMap a `mergeChoVarMaps` choVarMap b,
+        choVarMap = error "choVarMap-b",
hunk ./src/Ho/Collected.hs 56
-updateChoHo cho = cho { choHo = ho } where
+updateChoHo cho = cho { choHo = ho, choVarMap = varMap } where
hunk ./src/Ho/Collected.hs 59
-        mmap = sfilter (\(k,_) -> (k `notElem` (map (tvrIdent . fst) ds))) (choVarMap cho)
-    g (t,e) = case mlookup (tvrIdent t) (choVarMap cho) of
+        mmap = sfilter (\(k,_) -> (k `notElem` (map (tvrIdent . fst) ds))) varMap
+    g (t,e) = case mlookup (tvrIdent t) varMap of
hunk ./src/Ho/Collected.hs 63
- --   ae = runIdentity . annotate (choVarMap cho) (\_ -> return) (\_ -> return) (\_ -> return)
-
--- this will have to merge rules and properties.
-mergeChoVarMaps :: IdMap (Maybe E) -> IdMap (Maybe E) -> IdMap (Maybe E)
-mergeChoVarMaps x y = unionWith f x y where
-    f (Just (EVar x)) (Just (EVar y)) = Just . EVar $ merge x y
-    f x y = error "mergeChoVarMaps: bad merge."
-    merge ta tb = ta { tvrInfo = minfo' }   where
-        minfo = tvrInfo ta `mappend` tvrInfo tb
-        minfo' = dex (undefined :: Properties) $ minfo
-        dex dummy y = g (Info.lookup (tvrInfo tb) `asTypeOf` Just dummy) where
-            g Nothing = y
-            g (Just x) = Info.insertWith mappend x y
+    varMap = fmap (\c -> Just (EVar $ combHead c)) $ choCombinators cho
hunk ./src/Ho/Collected.hs 68
-    f c1 c2 = combRules_s  (combRules c1 `Data.List.union`  combRules c2) . combHead_s (merge (combHead c1) (combHead c2)) $ c1
+    f c1 c2 = combRules_s (combRules c1 `Data.List.union` combRules c2) . combHead_s (merge (combHead c1) (combHead c2)) $ c1
hunk ./src/Ho/Type.hs 54
-    choExternalNames :: IdSet, choCombinators  :: IdMap Comb,
-    -- this is a map of ids to their full TVrs with all rules and whatnot
-    -- attached.
-    choVarMap :: IdMap (Maybe E),
+    choExternalNames :: IdSet,
+    -- these are the functions in Comb form.
+    choCombinators  :: IdMap Comb,
hunk ./src/Ho/Type.hs 61
-    choHo :: Ho, -- this is a cache, it must be updated whenever choHoMap is updated.
hunk ./src/Ho/Type.hs 63
-    choLibDeps :: Map.Map PackedString HoHash
+    choLibDeps :: Map.Map PackedString HoHash,
+    -- these are caches of pre-computed values
+    choHo :: Ho, -- ^ cache of combined and renamed ho
+    choVarMap :: IdMap (Maybe E) -- ^ cache of variable substitution map