I think I've figured out what's happening here. Stepping through the code with gdb shows that the first subclassing works fine, but the second blows up in Parrot_single_subclass at line 233:
temp_pmc = VTABLE_clone(interpreter, VTABLE_get_pmc_keyed_int(interpreter, (PMC *)PMC_data(base_class), PCD_ALL_PARENTS));
This fetches the parent class's parent array, which is an Array PMC, and which at this point contains a single entry -- a ParrotClass PMC corresponding to class "A".
We then call the clone method of this array, in order to copy it to temp_pmc.
This in turn calls list_clone in order to copy its data, and since our list is comprised of a single PMC, list_clone calls its clone vtable method.
Ah, I was thinking it was a single-level clone of data--basically a shallow copy. I'll go fix.
--
Dan
--------------------------------------"it's like this"------------------- Dan Sugalski even samurai [EMAIL PROTECTED] have teddy bears and even teddy bears get drunk