[svn:parrot] r39250 - trunk/src/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat May 30 01:15:29 UTC 2009
Author: bacek
Date: Sat May 30 01:15:28 2009
New Revision: 39250
URL: https://trac.parrot.org/parrot/changeset/39250
Log:
[pmc] Cleanup BigNum's float handling a bit.
Modified:
trunk/src/pmc/bignum.pmc
Modified: trunk/src/pmc/bignum.pmc
==============================================================================
--- trunk/src/pmc/bignum.pmc Sat May 30 01:15:09 2009 (r39249)
+++ trunk/src/pmc/bignum.pmc Sat May 30 01:15:28 2009 (r39250)
@@ -1133,8 +1133,12 @@
bignum_add_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_add(FLOATVAL value) {
- bignum_add_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_add(Integer value) {
+ bignum_add_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+ }
+
+ MULTI void i_add(Float value) {
+ bignum_add_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_add(DEFAULT value) {
@@ -1149,9 +1153,7 @@
}
VTABLE void i_add_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_add_float' for FLOATVAL");
+ bignum_add_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1203,8 +1205,12 @@
bignum_sub_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_subtract(FLOATVAL value) {
- bignum_sub_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_subtract(Integer value) {
+ bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+ }
+
+ MULTI void i_subtract(Float value) {
+ bignum_sub_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_subtract(DEFAULT value) {
@@ -1219,9 +1225,7 @@
}
VTABLE void i_subtract_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_subtract_float' for FLOATVAL");
+ bignum_sub_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1264,8 +1268,8 @@
bignum_mul_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_multiply(FLOATVAL value) {
- bignum_mul_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_multiply(Float value) {
+ bignum_mul_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_multiply(Integer value) {
@@ -1284,9 +1288,7 @@
}
VTABLE void i_multiply_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_multiply_float' for FLOATVAL");
+ bignum_mul_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1377,6 +1379,9 @@
MULTI void i_divide(Integer value) {
bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
}
+ MULTI void i_divide(Float value) {
+ bignum_div_bignum_float(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,
More information about the parrot-commits
mailing list