[make optimization be a bit faster. let the c code generator handle constant nodes
John Meacham <john@repetae.net>**20060818050938] hunk ./C/FromGrin.hs 17
+import Grin.Noodle
hunk ./C/FromGrin.hs 65
+convertVal h@NodeC {} | valIsConstant h = do
+    (_,i) <- newConst h
+    return $ variable (name $  'c':show i )
hunk ./C/FromGrin.hs 499
+
hunk ./Grin/Devolve.hs 36
-    return $ setGrinFunctions (lf ++ nf) grin
+    return $ setGrinFunctions (lf ++ nf) grin { grinPhase = PostDevolve }
hunk ./Grin/Simplify.hs 403
+        lr <- g lr
hunk ./Grin/Simplify.hs 410
+        lr <- g lr
hunk ./Grin/Simplify.hs 414
+        lr <- g lr
hunk ./Grin/Simplify.hs 442
-    f (cs@Let {} :>>= lr) | Just comb <- isCombinable postEval cs = case comb of
-        UnboxTag -> do
-            mtick "Optimize.optimize.let-unbox-tag"
-            let (va:_vr) = [ v | v <- [v1..], not $ v `Set.member` fv ]
-            return ((combine postEval TyTag cs :>>= Var va TyTag :-> Return (NodeV va [])) :>>= lr)
-        UnboxTup (t,ts) -> do
-            mtick $ "Optimize.optimize.let-unbox-node.{" ++ show t
-            let vs = [ v | v <- [v1..], not $ v `Set.member` fv ]
-                vars = [ Var v t | v <- vs | t <- ts ]
-            return ((combine postEval (tuple ts) cs :>>= tuple vars  :-> Return (NodeC t vars)) :>>= lr)
-        UnboxConst val -> do
-            mtick $ "Optimize.optimize.let-unbox-const.{" ++ show val
-            return ((combine postEval tyUnit cs :>>= unit :-> Return val) :>>= lr)
+    f (cs@Let {} :>>= lr) | Just comb <- isCombinable postEval cs = do
+        lr <- g lr
+        case comb of
+            UnboxTag -> do
+                mtick "Optimize.optimize.let-unbox-tag"
+                let (va:_vr) = [ v | v <- [v1..], not $ v `Set.member` fv ]
+                return ((combine postEval TyTag cs :>>= Var va TyTag :-> Return (NodeV va [])) :>>= lr)
+            UnboxTup (t,ts) -> do
+                mtick $ "Optimize.optimize.let-unbox-node.{" ++ show t
+                let vs = [ v | v <- [v1..], not $ v `Set.member` fv ]
+                    vars = [ Var v t | v <- vs | t <- ts ]
+                return ((combine postEval (tuple ts) cs :>>= tuple vars  :-> Return (NodeC t vars)) :>>= lr)
+            UnboxConst val -> do
+                mtick $ "Optimize.optimize.let-unbox-const.{" ++ show val
+                return ((combine postEval tyUnit cs :>>= unit :-> Return val) :>>= lr)