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