[change progCombinators in E.Program to use new Comb type
John Meacham <john@repetae.net>**20080220050707] hunk ./E/LambdaLift.hs 164
-    let wp =  fromList [ tvrIdent x | (x,_,_) <- cs ]
+    let wp =  fromList [ combIdent x | x <- cs ] :: IdSet
hunk ./E/LambdaLift.hs 168
-    let z (n,as,v) = do
+    let z comb  = do      
+            (n,as,v) <- return $ combTriple comb
hunk ./E/LambdaLift.hs 172
-            modifyIORef fc (\xs -> (n,as,v'):cs' ++ xs)
+            modifyIORef fc (\xs -> combTriple_s (n,as,v') comb:cs' ++ xs)
hunk ./E/LambdaLift.hs 259
-        tellCombinator c = tell ([c],mempty)
-        tellCombinators c = tell (c,mempty)
+        tellCombinator c = tell ([combTriple_s c emptyComb],mempty)
+        tellCombinators c = tell (map (`combTriple_s` emptyComb) c,mempty)
hunk ./E/Program.hs 34
-    progCombinators :: [(TVr,[TVr],E)],
+    progCombinators :: [Comb],
hunk ./E/Program.hs 64
-programDs prog = [ (t,foldr ELam e as)  | (t,as,e) <- progCombinators prog]
+programDs prog = [ (t,e)  | Comb { combHead = t, combBody = e }  <- progCombinators prog]
hunk ./E/Program.hs 72
-    progCombinators = [ (t,as,body) | (t,e) <- ds, let (body,as) = fromLam e ]
+    progCombinators = [ emptyComb { combHead = t, combBody = e } | (t,e) <- ds ]
hunk ./E/Program.hs 79
-programAddDs ds prog = prog { progCombinators = [ (t,as,body) | (t,e) <- ds, let (body,as) = fromLam e ] ++ progCombinators prog }
+programAddDs ds prog = prog { progCombinators = [ emptyComb { combHead = t, combBody = e } | (t,e) <- ds ] ++ progCombinators prog }
hunk ./E/Program.hs 92
--- | note, this will reset your entry points
-programSetE :: E -> Program -> Program
-programSetE ELetRec { eDefs = ds, eBody = EVar v } prog = programSetDs ds prog { progMainEntry = v }
-programSetE ELetRec { eDefs = ds, eBody = mainBody } prog = programSetDs ((main,mainBody):ds) prog { progEntryPoints = [main], progMainEntry = main } where
-    main = (tVr num (typeInfer (progDataTable prog) mainBody))
-    Just num = List.find (`notElem` [ n  | (TVr { tvrIdent = n },_) <- ds ]) [toId $ toName Val (show $ progModule prog,"main" ++ show n) |  n <- [1 :: Int ..] ]
-programSetE e prog = prog { progCombinators = [(main,as,mainBody)], progEntryPoints = [main], progMainEntry = main } where
-    (mainBody,as) = fromLam e
-    main = tVr (toId $ toName Val (show $ progModule prog,"main")) (typeInfer (progDataTable prog) e)
-
hunk ./E/Program.hs 103
-    sequence_ $ intersperse (hPutStrLn fh "") [ hPrintCheckName fh dataTable v (foldr ELam e as) | (v,as,e) <- cs]
+    sequence_ $ intersperse (hPutStrLn fh "") [ hPrintCheckName fh dataTable v e | Comb { combHead = v, combBody = e } <- cs]
hunk ./E/Type.hs 28
+
+emptyComb = Comb { combHead = tvr, combBody = Unknown, combRules = [] }
+combIdent = tvrIdent . combHead
+combArgs  = snd . fromLam . combBody
+combABody = fst . fromLam . combBody
+combTriple comb = (combHead comb,combArgs comb,combABody comb)
+combTriple_s (t,as,e) comb = comb { combHead = t, combBody = Prelude.foldr ELam e as }
hunk ./Grin/FromE.hs 184
-    ds <- runC lenv $ mapM doCompile [ c | c@(v,_,_) <- progCombinators prog, v `notElem` [x | (x,_,_) <- cc]]
+    ds <- runC lenv $ mapM doCompile [ c | c@(v,_,_) <- map combTriple $ progCombinators prog, v `notElem` [x | (x,_,_) <- cc]]
hunk ./Grin/FromE.hs 228
-    scMap = fromList [ (tvrIdent t,toEntry x) |  x@(t,_,_) <- progCombinators prog]
+    scMap = fromList [ (tvrIdent t,toEntry x) |  x@(t,_,_) <- map combTriple $ progCombinators prog]
hunk ./Grin/FromE.hs 282
-constantCaf Program { progDataTable = dataTable, progCombinators = ds } = ans where
+constantCaf Program { progDataTable = dataTable, progCombinators = combs } = ans where
+    ds = map combTriple combs
hunk ./Main.hs 534
-    let ffiExportNames = [tv | (tv, _, _) <- progCombinators prog,
+    let ffiExportNames = [tv | tv <- map combHead $  progCombinators prog,
hunk ./Main.hs 539
-                          progCombinators = (main,[],mainv):[ (unsetProperty prop_EXPORTED t,as,e) | (t,as,e) <- progCombinators prog]
+                          progCombinators = emptyComb { combHead = main, combBody = mainv }:map (combHead_u (unsetProperty prop_EXPORTED)) (progCombinators prog)