commit f27df51b02fe68171c9671832f0aa921e05cae63 Author: Mark Glines Date: Wed May 27 08:29:10 2009 -0700 [pmc] Try to make integer.i_add handle subclasses a bit better. diff --git a/src/pmc/integer.pmc b/src/pmc/integer.pmc index 4a166e7..31a26ec 100644 --- a/src/pmc/integer.pmc +++ b/src/pmc/integer.pmc @@ -428,21 +428,16 @@ Adds C to C inplace. 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; - - case enum_class_Complex: - pmc_reuse(INTERP, SELF, enum_class_Complex, 0); - VTABLE_set_number_native(INTERP, SELF, - SELF.get_integer() + VTABLE_get_number(INTERP, value)); - break; - - default: - VTABLE_set_number_native(INTERP, SELF, - SELF.get_integer() + VTABLE_get_number(INTERP, value)); - break; + if(VTABLE_isa(interp, value, CONST_STRING(interp, "Integer"))) { + STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value)); + } else + if(VTABLE_isa(interp, value, CONST_STRING(interp, "Complex"))) { + pmc_reuse(INTERP, SELF, enum_class_Complex, 0); + VTABLE_set_number_native(INTERP, SELF, + SELF.get_integer() + VTABLE_get_number(INTERP, value)); + } else { + VTABLE_set_number_native(INTERP, SELF, + SELF.get_integer() + VTABLE_get_number(INTERP, value)); } }