NAME ^

src/pmc/parrotclass.pmc - Parrot Class

DESCRIPTION ^

The structure of a parrot class is reasonably straightforward. The PMC's cached integer value is the number of attribute slots that an object of this type requires. The data pointer holds a pointer to an array of PMCs. That array has:

0, PCD_PARENTS

An array of immediate parents.

1, PCD_CLASS_NAME

The class name PMC.

2, PCD_ATTRIB_OFFS

A hash, keys are the class names, values are the offsets to their attributes.

3, PCD_ATTRIBUTES

A hash, the keys are the classname/attrib name pair (separated by a NULL), while the value is the offset to the attribute.

4, PCD_CLASS_ATTRIBUTES

Array of attribute of this class.

5, PCD_OBJECT_VTABLE

Vtable PMC that holds the vtable for objects of this class.

ex 2, PCD_ALL_PARENTS

Is now class->vtable->mro and contains the class itself too.

Methods ^

void init()

Initializes the class flags.

void init_pms(PMC *init)

The actual class creation code, called from newclass opcode. The init argument is not a PMC* but the classname STRING.

INTVAL isa(STRING *classname)

Returns whether the class is or inherits from *classname.

PMC *get_class()

Return SELF.

STRING *name()

Return the classname.

void visit(visit_info *info)

This is used by freeze/thaw to visit the contents of the class.

*info is the visit info, (see include/parrot/pmc_freeze.h).

void freeze(visit_info *info)

Used to archive the class.

void thaw(visit_info *info)

Used to unarchive the class.

void thawfinish(visit_info *info)

Create the class from the thawed parents and attributes array.


parrot