[get rid of 'CCast' primitive in favor of explicit c-- conversion primitives
John Meacham <john@repetae.net>**20070531030845] hunk ./C/FromGrin2.hs 167
-        CCast _ to -> return $ cast (opTyToC opty) x'
hunk ./C/FromGrin2.hs 530
-        CCast _ to -> return $ cast (opTyToC opty) x'
hunk ./C/FromGrin2.hs 546
-    | APrim (CCast _ to) _ <- primAPrim p, [a] <- vs = do
-        a' <- convertVal a
-        return $ cast (opTyToC (stringNameToTy to)) a'
hunk ./C/Prims.hs 47
-    | CCast {
-        primArgType :: ExtType,
-        primRetType :: ExtType
-        }   -- Cast from one basic type to another, possibly lossy.
hunk ./C/Prims.hs 77
-primIsCheap CCast {} = True
hunk ./C/Prims.hs 79
---primIsCheap Operator {} = True
hunk ./C/Prims.hs 92
-primIsConstant CCast {} = True
hunk ./C/Prims.hs 94
---primIsConstant Operator { primOp = op } | op `elem` safeOps = True  where
---    safeOps = ["+","-","*","==",">=","<=",">","<","&","|","^","~",">>","<<"]
hunk ./C/Prims.hs 102
-primEagerSafe CCast {} = True
hunk ./C/Prims.hs 104
---primEagerSafe Operator { primOp = op } | op `elem` safeOps = True  where
---    safeOps = ["+","-","*","==",">=","<=",">","<","&","|","^","~",">>","<<"]
hunk ./C/Prims.hs 134
---    pprint (Operator s xs r) = parens (text r) <> text s <> tupled (map text xs)
hunk ./C/Prims.hs 140
-    pprint (CCast _ t) = parens (text t)
hunk ./E/PrimOpt.hs 41
-integralCast - cast between primitive integral types with c semantics
hunk ./E/PrimOpt.hs 45
-create_integralCast dataTable e t = eCase e [Alt (litCons { litName = cna, litArgs = [tvra], litType = te }) cc] Unknown  where
-    te = getType e
-    (vara:varb:_) = newIds (freeVars (e,t))
-    tvra =  tVr vara sta
-    tvrb =  tVr varb stb
-    Just (cna,sta,ta) = lookupCType' dataTable te
-    Just (cnb,stb,tb) = lookupCType' dataTable t
-    cc = if ta == tb then ELit (litCons { litName = cnb, litArgs = [EVar tvra], litType = t }) else
-        eStrictLet  tvrb (EPrim (APrim (CCast ta tb) mempty) [EVar tvra] stb)  (ELit (litCons { litName = cnb, litArgs = [EVar tvrb], litType = t }))
hunk ./E/PrimOpt.hs 169
-    primopt "integralCast" es t = error $ "Invalid integralCast " ++ show (es,t)
hunk ./E/Show.hs 184
---        f (EPrim (APrim Operator { primOp = op } _) [x,y] t) = do
---            x <- showE x
---            y <- showE y
---            t <- showE t
---            return $ atom $ angles $ unparse $ atom ((unparse x) <+> text op <+> (unparse y)) `inhabit` t
-        f (EPrim (APrim CCast {} _) [x] t) = do
-            x <- showE x
-            t <- showE t
-            return $ atom $ parens (unparse t) <> unparse x
hunk ./E/ToHs.hs 357
-transE (EPrim (APrim cast@CCast { primArgType = at, primRetType = rt } _) [x] _) = mparen $ transE x >>= \x ->  castVal at rt x
+--transE (EPrim (APrim cast@CCast { primArgType = at, primRetType = rt } _) [x] _) = mparen $ transE x >>= \x ->  castVal at rt x
hunk ./Grin/FromE.hs 473
-            CCast from to -> do
-                let ptypeto' = stringNameToTy to
-                    ptypefrom' = stringNameToTy from
-                let p = prim { primName = toAtom ("(" ++ to ++ ")"), primType = ([ptypefrom'],ptypeto') }
-                return $  Prim p (args xs)
hunk ./Grin/Simplify.hs 84
-    gs (Prim Primitive { primAPrim = APrim CCast {} _, primType = (_,nty) } [Lit i _]) = do
-        lift $ tick stats at_OptSimplifyCastLit
-        return $ Return (Lit i nty)
+--    gs (Prim Primitive { primAPrim = APrim CCast {} _, primType = (_,nty) } [Lit i _]) = do
+--        lift $ tick stats at_OptSimplifyCastLit
+--        return $ Return (Lit i nty)
hunk ./data/PrimitiveOperators-in.hs 20
+nameToOpTy n = do RawType <- return $ nameType n; Op.readTy (show n)
+
hunk ./data/PrimitiveOperators-in.hs 24
-create_integralCast c1 t1 c2 t2 e t = eCase e [Alt (litCons { litName = c1, litArgs = [tvra], litType = te }) cc] Unknown  where
+create_integralCast conv c1 t1 c2 t2 e t = eCase e [Alt (litCons { litName = c1, litArgs = [tvra], litType = te }) cc] Unknown  where
hunk ./data/PrimitiveOperators-in.hs 28
+    Just n1' = nameToOpTy n1
+    Just n2' = nameToOpTy n2
hunk ./data/PrimitiveOperators-in.hs 33
-        eStrictLet  tvrb (EPrim (APrim (CCast (show n1) (show n2)) mempty) [EVar tvra] t2)  (ELit (litCons { litName = c2, litArgs = [EVar tvrb], litType = t }))
+        eStrictLet  tvrb (EPrim (APrim (Op (Op.ConvOp conv n1') n2') mempty) [EVar tvra] t2)  (ELit (litCons { litName = c2, litArgs = [EVar tvrb], litType = t }))
+
+create_integralCast_toInt c1 t1 e = create_integralCast Op.I2I c1 t1 dc_Int tIntzh e tInt
+create_integralCast_toInteger c1 t1 e = create_integralCast Op.Sx c1 t1 dc_Integer tIntegerzh e tInteger
+create_integralCast_fromInt c2 t2 e t = create_integralCast Op.I2I dc_Int tIntzh c2 t2 e t
+create_integralCast_fromInteger c2 t2 e t = create_integralCast Op.Lobits dc_Integer tIntegerzh c2 t2 e t
+
+create_uintegralCast_toInt c1 t1 e = create_integralCast Op.U2U c1 t1 dc_Int tIntzh e tInt
+create_uintegralCast_toInteger c1 t1 e = create_integralCast Op.Zx c1 t1 dc_Integer tIntegerzh e tInteger
+create_uintegralCast_fromInt c2 t2 e t = create_integralCast Op.U2U dc_Int tIntzh c2 t2 e t
+create_uintegralCast_fromInteger c2 t2 e t = create_integralCast Op.Lobits dc_Integer tIntegerzh c2 t2 e t
hunk ./data/PrimitiveOperators-in.hs 45
-create_integralCast_toInt c1 t1 e = create_integralCast c1 t1 dc_Int tIntzh e tInt
-create_integralCast_toInteger c1 t1 e = create_integralCast c1 t1 dc_Integer tIntegerzh e tInteger
-create_integralCast_fromInt c2 t2 e t = create_integralCast dc_Int tIntzh c2 t2 e t
-create_integralCast_fromInteger c2 t2 e t = create_integralCast dc_Integer tIntegerzh c2 t2 e t
+create_fintegralCast_fromInt c2 t2 e t = create_integralCast Op.I2F dc_Int tIntzh c2 t2 e t
+create_fintegralCast_fromInteger c2 t2 e t = create_integralCast Op.I2F dc_Integer tIntegerzh c2 t2 e t
hunk ./utils/op_process.prl 221
-        push @cmeth, "($c_num, toInstName \"Jhc.Num.fromInt.$d->[0]\", ELam $ivar (create_integralCast_fromInt $cncons $rtype (EVar $ivar) $t))";
-        push @cmeth, "($c_num, toInstName \"Jhc.Num.toInt.$d->[0]\", ELam $tvar (create_integralCast_toInt $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;
+        push @cmeth, "($c_num, toInstName \"Jhc.Num.fromInt.$d->[0]\", ELam $ivar (create_${vtype}integralCast_fromInt $cncons $rtype (EVar $ivar) $t))";
+        push @cmeth, "($c_num, toInstName \"Jhc.Num.toInt.$d->[0]\", ELam $tvar (create_${vtype}integralCast_toInt $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;
hunk ./utils/op_process.prl 228
-        push @cmeth, "($c_num, toInstName \"Jhc.Num.fromInteger.$d->[0]\", ELam $ivart (create_integralCast_fromInteger $cncons $rtype (EVar $ivart) $t))";
-        push @cmeth, "($c_num, toInstName \"Jhc.Num.toInteger.$d->[0]\", ELam $tvar (create_integralCast_toInteger $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;
+        push @cmeth, "($c_num, toInstName \"Jhc.Num.fromInteger.$d->[0]\", ELam $ivart (create_${vtype}integralCast_fromInteger $cncons $rtype (EVar $ivart) $t))";
+        push @cmeth, "($c_num, toInstName \"Jhc.Num.toInteger.$d->[0]\", ELam $tvar (create_${vtype}integralCast_toInteger $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;
hunk ./utils/op_process.prl 231
-    push @cmeth, "($c_num, toInstName \"Jhc.Num.abs.$d->[0]\", ELam $tvar (build_${vtype}abs \"$d->[1]\" $cncons (EVar $tvar)  ))" if $d->[2] !~ /char/ ;
-    push @cmeth, "($c_num, toInstName \"Jhc.Num.signum.$d->[0]\", ELam $tvar (build_${vtype}signum \"$d->[1]\" $cncons (EVar $tvar) ))" if $d->[2] !~ /char/ ;
+    push @cmeth, "($c_num, toInstName \"Jhc.Num.abs.$d->[0]\", ELam $tvar (build_${vtype}abs \"$d->[1]\" $cncons (EVar $tvar)  ))";
+    push @cmeth, "($c_num, toInstName \"Jhc.Num.signum.$d->[0]\", ELam $tvar (build_${vtype}signum \"$d->[1]\" $cncons (EVar $tvar) ))";