Simon Cozens: # On Fri, Dec 14, 2001 at 12:06:51AM -0800, Brent Dax wrote: # > ....or is there no 'set(p, p)' function? If there isn't, why not? # # There isn't. Nobody's written it. :) # # > Also, a question if/once it exists. I assume it'll make a copy. # # Yep. Although I'm not quite sure off-hand how to write it.
Well, except in the STRING case, that already happens. :^) I think we may need some sort of "basic type" thing. For example, a PerlInt says its basic type is Int (returns a 1), a PerlFloat says its basic type is Float (returns a 2), and a PerlString says its basic type is String (returns a 3). Returning 0 means that the LHS will have to be converted to the type of the RHS. Then we just call whatever function we need: AUTO_OP set(p, p) { INTVAL bt; bt=$1->vtable->basictype(interpreter, $1); switch(bt) { case 0: $1=pmc_new(interpreter, $2->vtable->type(interpreter, $2)); $1->vtable->set_value(interpreter, $1, $2->vtable->get_value(interpreter, $2)); break; case 1: $1->vtable->set_integer(interpreter, $1, $2->vtable->get_integer(interpreter, $2)); break; case 2: $1->vtable->set_float(interpreter, $1, $2->vtable->get_float(interpreter, $2)); break; case 3: $1->vtable->set_string(interpreter, $1, string_copy(interpreter, $2->vtable->get_string(interpreter, $2))); break; default: abort(); } } More likely, however, I'm missing something blindingly obvious that would simplify this immensely. :^) --Brent Dax [EMAIL PROTECTED] Configure pumpking for Perl 6 "Nothing important happened today." --George III of England's diary entry for 4-Jul-1776