[lots of performance speedups, especially in the E substitution routine
John Meacham <john@repetae.net>**20051013033430] hunk ./E/SSimplify.hs 89
-                fvs = Set.toList (Set.fromAscList (Map.keys i) `Set.union` fv)
+                fvs = Set.toList (Map.keysSet i `Set.union` fv)
hunk ./E/SSimplify.hs 161
+    {-! derive: is !-}
hunk ./E/SSimplify.hs 170
-applySubst s = substMap'' (f s) where
-    f s = Map.fromAscList [ (x,g y) | (x,y) <- Map.toAscList s ]
+applySubst s = substMap'' tm where
+    tm = Map.map g s
hunk ./E/SSimplify.hs 186
-    initialB = mempty { envInScope = Map.fromAscList [ (i,IsBoundTo Many e)  | (i,e) <- Map.toAscList $ so_boundVars sopts] }
+    initialB = mempty { envInScope =  Map.map (\e -> IsBoundTo Many e) (so_boundVars sopts) }
hunk ./E/SSimplify.hs 308
-        let t'' = substMap'' (Map.fromAscList [ (t,e) | (t,IsBoundTo _ e) <- Map.toAscList (envInScope inb) ]) t'
+        let t'' = substMap'' (Map.map (\ (IsBoundTo _ e) -> e) $ Map.filter isIsBoundTo (envInScope inb)) t'  --  (Map.fromAscList [ (t,e) | (t,IsBoundTo _ e) <- Map.toAscList (envInScope inb) ]) t'
hunk ./Fixer.hs 85
-    propegateValue v value
+    propegateValue v rv
hunk ./Fixer.hs 101
-modifiedSuperSetOf v1 (ConstValue cv) r = propegateValue (r cv) v1
-modifiedSuperSetOf v1 v2 r = addAction v2 (\x -> propegateValue (r x) v1)
+modifiedSuperSetOf (IV rv) (ConstValue cv) r = propegateValue (r cv) rv
+modifiedSuperSetOf (IV rv) v2 r = addAction v2 (\x -> propegateValue (r x) rv)
+modifiedSuperSetOf ConstValue {} _ _ =  fail "Fixer: You cannot modify a constant value"
hunk ./Fixer.hs 106
-v1 `isSuperSetOf` (ConstValue v2) = propegateValue v2 v1
-v1 `isSuperSetOf` v2 = addAction v2 (\x -> propegateValue x v1)
+(IV rv) `isSuperSetOf` (ConstValue v2) = propegateValue v2 rv
+(IV rv) `isSuperSetOf` v2 = addAction v2 (\x -> propegateValue x rv)
+ConstValue {} `isSuperSetOf` _ =   fail "Fixer: You cannot modify a constant value"
hunk ./Fixer.hs 117
-propegateValue :: Fixable a => a -> Value a -> IO ()
-propegateValue a _ | isBottom a = return ()
-propegateValue _ (ConstValue _) = fail "Fixer: You cannot modify a constant value"
-propegateValue p (IV v) = do
+propegateValue :: Fixable a => a -> RvValue a -> IO ()
+propegateValue p v = do
hunk ./Fixer.hs 122
-    {-
-    c <- readIORef (current v)
-    let diff = p `minus` c
-    if isBottom diff then return () else do
-    as <- readIORef (action v)
-    writeIORef (current v) (p `lub` c)
-    mapM_ ($ diff) as
-    -}
+