At 04:55 PM 2/17/2001 +0000, Simon Cozens wrote:
>On Mon, Feb 05, 2001 at 05:14:44PM -0500, Dan Sugalski wrote:
> > =item new
> >
> > void new(PMC[, key]);
> >
> > Creates a new variable of the appropriate type out of the passed PMC,
> > destroying the current contents if there are any. This is a class
> > function.
>
>Can I suggest this becomes
> PMC new(PMC[, key]);
>
>It gets really hard to get things started otherwise:
Well, the idea was that the passed in PMC is either reusable, can be
trashed, or is an aggregate of some point and we may autoviv the element
corresponding to the key.
Dunno if that was as well thought out as it ought to be, but it's not
unreasonable to expect that the passed in PMC is trashable and has been
previously cleaned up if it needed it.
> PMC mypmc;
> (sviv_vtable.new)(mypmc);
> printf("mypmc's class is %s\n", (mypmc->vtbl->name)(mypmc));
>
>If PMC is a pointer to a structure, "new" will need to allocate memory for a
>new structure, and hence the value of mypmc will have to change.
Nope. PMC structures will be parcelled out from arenas and not malloc'd,
and they won't be freed and re-malloced much. If we're passing in a PMC
pointer, we won't be reallocating the memory pointed to--rather we'll be
reusing it.
>The structure
>
> struct _pmc {
> VTABLE* vtbl;
> void* private_data;
> };
>
>makes it nice and easy to morph one PMC class into another;
We talked a few months ago about the structure of the base PMC piece. IIRC
the general consensus is we need a flags field, a field for the garbage
collector, and were going to tack on an integer and float fields as well
for speed.
Dan
--------------------------------------"it's like this"-------------------
Dan Sugalski even samurai
[EMAIL PROTECTED] have teddy bears and even
teddy bears get drunk