[follow aliases to find basic types when converting to grin
John Meacham <john@repetae.net>**20080324070256] hunk ./Grin/FromE.hs 48
+import Cmm.Op(ToCmmTy(..))
hunk ./Grin/FromE.hs 115
+instance Op.ToCmmTy Name where
+    toCmmTy n = do
+        RawType <- return $ nameType n
+        toCmmTy $ show n
+
+
+
+instance Op.ToCmmTy E where
+    toCmmTy (ELit LitCons { litName = tname, litArgs = [], litAliasFor = af, litType = eh  }) | eh == eHash = toCmmTy tname `mplus` (af >>= toCmmTy)
+    toCmmTy _ = Nothing
+
+
hunk ./Grin/FromE.hs 136
-rawNameToTy :: Monad m => Name -> m Ty
-rawNameToTy n | RawType <- nameType n = return $ stringNameToTy (show n)
-              | otherwise = fail "rawNameToTy: not primitive type"
hunk ./Grin/FromE.hs 142
---    toty (ELit LitCons { litName = n, litArgs = es, litType = ty }) |  ty == eHash, TypeConstructor <- nameType n, Just _ <- fromUnboxedNameTuple n = (tuple (keepIts $ map (toType (TyPtr TyNode) ) es))
hunk ./Grin/FromE.hs 143
-    --toty (ELit LitCons { litName = n, litArgs = [], litType = ty }) |  ty == eHash, RawType <- nameType n = (Ty $ toAtom (show n))
-    toty (ELit LitCons { litName = n, litArgs = [], litType = ty }) |  ty == eHash, Just t <- rawNameToTy n = t
+    toty e | Just t <- toCmmTy e = TyPrim t
hunk ./Grin/FromE.hs 153
-    toty (ELit LitCons { litName = n, litArgs = [], litType = ty }) |  ty == eHash, Just t <- rawNameToTy n = [t]
+    toty e | Just t <- toCmmTy e = [TyPrim t]
hunk ./Grin/FromE.hs 465
-            Func False _ as r | Just _ <- fromRawType ty ->  do
+            Func False _ as r | Just _ <- toCmmTy ty ->  do
hunk ./Grin/FromE.hs 469
-            IFunc False _ _ | Just _ <- fromRawType ty ->
+            IFunc False _ _ | Just _ <- toCmmTy ty ->
hunk ./Grin/FromE.hs 496
-    ce ECase { eCaseScrutinee = e, eCaseBind = b, eCaseAlts = as, eCaseDefault = d } | (ELit LitCons { litName = n, litArgs = [] }) <- followAliases (dataTable cenv) (getType e), Just ty <- rawNameToTy n = do
-            v <- if tvrIdent b == 0 then newPrimVar ty else return $ toVal b
+    ce ECase { eCaseScrutinee = e, eCaseBind = b, eCaseAlts = as, eCaseDefault = d } |  Just ty <- toCmmTy (getType e :: E) = do
+            v <- if tvrIdent b == 0 then newPrimVar $ TyPrim ty else return $ toVal b
hunk ./Grin/FromE.hs 544
-    cp'' (Alt (LitInt i (ELit LitCons { litName = nn, litArgs = [] })) e) = do
+    cp'' (Alt (LitInt i t) e) | Just ty <- toCmmTy t = do
hunk ./Grin/FromE.hs 546
-        ty <- rawNameToTy nn
-        return ([Lit i ty] :-> x)
+        return ([Lit i $ TyPrim ty] :-> x)
hunk ./Grin/FromE.hs 642
-            let g (t,e@ELam {}) = do
+            let g (t,e@(~ELam {})) = do
hunk ./Grin/FromE.hs 647
-                g' (t,e@ELam {}) =
+                g' (t,e@(~ELam {})) =
hunk ./Grin/FromE.hs 732
-fromRawType (ELit LitCons { litName = tname, litArgs = [] }) | Just r <- rawNameToTy tname = return r
-fromRawType _ = fail "not a raw type"
hunk ./Grin/FromE.hs 736
-literal (ELit (LitInt i ty)) | Just ptype <- fromRawType ty = return $ [Lit i ptype]
-literal (EPrim aprim@(APrim p _) xs ty) | Just ptype <- fromRawType ty, primIsConstant p = do
+literal (ELit (LitInt i ty)) | Just ptype <- toCmmTy ty = return $ [Lit i (TyPrim ptype)]
+literal (ELit (LitInt i (ELit (LitCons { litArgs = [], litAliasFor = Just af }))))  = literal $ ELit (LitInt i af)
+literal (EPrim aprim@(APrim p _) xs ty) | Just ptype <- toCmmTy ty, primIsConstant p = do
hunk ./Grin/FromE.hs 740
-    return $ [ValPrim aprim (concat xs) ptype]
+    return $ [ValPrim aprim (concat xs) (TyPrim ptype)]