[svn:parrot] r39406 - branches/pmc_i_ops/src/pmc

bacek at svn.parrot.org bacek at svn.parrot.org
Fri Jun 5 13:44:32 UTC 2009


Author: bacek
Date: Fri Jun  5 13:44:31 2009
New Revision: 39406
URL: https://trac.parrot.org/parrot/changeset/39406

Log:
[pmc] Scalar ops reimplemented in terms of i_ops.

Modified:
   branches/pmc_i_ops/src/pmc/scalar.pmc

Modified: branches/pmc_i_ops/src/pmc/scalar.pmc
==============================================================================
--- branches/pmc_i_ops/src/pmc/scalar.pmc	Fri Jun  5 13:04:32 2009	(r39405)
+++ branches/pmc_i_ops/src/pmc/scalar.pmc	Fri Jun  5 13:44:31 2009	(r39406)
@@ -171,23 +171,9 @@
 
 */
 
-    MULTI PMC *add(Complex value, PMC *dest) {
-        const FLOATVAL a = SELF.get_number();
-
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
-
-        VTABLE_set_number_native(INTERP, dest,
-                a + VTABLE_get_number_keyed_int(INTERP, value, 0));
-        VTABLE_set_number_keyed_int(INTERP, dest, 1,
-                VTABLE_get_number_keyed_int(INTERP, value, 1));
-        return dest;
-    }
-
     MULTI PMC *add(DEFAULT value, PMC *dest) {
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest,
-                SELF.get_number() + VTABLE_get_number(INTERP, value));
+        dest = SELF.clone();
+        VTABLE_i_add(INTERP, dest, value);
         return dest;
     }
 
@@ -255,21 +241,9 @@
 
 */
 
-    MULTI PMC *subtract(Complex value, PMC *dest) {
-        const FLOATVAL a = SELF.get_number();
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
-
-        VTABLE_set_number_native(INTERP, dest,
-                a - VTABLE_get_number_keyed_int(INTERP, value, 0));
-        VTABLE_set_number_keyed_int(INTERP, dest, 1,
-                -VTABLE_get_number_keyed_int(INTERP, value, 1));
-        return dest;
-    }
-
     MULTI PMC *subtract(DEFAULT value, PMC *dest) {
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-        VTABLE_set_number_native(INTERP, dest,
-                SELF.get_number() - VTABLE_get_number(INTERP, value));
+        dest = SELF.clone();
+        VTABLE_i_subtract(INTERP, dest, value);
         return dest;
     }
 
@@ -328,16 +302,9 @@
 
 */
 
-    MULTI PMC *multiply(Complex value, PMC *dest) {
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_INTERNAL_NOT_IMPLEMENTED, "TODO mul<Float, Complex>");
-    }
-
     MULTI PMC *multiply(DEFAULT value, PMC *dest) {
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest,
-            SELF.get_number() * VTABLE_get_number(INTERP, value));
+        dest = SELF.clone();
+        VTABLE_i_multiply(INTERP, dest, value);
         return dest;
     }
 
@@ -399,16 +366,9 @@
 
 */
 
-    MULTI PMC *divide(PMC *value, PMC *dest) {
-        const FLOATVAL d = VTABLE_get_number(INTERP, value);
-
-        if (FLOAT_IS_ZERO(d))
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
-                "float division by zero");
-
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest, SELF.get_number() / d);
+    MULTI PMC *divide(DEFAULT value, PMC *dest) {
+        dest = SELF.clone();
+        VTABLE_i_divide(INTERP, dest, value);
         return dest;
     }
 
@@ -482,17 +442,9 @@
 
 */
 
-    MULTI PMC *floor_divide(PMC *value, PMC *dest) {
-        FLOATVAL d = VTABLE_get_number(INTERP, value);
-
-        if (FLOAT_IS_ZERO(d))
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
-                "float division by zero");
-
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-        d    = floor(SELF.get_number() / d);
-
-        VTABLE_set_integer_native(INTERP, dest, (INTVAL)d);
+    MULTI PMC *floor_divide(DEFAULT value, PMC *dest) {
+        dest = SELF.clone();
+        VTABLE_i_floor_divide(INTERP, dest, value);
         return dest;
     }
 
@@ -572,17 +524,9 @@
 
 */
 
-    MULTI PMC *modulus(PMC *value, PMC *dest) {
-        const FLOATVAL d = VTABLE_get_number(INTERP, value);
-
-        if (FLOAT_IS_ZERO(d))
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
-                "float modulus by zero");
-
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest,
-                floatval_mod(SELF.get_number(), d));
+    MULTI PMC *modulus(DEFAULT value, PMC *dest) {
+        dest = SELF.clone();
+        VTABLE_i_modulus(INTERP, dest, value);
         return dest;
     }
 
@@ -662,12 +606,9 @@
 
 */
 
-    MULTI PMC *pow(PMC *value, PMC *dest) {
-        const FLOATVAL d = VTABLE_get_number(INTERP, value);
-
-        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_number_native(INTERP, dest, pow(SELF.get_number(), d));
+    MULTI PMC *pow(DEFAULT value, PMC *dest) {
+        dest = SELF.clone();
+        VTABLE_i_pow(INTERP, dest, value);
         return dest;
     }
 


More information about the parrot-commits mailing list