[clean ups in Rules, now respect NOINLINE properties
John Meacham <john@repetae.net>**20050929232513] hunk ./E/Rules.hs 12
-    applyRule,
-    mapBodies,
-    applyRule'
+    mapBodies
hunk ./E/Rules.hs 60
-mapBodies :: (E ->  E) -> Rules ->  Rules
-mapBodies g (Rules mp) = Rules $ Map.map (map f) mp where
-    f rule = rule { ruleBody = g (ruleBody rule) }
-    --    return rule { ruleBody = b }
+mapBodies :: Monad m => (E -> m E) -> Rules -> m Rules
+mapBodies g (Rules mp) = do
+    let f rule = do
+            b <- g (ruleBody rule)
+            return rule { ruleBody = b }
+    mp' <- sequence [ do rs' <- mapM f rs; return (k,rs') | (k,rs) <- Map.toAscList mp ]
+    return $ Rules $ Map.fromAscList mp'
hunk ./E/Rules.hs 103
-applyRule stats rules (EVar tvr) xs = do
-    z <- applyRule' stats rules tvr xs
-    case z of
-        Just (x,xs) -> return $ foldl EAp x xs
-        Nothing -> return $ foldl EAp (EVar tvr) xs
-applyRule _stats _rules _ _xs = fail "Can't apply rule"
-
hunk ./E/Rules.hs 106
-applyRule' stats _ (TVr { tvrIdent = n }) (ty:s:rs) | n == preludeError, Just s' <- toString s  = do
-        tick stats ruleError
-        return $ Just ((EError ("Prelude.error: " ++ s') ty),rs)
-applyRule' stats (Rules rules) tvr xs = ans where
-    ans = case Map.lookup tvr rules of
-            Just rs -> f rs
-            _ -> return Nothing
-    f [] = return Nothing
-    f (r:_) | nArgs <= length xs, Just ss <- sequence (zipWith unify (ruleArgs r) xs) = ans ss where
-        nArgs = length (ruleArgs r)
-        ans ss = do
-            tick stats (ruleName r)
-            let b = substMap (IM.fromList [ (i,x) | ~(~(EVar (TVr { tvrIdent = i })),x) <- concat ss ]) (ruleBody r)
-            return $ Just (b,(drop nArgs xs))
-    f (_:rs) = f rs
hunk ./E/SSimplify.hs 435
-    forceInline x | Properties p <- Info.fetch (tvrInfo x) = Set.member (toAtom "INLINE") p
+    forceInline x | Properties p <- Info.fetch (tvrInfo x) = Set.member prop_INLINE p
hunk ./E/SSimplify.hs 438
+
+    h (EVar v) xs' inb | Properties p <- Info.fetch (tvrInfo v), Set.member prop_NOINLINE p = do
+        z <- applyRule'' (so_rules sopts) v xs'
+        case z of
+            Just (x,xs) -> h x xs inb
+            Nothing -> app (EVar v, xs')
hunk ./Ho.hs 403
-mapHoBodies sm ho = ho { hoEs = Map.map f (hoEs ho) , hoRules =  E.Rules.mapBodies sm (hoRules ho) } where
+mapHoBodies sm ho = ho { hoEs = Map.map f (hoEs ho) , hoRules =  runIdentity (E.Rules.mapBodies (return . sm) (hoRules ho)) } where
hunk ./Ho.hs 417
-applyFixups mie ho = ho { hoEs = Map.map f (hoEs ho) , hoRules =  E.Rules.mapBodies sm (hoRules ho) } where
+applyFixups mie ho = ho { hoEs = Map.map f (hoEs ho) , hoRules =  runIdentity (E.Rules.mapBodies (return . sm) (hoRules ho)) } where
hunk ./Info/Types.hs 33
+prop_INLINE = toAtom "INLINE"
+prop_NOINLINE = toAtom "NOINLINE"
+
+