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

Reply via email to