[fix things so DEFS never needs to be read when compiling and CORE need not be read when typechecking, improve memory consumption by rearranging code some
John Meacham <john@repetae.net>**20090807084625
 Ignore-this: fa68be49d6e2442bd0555b26deb40ba4
] hunk ./src/E/Program.hs 33
-    progClassHierarchy :: ClassHierarchy,
hunk ./src/E/Program.hs 50
-    progClassHierarchy = mempty,
hunk ./src/Ho/Build.hs 30
+import Debug.Trace
hunk ./src/Ho/Build.hs 538
-                (cho',newHo) <- func cho mempty { hoTcInfo = htc } tidata
+                let (mgName:_) = sort $ map (hsModuleName . snd) modules
+                (cho',newHo) <- func cho mempty { hoModuleGroup = mgName, hoTcInfo = htc } tidata
hunk ./src/Ho/Build.hs 555
-                    (mgName:_) = sort $ map (hsModuleName . snd) modules
hunk ./src/Ho/Build.hs 568
+    fn' <- shortenPath fn
hunk ./src/Ho/Build.hs 574
+            --Just x -> trace (printf "**** Reading %s from %s ****\n" (show ct) fn') $ decode . decompress $ L.fromChunks [x]
hunk ./src/Ho/Build.hs 576
+        Left modGroup = hohName hoh
hunk ./src/Ho/Build.hs 578
-    return (hoh,fc cff_idep,mempty { hoTcInfo = fc cff_defs, hoBuild = fc cff_core})
+    return (hoh,fc cff_idep,mempty { hoModuleGroup = modGroup, hoTcInfo = fc cff_defs, hoBuild = fc cff_core})
hunk ./src/Ho/Type.hs 130
+    hoModuleGroup :: ModuleGroup,
hunk ./src/Ho/Type.hs 134
-    {-! derive: update, Monoid !-}
+    {-! derive: update !-}
+
+instance Monoid Ho where
+    mempty = Ho (error "unknown module group") mempty mempty
+    mappend ha hb = Ho (hoModuleGroup ha) (hoTcInfo ha `mappend` hoTcInfo hb) (hoBuild ha `mappend` hoBuild hb)
hunk ./src/Main.hs 14
+import System.Mem
hunk ./src/Main.hs 126
-    g fs =  compileModEnv =<< parseFiles fs processInitialHo processDecls
+    g fs =  processCollectedHo =<< parseFiles fs processInitialHo processDecls
hunk ./src/Main.hs 166
-        (mod:_) = Map.keys $ hoExports $ hoTcInfo aho
+        --(mod:_) = Map.keys $ hoExports $ hoTcInfo aho
hunk ./src/Main.hs 171
-        choHoMap = Map.singleton (show mod) aho `mappend` choHoMap accumho
+        choHoMap = Map.singleton (show $ hoModuleGroup aho) aho `mappend` choHoMap accumho
hunk ./src/Main.hs 210
-            progClassHierarchy = hoClassHierarchy $ hoTcInfo allHo,
hunk ./src/Main.hs 411
-        (mod:_) = Map.keys $ hoExports $ hoTcInfo ho'
+--        (mod:_) = Map.keys $ hoExports $ hoTcInfo ho'
hunk ./src/Main.hs 413
-        choHoMap = Map.singleton (show mod) ho' { hoBuild = newHoBuild},
+        choHoMap = Map.singleton (show $ hoModuleGroup ho') ho' { hoBuild = newHoBuild},
hunk ./src/Main.hs 446
-compileModEnv cho = do
+processCollectedHo cho = do
hunk ./src/Main.hs 448
+    putProgressLn "Starting Collected Compilation"
hunk ./src/Main.hs 450
-    let dataTable = progDataTable prog
-        prog = programUpdate program {
-            progCombinators = melems $ choCombinators cho,
-            progClassHierarchy = choClassHierarchy cho,
-            progDataTable = choDataTable cho
-            }
-        rules' = Rules $ fromList [ (combIdent x,combRules x) | x <- melems (choCombinators cho), not $ null (combRules x) ]
-
-    -- dump final version of various requested things
-    wdump FD.Datatable $ putErrLn (render $ showDataTable dataTable)
-    wdump FD.DatatableBuiltin $ putErrLn (render $ showDataTable samplePrimitiveDataTable)
hunk ./src/Main.hs 456
+
+    let dataTable = choDataTable cho
+        combinators = melems $ choCombinators cho
+
+    evaluate dataTable
+    evaluate combinators
+
+    let prog = programUpdate program {
+            progCombinators = combinators,
+            progDataTable = dataTable
+            }
+        rules' = Rules $ fromList [ (combIdent x,combRules x) | x <- combinators, not $ null (combRules x) ]
+    -- dump final version of various requested things
+    wdump FD.Datatable $ putErrLn (render $ showDataTable dataTable)
+    wdump FD.DatatableBuiltin $ putErrLn (render $ showDataTable samplePrimitiveDataTable)
hunk ./src/Main.hs 477
-    if int then Interactive.interact cho else do
+    if int then Interactive.interact cho else compileWholeProgram prog
+
+
+{-# NOINLINE compileWholeProgram #-}
+compileWholeProgram prog = do
+    performGC
+
+    let dataTable = progDataTable prog