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

Reply via email to