Author: mdiep
Date: Sat Aug 13 19:30:45 2005
New Revision: 8950
Modified:
trunk/languages/tcl/classes/tclint.pmc
trunk/languages/tcl/t/cmd_expr.t
Log:
Use MMD to make float division work with TclFloats
Modified: trunk/languages/tcl/classes/tclint.pmc
==============================================================================
--- trunk/languages/tcl/classes/tclint.pmc (original)
+++ trunk/languages/tcl/classes/tclint.pmc Sat Aug 13 19:30:45 2005
@@ -18,17 +18,30 @@ pmclass TclInt extends TclObject extends
* TclInt shouldn't automatically promote division to float.
*/
PMC* divide (PMC* value, PMC* dest) {
- INTVAL n = PMC_int_val(SELF);
- INTVAL d = PMC_int_val(value);
+ MMD_TclInt: {
+ INTVAL n = PMC_int_val(SELF);
+ INTVAL d = PMC_int_val(value);
- if (d == 0)
- real_exception(INTERP, NULL, E_ZeroDivisionError, "divide by zero");
+ if (d == 0)
+ real_exception(INTERP, NULL, E_ZeroDivisionError, "divide by
zero");
- if (!dest)
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ if (!dest)
+ dest = pmc_new(INTERP, SELF->vtable->base_type);
- PMC_int_val(dest) = n / d;
- return dest;
+ PMC_int_val(dest) = n / d;
+ return dest;
+ }
+ MMD_DEFAULT: {
+ FLOATVAL d = VTABLE_get_number(INTERP, value);
+
+ if (d == 0.0)
+ real_exception(INTERP, NULL, E_ZeroDivisionError, "float division
by zero");
+
+ if (!dest)
+ dest = pmc_new(INTERP, SELF->vtable->base_type);
+ VTABLE_set_number_native(INTERP, dest, DYNSELF.get_number() / d);
+ return dest;
+ }
}
}
Modified: trunk/languages/tcl/t/cmd_expr.t
==============================================================================
--- trunk/languages/tcl/t/cmd_expr.t (original)
+++ trunk/languages/tcl/t/cmd_expr.t Sat Aug 13 19:30:45 2005
@@ -262,15 +262,15 @@ TCL
1
OUT
-TODO: {
-local $TODO = "bugs";
-
language_output_is("tcl",<<'TCL',<<'OUT',"float division");
puts [expr 1 / 3.0]
TCL
0.333333333333
OUT
+TODO: {
+local $TODO = "bugs";
+
language_output_is("tcl",<<'TCL',<<'OUT',"nested expr (braces)");
puts [expr {2 * [expr {2 - 1}]}];
TCL