[svn:parrot] r39274 - trunk/src/pmc

bacek at svn.parrot.org bacek at svn.parrot.org
Sat May 30 15:52:27 UTC 2009


Author: bacek
Date: Sat May 30 15:52:26 2009
New Revision: 39274
URL: https://trac.parrot.org/parrot/changeset/39274

Log:
[pmc] Reuse dest if possible in BigInt ops.

Modified:
   trunk/src/pmc/bigint.pmc

Modified: trunk/src/pmc/bigint.pmc
==============================================================================
--- trunk/src/pmc/bigint.pmc	Sat May 30 15:52:05 2009	(r39273)
+++ trunk/src/pmc/bigint.pmc	Sat May 30 15:52:26 2009	(r39274)
@@ -837,14 +837,14 @@
     }
 
     MULTI PMC *add(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_add_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *add(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -859,7 +859,7 @@
     }
 
     VTABLE PMC *add_int(INTVAL value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_add_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -893,20 +893,14 @@
 
 
     MULTI PMC *subtract(BigInt value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_sub_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *subtract(Integer value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -921,10 +915,7 @@
     }
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_sub_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -958,14 +949,14 @@
 
 
     MULTI PMC *multiply(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_mul_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *multiply(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -980,7 +971,7 @@
     }
 
     VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_mul_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1011,10 +1002,7 @@
     }
 
     VTABLE PMC *pow_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_pow_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1023,7 +1011,7 @@
     MULTI PMC *pow(PMC *value, PMC *dest) {
         /* XXX only Integer RHS currently */
         const INTVAL r = VTABLE_get_integer(INTERP, value);
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_pow_bigint_int(INTERP, SELF, r, dest);
         return dest;
@@ -1031,10 +1019,7 @@
 
     MULTI PMC *divide(BigInt value, PMC *dest) {
         BIGINT *bi;
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_div_bigint(INTERP, SELF, value, dest);
 #if 0
@@ -1050,10 +1035,7 @@
     }
 
     MULTI PMC *divide(Integer value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1068,10 +1050,7 @@
     }
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_div_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1095,14 +1074,14 @@
     }
 
     MULTI PMC *floor_divide(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_fdiv_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *floor_divide(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1117,10 +1096,7 @@
     }
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_fdiv_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1146,20 +1122,14 @@
     }
 
     MULTI PMC *modulus(BigInt value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_mod_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *modulus(Integer value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1229,7 +1199,7 @@
 */
 
     VTABLE PMC *absolute(PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_abs(INTERP, SELF, dest);
         return dest;
@@ -1253,7 +1223,7 @@
 */
 
     VTABLE PMC *neg(PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_neg(INTERP, SELF, dest);
         return dest;
@@ -1282,10 +1252,7 @@
 */
 
     MULTI PMC *bitwise_shl(BigInt value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF,
                                       VTABLE_get_integer(INTERP, value),
@@ -1294,10 +1261,7 @@
     }
 
     MULTI PMC *bitwise_shl(Integer value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF,
                 VTABLE_get_integer(interp, value), dest);
@@ -1312,10 +1276,7 @@
     }
 
     VTABLE PMC *bitwise_shl_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1363,10 +1324,7 @@
 */
 
     MULTI PMC *bitwise_shr(BigInt value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF,
                                       VTABLE_get_integer(INTERP, value),
@@ -1375,10 +1333,7 @@
     }
 
     MULTI PMC *bitwise_shr(Integer value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, value, dest);
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF,
                 VTABLE_get_integer(interp, value), dest);
@@ -1394,10 +1349,7 @@
     }
 
     VTABLE PMC *bitwise_shr_int(INTVAL value, PMC *dest) {
-        if (!PMC_IS_NULL(dest))
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = Parrot_pmc_try_reuse(INTERP, SELF, NULL, dest);
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF, value, dest);
         return dest;


More information about the parrot-commits mailing list