[clean up CPR interface and pass dataTable into it
John Meacham <john@repetae.net>**20051026032415] hunk ./E/CPR.hs 1
-module E.CPR(Val(..), cprAnalyzeBinds, cprAnalyze) where
+module E.CPR(Val(..), cprAnalyzeDs) where
hunk ./E/CPR.hs 9
-import Number
-import Util.SameShape
+import DataConstructors
hunk ./E/CPR.hs 16
+import Number
hunk ./E/CPR.hs 19
+import Util.SameShape
hunk ./E/CPR.hs 64
+cprAnalyzeDs :: DataTable -> [(TVr,E)] -> [(TVr,E)]
+cprAnalyzeDs dataTable ds = fst $ cprAnalyzeBinds dataTable mempty ds
hunk ./E/CPR.hs 67
-cprAnalyzeBinds :: Env -> [(TVr,E)] -> ([(TVr,E)],Env)
-cprAnalyzeBinds env bs = f env  (decomposeDefns bs) [] where
-    f env (Left (t,e):rs) zs = case cprAnalyze env e of
+
+cprAnalyzeBinds :: DataTable -> Env -> [(TVr,E)] -> ([(TVr,E)],Env)
+cprAnalyzeBinds dataTable env bs = f env  (decomposeDefns bs) [] where
+    f env (Left (t,e):rs) zs = case cprAnalyze dataTable env e of
hunk ./E/CPR.hs 75
-        g n mp = g (n - 1) [ (t,cprAnalyze nenv e)  | (t,e) <- xs] where
+        g n mp = g (n - 1) [ (t,cprAnalyze dataTable nenv e)  | (t,e) <- xs] where
hunk ./E/CPR.hs 83
-cprAnalyze :: Env -> E -> (E,Val)
-cprAnalyze (Env mp) (EVar v)
-    | Just t <- Map.lookup v mp = (EVar v,t)
-    | Just t <- Info.lookup (tvrInfo v)  = (EVar v,t)
-    | otherwise = (EVar v,Top)
-cprAnalyze env (ELetRec ds e) = (ELetRec ds' e',val) where
-    (ds',env') = cprAnalyzeBinds env ds
-    (e',val) = cprAnalyze (env' `mappend` env) e
-cprAnalyze env (ELam t e) = (ELam t e',Fun val) where
-    (e',val) = cprAnalyze (envInsert t Top env) e
-cprAnalyze env ec@(ECase {}) = runWriter (caseBodiesMapM f ec) where
-    f e = do
-        (e',v) <- return $ cprAnalyze env e
-        tell v
-        return e'
-cprAnalyze env (EAp fun arg) = (EAp fun_cpr arg,res_res) where
-    (fun_cpr, fun_res) = cprAnalyze env fun
-    res_res = case fun_res of
-        Fun x -> x
-        Top -> Top
-        Bot -> Bot
-        v -> error $ "cprAnalyze.res_res: " ++ show v
-cprAnalyze env  e = (e,f e) where
-    f (ELit (LitInt n _)) = VInt n
-    f (ELit (LitCons n [] _)) = Tag [n]
-    f (ELit (LitCons n xs  _)) = Tup n (map g xs)
-    f (EPi t e) = Tup tc_Arrow [g $ tvrType t, g e]
-    f (EPrim {}) = Top -- TODO fix primitives
-    f (EError {}) = Bot
-    f e = error $ "cprAnalyze.f: " ++ show e
-    g = snd . cprAnalyze env
+cprAnalyze :: DataTable -> Env -> E -> (E,Val)
+cprAnalyze dataTable env e = cprAnalyze' env e where
+    cprAnalyze' (Env mp) (EVar v)
+        | Just t <- Map.lookup v mp = (EVar v,t)
+        | Just t <- Info.lookup (tvrInfo v)  = (EVar v,t)
+        | otherwise = (EVar v,Top)
+    cprAnalyze' env (ELetRec ds e) = (ELetRec ds' e',val) where
+        (ds',env') = cprAnalyzeBinds dataTable env ds
+        (e',val) = cprAnalyze' (env' `mappend` env) e
+    cprAnalyze' env (ELam t e) = (ELam t e',Fun val) where
+        (e',val) = cprAnalyze' (envInsert t Top env) e
+    cprAnalyze' env ec@(ECase {}) = runWriter (caseBodiesMapM f ec) where
+        f e = do
+            (e',v) <- return $ cprAnalyze' env e
+            tell v
+            return e'
+    cprAnalyze' env (EAp fun arg) = (EAp fun_cpr arg,res_res) where
+        (fun_cpr, fun_res) = cprAnalyze' env fun
+        res_res = case fun_res of
+            Fun x -> x
+            Top -> Top
+            Bot -> Bot
+            v -> error $ "cprAnalyze'.res_res: " ++ show v
+    cprAnalyze' env  e = (e,f e) where
+        f (ELit (LitInt n _)) = VInt n
+        f (ELit (LitCons n [] _)) = Tag [n]
+        f (ELit (LitCons n xs  _)) = Tup n (map g xs)
+        f (EPi t e) = Tup tc_Arrow [g $ tvrType t, g e]
+        f (EPrim {}) = Top -- TODO fix primitives
+        f (EError {}) = Bot
+        f e = error $ "cprAnalyze'.f: " ++ show e
+        g = snd . cprAnalyze' env
hunk ./Main.hs 214
-        cds <- return $ fst (E.CPR.cprAnalyzeBinds mempty cds)
+        cds <- return (E.CPR.cprAnalyzeDs fullDataTable cds)
hunk ./Main.hs 240
-        cds <- return $ fst (E.CPR.cprAnalyzeBinds mempty cds)
+        cds <- return (E.CPR.cprAnalyzeDs fullDataTable cds)