[when generating an 'if' statement, compare pointers directly when possible.
John Meacham <john@repetae.net>**20080312031931] hunk ./C/FromGrin2.hs 263
-convertBody (Case v@(Var _ ty) [[p1@(NodeC t _)] :-> e1,[p2] :-> e2]) | ty == TyNode = do
+convertBody (Case v [p1@([NodeC _ (_:_)] :-> _),p2@([NodeC _ []] :-> _)]) = convertBody $ Case v [p2,p1]
+convertBody (Case v@(Var _ ty) [[p1@(NodeC t fps)] :-> e1,[p2] :-> e2]) | ty == TyNode = do
hunk ./C/FromGrin2.hs 267
-    let tag = f_GETWHAT scrut
-        da (Var v _) e | v == v0 = convertBody e
+    let da (Var v _) e | v == v0 = convertBody e
hunk ./C/FromGrin2.hs 285
+        tag = f_GETWHAT scrut
+        ifscrut = if null fps then f_RAWWHAT tenum `eq` scrut else tenum `eq` tag where
+            tenum = (constant $ enum (nodeTagName t))
hunk ./C/FromGrin2.hs 290
-    return $ profile_case_inc & cif ((constant $ enum (nodeTagName t)) `eq` tag) p1' p2'
+    return $ profile_case_inc & cif ifscrut p1' p2'
hunk ./C/FromGrin2.hs 527
-convertConst (NodeC n [])  = Just $ do tellTags n ;  return (f_RAWWHAT (constant $ enum (nodeTagName n)))
+convertConst (NodeC n []) | not (tagIsSuspFunction n)  = Just $ do tellTags n ;  return (f_RAWWHAT (constant $ enum (nodeTagName n)))
hunk ./C/FromGrin2.hs 708
-basicNode tyenv a [] = case s of
---    Just [n'] | n' == a -> return $ Just (f_VALUE (constant $ number 0))
-    _ -> do tellTags a ; return . Just $ (f_RAWWHAT (constant $ enum (nodeTagName a)))
-    where Just TyTy { tySiblings = s@(~(Just ss)) } = findTyTy tyenv a
-basicNode tyenv a [] = do tellTags a ; return . Just $ (f_RAWWHAT (constant $ enum (nodeTagName a)))
+basicNode tyenv a [] | not (tagIsSuspFunction a) = do tellTags a ; return . Just $ (f_RAWWHAT (constant $ enum (nodeTagName a)))