[document E tranlation with type aliases, rebuild subst cache when adding a list, rebuild subst cache when modifying env, show full names in e-verbose mode
John Meacham <john@repetae.net>**20060412232329] hunk ./E/SSimplify.hs 41
+import qualified FlagDump as FD
hunk ./E/SSimplify.hs 260
-data Range = Done E | Susp E Subst E
+data Range = Done OutE | Susp InE Subst OutE -- cached result
hunk ./E/SSimplify.hs 268
-    | IsBoundTo { bindingOccurance :: Occurance, bindingE :: E, bindingCheap :: Bool }
+    | IsBoundTo { bindingOccurance :: Occurance, bindingE :: OutE, bindingCheap :: Bool }
hunk ./E/SSimplify.hs 282
-    envInScope :: IdMap Binding,
-    envTypeMap :: IdMap E
+    envInScope :: IdMap Binding
hunk ./E/SSimplify.hs 287
-susp e sub =  Susp e sub (substMap'' (fmap mkSubst sub) e)
+susp e sub =  Susp e sub undefined -- (substMap'' (fmap mkSubst sub) e)
hunk ./E/SSimplify.hs 289
-insertSuspSubst :: TVr -> E -> Env -> Env
+insertSuspSubst :: TVr -> InE -> Env -> Env
hunk ./E/SSimplify.hs 291
-insertSuspSubst' :: Id -> E -> Env -> Env
+insertSuspSubst' :: Id -> InE -> Env -> Env
hunk ./E/SSimplify.hs 294
-insertDoneSubst :: TVr -> E -> Env -> Env
+insertDoneSubst :: TVr -> OutE -> Env -> Env
hunk ./E/SSimplify.hs 296
-insertDoneSubst' :: Id -> E -> Env -> Env
+insertDoneSubst' :: Id -> OutE -> Env -> Env
hunk ./E/SSimplify.hs 302
-substAddList ls env = env { envSubst = fromList ls `union` envSubst env }
+substAddList ls env = cacheSubst env { envSubst = fromList ls `union` envSubst env }
hunk ./E/SSimplify.hs 312
+{-
hunk ./E/SSimplify.hs 321
+-}
hunk ./E/SSimplify.hs 323
-mkSubst :: Range -> Maybe E
-mkSubst (Done e) = Just e
-mkSubst (Susp _ _ e) = Just e
+applySubst :: Subst -> IdMap a -> IdMap (Maybe OutE)
+applySubst s nn = applySubst' s where
+    nn' = fmap (const Nothing) s `mappend` fmap (const Nothing) nn
+    applySubst' s = (tm `mappend` nn') where
+        tm = fmap g s
+        g (Done e) = Just e
+        g (Susp e s' _) = Just $ substMap'' (applySubst' s') e
+
+--mkSubst :: Range -> Maybe E
+--mkSubst (Done e) = Just e
+--mkSubst (Susp _ _ e) = Just e
hunk ./E/SSimplify.hs 336
-cacheSubst env = env { envCachedSubst = fmap mkSubst (envSubst env) }
+--cacheSubst env = env { envCachedSubst = fmap mkSubst (envSubst env) }
+cacheSubst env = env { envCachedSubst = applySubst (envSubst env) (envInScope env) }
hunk ./E/SSimplify.hs 343
-simplifyE :: SimplifyOpts -> E -> (Stat,E)
+simplifyE :: SimplifyOpts -> InE -> (Stat,OutE)
hunk ./E/SSimplify.hs 353
+type InE = E
+type OutE = E
+type InTVr = TVr
+type OutTVr = TVr
+
+type SM = IdNameT (StatT Identity)
+
hunk ./E/SSimplify.hs 383
-    f :: E -> Env -> IdNameT (StatT Identity) E
+    f :: InE -> Env -> IdNameT (StatT Identity) OutE
hunk ./E/SSimplify.hs 462
-                        w rs (insertDoneSubst' t e' . envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) $ inb) ((t',e'):ds) -- (minsert t (Done e') sub) (envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) inb) ((t',e'):ds)
+                        w rs (insertDoneSubst' t e' . envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) $ inb) ds -- ((t',e'):ds) -- (minsert t (Done e') sub) (envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) inb) ((t',e'):ds)
hunk ./E/SSimplify.hs 464
-                    False -> w rs (if n /= LoopBreaker then (envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) inb) else inb) ((t',e'):ds)
+                    False -> w rs (if n /= LoopBreaker then (cacheSubst $ envInScope_u (minsert (tvrIdent t') (isBoundTo n e')) inb) else inb) ((t',e'):ds)
hunk ./E/SSimplify.hs 489
-    showName t | odd t = tvrShowName (tVr t Unknown)
+    showName t | odd t || dump FD.EVerbose = tvrShowName (tVr t Unknown)
hunk ./E/SSimplify.hs 498
+    doCase :: OutE -> InE -> InTVr -> [Alt InE] -> (Maybe InE) -> Env -> SM OutE
hunk ./E/SSimplify.hs 519
-                e' <- doCase e t b' as' d' (envInScope_u (fromList [ (n,NotKnown) | TVr { tvrIdent = n } <- litBinds l ] `union`) inb)
+                e' <- doCase e t b' as' d' (cacheSubst $ envInScope_u (fromList [ (n,NotKnown) | TVr { tvrIdent = n } <- litBinds l ] `union`) inb)
hunk ./E/SSimplify.hs 522
-            g x = doCase x t b' as' d' (envInScope_u (minsert (tvrIdent b) NotKnown) inb)
+            g x = doCase x t b' as' d' (cacheSubst $ envInScope_u (minsert (tvrIdent b) NotKnown) inb)
hunk ./E/SSimplify.hs 623
+    applyRule :: OutTVr -> [OutE] -> Env -> SM (Maybe (OutE,[OutE]))
hunk ./E/SSimplify.hs 632
+    h :: OutE -> [OutE] -> Env -> SM OutE
hunk ./E/SSimplify.hs 658
+    didInline :: Env -> OutE -> [OutE] -> SM OutE
hunk ./E/SSimplify.hs 661
-        go e inb
+        return e
+        --go e inb