id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc	lang	patch	platform
713	Too little MMD? i_add doesn't know about subclasses.	coke		"partcl has a bug (http://code.google.com/p/partcl/issues/detail?id=81) where TclInt+=a TclInt is now generating a TclFloat (instead of a TclInt.)

I suspect that this is a result of the change to src/pmc/integer.pmc which change i_add from a MULTI to a vtable-with-a-switch.

Originally:

{{{
-    MULTI void i_add(Integer value) {
-        STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
-    }
}}}

This is now:

{{{
+    VTABLE void i_add(PMC *value) {
+        const INTVAL type = value->vtable->base_type;
+
+        switch (type) {
+            case enum_class_Integer:
+                STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
+                break;
}}}

But since subclasses of Integer are not enum_class_Integer, subclasses seem to now fall through to:

{{{
+            default:
+                VTABLE_set_number_native(INTERP, SELF,
+                        SELF.get_integer() + VTABLE_get_number(INTERP, value));
+                break;
}}}

This is, from partcl's standpoint, a substantial feature change. This should probably be reverted, tests added, and if we want to go forward with this change, we can do it post 1.4.

Alternatively, we can update the switch statement to be functionally equivalent to the old multi. (and still add tests to verify that subclasses continue to work as expected.)

''Apologies for not testing this sooner; partcl has been broken for other reasons, just got back to a point where this could be tested.''"	bug	closed	major		core	trunk	high	fixed	tcl blocker				
