src/pmc/role.pmc - Role - defines a role
This class implements the Role PMC,
a unit of class composition as outlined in docs/pdds/pdd15_objects.pod.
Role is not derived from any other PMC.
The Role PMC structure (Parrot_Role
) consists of five items:
name
- The name of the role -- a STRING.
An empty STRING is allocated during initialization.
namespace
- The namespace the role is associated with,
if any.
A Null PMC is allocated during initialization.
roles
- The list of roles from which this role is composed,
if any.
An empty ResizablePMCArray is allocated during initialization.
methods
- The directory of method names and methods this role implements.
An empty Hash PMC is allocated during initialization.
attrib_metadata
- The directory of attribute names and attribute metadata this role contains.
An empty Hash PMC is allocated during initialization.
void init()
- Initializes a Role PMC.
void init_pmc(PMC *init_data)
- Creates a Role and initializes it using the settings from the Hash passed in
init_data
.
void destroy()
- Free the memory associated with the object's underlying struct.
void mark()
- Mark referenced strings and PMCs in the structure as live.
void add_attribute(STRING *name, PMC *type)
- Adds the given attribute with an optional type.
Enters the attribute in the
attributes
array.
void add_method(STRING *name, PMC *sub)
- Adds the given sub PMC as a method with the given name.
void add_role(PMC *role)
- Composes the supplied Role PMC into this role,
provided there are no conflicts.
PMC *inspect_str(STRING *what)
- Provides introspection of a specific piece of information about the role.
The available information is:
- name - String PMC containing the name of the role
- namespce - NameSpace PMC of the the namespace attached to the role
- attributes - Hash keyed on attribute name,
value is hash describing it
- methods - Hash keyed on method name,
value is an invokable PMC.
Includes methods composed in from roles.
- roles - Array of Role PMCs.
Includes roles done by the roles that were composed into this role.
PMC *inspect()
- Returns a Hash describing the role,
with key/value pairs as described in inspect_str.
PCCMETHOD void name(STRING *name :optional, int got_name :opt_flag)
- Sets the name of the role,
and updates the namespace accoringly.
PCCMETHOD void pmc_namespace()
- Gets the namespace associated with this role,
if any.
PCCMETHOD void attributes()
- Return a hash where the keys are attribute names and the values are hashes providing a set of key/value pairs describing the attribute.
PCCMETHOD void add_attribute(STRING *attribute_name, PMC *attribute_type :optional, int got_type :opt_flag)
- Add an attribute to the role.
Requires a name and,
optionally,
a type.
PCCMETHOD void methods()
- Return a hash where the keys are method names and the values are methods.
PCCMETHOD void add_method(STRING *name, PMC *sub)
- Adds the given sub PMC as a method with the given name.
PCCMETHOD void roles()
- Return the roles array PMC.
PCCMETHOD void add_role(PMC *role, PMC *exclude_method :optional :named["exclude_method"], int got_exclude_method :opt_flag, PMC *alias_method :optional :named["alias_method"], int got_alias_method :opt_flag)
- Compose the given role into this one,
using the given exclusions and aliases.
void inspect(STRING *what :optional)
- Gets all introspection data for the role or,
if the optional string parameter is supplied,
a particular item of introspection data.
Unstable.
This PMC is under active development; major portions of the interface have not yet been completed.
docs/pdds/pdd15_objects.pod.