[make built in integral cast go to primitive C cast rather than intermediate primPrim state
John Meacham <john@repetae.net>**20060406033246] hunk ./E/E.hs 330
-p_integralCast = primPrim "integralCast"
hunk ./E/Values.hs 191
-prim_integralCast e t = EPrim p_integralCast [e] t
-from_integralCast (EPrim (APrim (PrimPrim "integralCast") _) [e] t) = return (e,t)
-from_integralCast _ = fail "Not integralCast primitive"
hunk ./Grin/FromE.hs 377
+        other -> fail $ "ce unknown primitive: " ++ show other
hunk ./data/PrimitiveOperators-in.hs 19
+create_integralCast c1 t1 c2 t2 e t = eCase e [Alt (LitCons c1 [tvra] te) cc] Unknown  where
+    te = getType e
+    ELit (LitCons n1 [] _) = t1
+    ELit (LitCons n2 [] _) = t2
+    tvra =  tVr 4 t1
+    tvrb =  tVr 6 t2
+    cc = if n1 == n2 then ELit (LitCons c2 [EVar tvra] t) else
+        eStrictLet  tvrb (EPrim (APrim (CCast (show n1) (show n2)) mempty) [EVar tvra] t2)  (ELit (LitCons c2 [EVar tvrb] t))
+
+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
+
hunk ./data/PrimitiveOperators-in.hs 170
+
+v2_Int = tVr 2 tInt
+v2_Integer = tVr 2 tInteger
+v2 t = tVr 2 t
+
+v0 t = tVr 0 t
+
+{-# NOINLINE constantMethods #-}
+{-# NOINLINE primitiveInsts #-}
+{-# NOINLINE allCTypes #-}
+{-# NOINLINE ctypeMap #-}
+
hunk ./utils/op_process.prl 80
-    $n = "rt_" . $n;
+    $n = "r_" . $n;
hunk ./utils/op_process.prl 132
-    push @cmeth, "($foreign_storable, toInstName \"Foreign.Storable.sizeOf.$d->[0]\", ELam (tVr 0 $t) \$ " . const("sizeof($d->[1])","tInt") . ")";
+    push @cmeth, "($foreign_storable, toInstName \"Foreign.Storable.sizeOf.$d->[0]\", ELam (v0 $t) \$ " . const("sizeof($d->[1])","tInt") . ")";
hunk ./utils/op_process.prl 137
-    my $ivar = "(tVr 2 tInt)";
-    my $ivart = "(tVr 2 tInteger)";
-    my $tvar = "(tVr 2 $t)";
+    my $ivar = "v2_Int";
+    my $ivart = "v2_Integer";
+    my $tvar = "(v2 $t)";
+    my $rtype = rtype($d->[1]);
hunk ./utils/op_process.prl 145
-        push @cmeth, "($c_num, toInstName \"Prelude.fromInt.$d->[0]\", ELam $ivar (prim_integralCast (EVar $ivar) $t))";
-        push @cmeth, "($c_num, toInstName \"Prelude.toInt.$d->[0]\", ELam $tvar (prim_integralCast (EVar $tvar) tInt))" if $d->[2] =~ /int/ ;
+        push @cmeth, "($c_num, toInstName \"Prelude.fromInt.$d->[0]\", ELam $ivar (create_integralCast_fromInt $cncons $rtype (EVar $ivar) $t))";
+        push @cmeth, "($c_num, toInstName \"Prelude.toInt.$d->[0]\", ELam $tvar (create_integralCast_toInt $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;
hunk ./utils/op_process.prl 152
-        push @cmeth, "($c_num, toInstName \"Prelude.fromInteger.$d->[0]\", ELam $ivart (prim_integralCast (EVar $ivart) $t))";
-        push @cmeth, "($c_num, toInstName \"Prelude.toInteger.$d->[0]\", ELam $tvar (prim_integralCast (EVar $tvar) tInteger))" if $d->[2] =~ /int/ ;
+        push @cmeth, "($c_num, toInstName \"Prelude.fromInteger.$d->[0]\", ELam $ivar (create_integralCast_fromInteger $cncons $rtype (EVar $ivar) $t))";
+        push @cmeth, "($c_num, toInstName \"Prelude.toInteger.$d->[0]\", ELam $tvar (create_integralCast_toInteger $cncons $rtype (EVar $tvar)))" if $d->[2] =~ /int/ ;