Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

base scalar PMC semantics

4 views
Skip to first unread message

Leopold Toetsch

unread,
Dec 8, 2004, 6:57:05 AM12/8/04
to Perl 6 Internals
First, there was some dicussion not too long ago:
Subject: Numeric semantics for base pmcs [1]
Subject: Last bits of the basic math semantics

The current Integer PMC doesn't yet follow the results of these threads.

Basic behavior of that type is Perl6 or Python semantics, which is: it's
basically an arbitrary precision integer, like Python's int/long type
after merging. To achieve this functionality it silently morphs results
to a Big type capable of doing the arbitrary precision.

The summary in [1] also mentions type coercion:

10) The destination PMC is responsible for final conversion of the
inbound value

E.g. when we have

MMD add(PyInt + PyInt)

a) no overflow: VTABLE_set_integer_native(interp, dest, the_sum)

the set_integer_native vtable is responsibe to convert the C<dest> PMC
into a PyInt. For Perl types it'll be PerlInt. And base PMCs use
Integer. Following strictly this scheme does allow the inheritance of
all common functionality.

b) overflow:
if (self == dest) {
VTABLE_set_bignum(interp, self, self.intval)
// redispatch
}
else {
VTABLE_set_bignum(interp, dest, self.intval)
temp = new dest.type
VTABLE_set_bignum(interp, temp, self.intval)
// redispatch

or a similar scheme.

Float and String needs the same refactoring, but that's simpler.

To use that functionality we need a better notion for multiple
inheritance inside PMCs.

PerlInt isa (PerlAny, Integer)
PyInt isa (PyObject, Integer)

Comments?

leo

0 new messages