On 4/3/07, Jonathan Worthington <[EMAIL PROTECTED]> wrote:
There is a compromise - make them all vtable methods, write a BaseClass PMC and inherit Class from it. BaseClass implements all of the vtable variants of the method, and Class can then provide a sane interface. HLL implementers who need their own class PMC but can implement it in terms of the BaseClass semantics can then derive from BaseClass. (Oh, and I think BaseClass is totally the wrong name, but I know Allison will find a good name too... ;-))
I've asked for something pretty darn close to what you've suggested (see #41619), but you've explained it a lot better than I ever could. What I think you were saying: Default | BaseClass (default Parrot implementation) / \ Class UserClass (PCCMETHOD interface to BaseClass) (modified version of BaseClass) Please correct me where I'm wrong :) Instead of having a BaseClass, which I think would be an unnecessary layer of indirection, PMCs implementing class behavior should be able to inherit from either: 1. Default: Throw an exception if an unimplemented vtable method is called on the PMC. 2. ParrotClass: All semantics are already taken care of, and you need only change the behavior where necessary. The choice of which to inherit from is left up to the PMC implementor. What I'm saying: Default / \ UserClass ParrotClass (default Parrot implementation) | UserClass We could also add "class" to the list of do-able interfaces available to PMCs in tools/build/pmc2c.pl. -- Alek Storm