On Sun, Feb 17, 2002 at 05:51:32PM +0000, Simon Cozens wrote:

> =head2 Aggregate and non-aggregate PMCs
> 
> We've already said that what separates the aggregate PMCs from the
> non-aggregates is their implementation of the C<_keyed> vtable methods.
> So it is Hereby Decreed that the default vtable which everyone inherits
> from defines the C<_keyed> forms to throw an exception. 

> So, if you have a PMC in a C<_keyed> method which you don't want to
> index, pass in C<NULL> instead of a real key. Code implementing these
> methods should understand C<PMC* foo, KEY* NULL> as meaning the entirety
> of C<foo> in some sense; this is trivial to understand if C<foo> is
> non-aggregate, and implementation-defined if C<foo> is aggregate.

On Mon, Feb 18, 2002 at 01:12:24PM -0500, Dan Sugalski wrote:
> Non-aggregates can (and must) implement the _keyed vtable method, 
> though it may well do nothing but throw an exception.
> 
> References, for example, will implement them, just passing the access 
> down to the referent.

So does this mean that (it is likely?) that the default _keyed vtable methods
on a non-aggregate will return self if KEY* is NULL, otherwise throw an
exception?

Or would this return of self mean that parrot is concealing a programming
error from whatever/whoever generated the bytecode?

[Don't ask me about the implications of what I just wrote - it just seemed
like NULL behaviour is something we could either define, or leave explicitly
undefined. Currently it's implicitly undefined]

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

Reply via email to