[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