[svn:parrot] r39404 - branches/pmc_i_ops/src/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Fri Jun 5 13:04:09 UTC 2009
Author: bacek
Date: Fri Jun 5 13:04:07 2009
New Revision: 39404
URL: https://trac.parrot.org/parrot/changeset/39404
Log:
[pmc] Reimplement most of BigInt math ops in terms of i_ops
Modified:
branches/pmc_i_ops/src/pmc/bigint.pmc
Modified: branches/pmc_i_ops/src/pmc/bigint.pmc
==============================================================================
--- branches/pmc_i_ops/src/pmc/bigint.pmc Fri Jun 5 13:03:40 2009 (r39403)
+++ branches/pmc_i_ops/src/pmc/bigint.pmc Fri Jun 5 13:04:07 2009 (r39404)
@@ -834,26 +834,10 @@
bigint_sub_bigint_int(INTERP, SELF, 1, SELF);
}
- MULTI PMC *add(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_add_bigint(INTERP, SELF, value, dest);
- return dest;
- }
-
- MULTI PMC *add(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *add(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'add' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_add(INTERP, dest, value);
+ return dest;
}
VTABLE PMC *add_int(INTVAL value, PMC *dest) {
@@ -890,26 +874,10 @@
}
- MULTI PMC *subtract(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_sub_bigint(INTERP, SELF, value, dest);
- return dest;
- }
-
- MULTI PMC *subtract(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *subtract(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'subtract' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_subtract(INTERP, dest, value);
+ return dest;
}
VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
@@ -946,26 +914,10 @@
}
- MULTI PMC *multiply(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_mul_bigint(INTERP, SELF, value, dest);
- return dest;
- }
-
- MULTI PMC *multiply(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *multiply(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'multiply' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_multiply(INTERP, dest, value);
+ return dest;
}
VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
@@ -978,9 +930,11 @@
MULTI void i_multiply(BigInt value) {
bigint_mul_bigint(INTERP, SELF, value, SELF);
}
+
MULTI void i_multiply(Integer value) {
bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
}
+
MULTI void i_multiply(DEFAULT value) {
Parrot_ex_throw_from_c_args(INTERP, NULL,
EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
@@ -1032,19 +986,10 @@
return dest;
}
- MULTI PMC *divide(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *divide(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'divide' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_divide(INTERP, dest, value);
+ return dest;
}
VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
@@ -1057,9 +1002,11 @@
MULTI void i_divide(BigInt value) {
bigint_div_bigint(INTERP, SELF, value, SELF);
}
+
MULTI void i_divide(Integer value) {
bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
}
+
MULTI void i_divide(DEFAULT value) {
Parrot_ex_throw_from_c_args(INTERP, NULL,
EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
@@ -1071,26 +1018,10 @@
bigint_div_bigint_int(INTERP, SELF, value, SELF);
}
- MULTI PMC *floor_divide(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_fdiv_bigint(INTERP, SELF, value, dest);
- return dest;
- }
-
- MULTI PMC *floor_divide(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *floor_divide(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'floor_divide' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_floor_divide(INTERP, dest, value);
+ return dest;
}
VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
@@ -1119,34 +1050,20 @@
bigint_fdiv_bigint_int(INTERP, SELF, value, SELF);
}
- MULTI PMC *modulus(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_mod_bigint(INTERP, SELF, value, dest);
- return dest;
- }
-
- MULTI PMC *modulus(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
- bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
- return dest;
- }
-
MULTI PMC *modulus(DEFAULT value, PMC *dest) {
- UNUSED(dest)
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigInt: no multiple dispatch variant 'modulus' for %Ss",
- VTABLE_name(interp, value));
+ dest = SELF.clone();
+ VTABLE_i_modulus(INTERP, dest, value);
+ return dest;
}
MULTI void i_modulus(BigInt value) {
bigint_mod_bigint(INTERP, SELF, value, SELF);
}
+
MULTI void i_modulus(Integer value) {
bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
}
+
MULTI void i_modulus(DEFAULT value) {
Parrot_ex_throw_from_c_args(INTERP, NULL,
EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
More information about the parrot-commits
mailing list