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