<aol>
On Tue, Feb 12, 2002 at 11:28:26PM +0000, Simon Glover wrote:
> 
>  Currently the add, subtract, multiply and divide methods in perlnum.pmc
>  are all coded along the lines of:
> 
>      void add (PMC * value, PMC* dest) {
>         if(value->vtable == &Parrot_base_vtables[enum_class_PerlInt]) {
> *            dest->vtable = &Parrot_base_vtables[enum_class_PerlNum];
> *           dest->vtable->set_number_native(INTERP, dest, 
> *                SELF->cache.num_val +
> *                value->vtable->get_number(INTERP, value)
> *            );
>         }
>         else if(value->vtable == &Parrot_base_vtables[enum_class_PerlNum]){
> *            dest->vtable = &Parrot_base_vtables[enum_class_PerlNum];
> *            dest->vtable->set_number_native(INTERP, dest, 
> *                SELF->cache.num_val +
> *                value->vtable->get_number(INTERP, value)
> *            );
>         }
> 
>    etc.
> 
>  In other words, we check the type of the value PMC, but then proceed to 
>  execute exactly the same code (marked with *'s) in each case. Has this been 
>  done for a reason, or could these functions be safely simplified?
</aol> 

[except that now it seems Parrot_PerlNum_add has a 3 way PerlInt, PerlNum,
PerlString]

It's not obvious to me why there are 3 there, only 2 in -,*,/
Or why there isn't just 1 sort of code, as Simon suggests.

Nicholas Clark
-- 
EMCFT http://www.ccl4.org/~nick/CV.html

Reply via email to