TITLE
Protoobject.pir - PIR implementation for creating protoobjects
SYNOPSIS
load_bytecode 'Protoobject.pbc'
.local pmc protomaker, fooclass, fooproto
# create a protoobject for existing class Foo
protomaker = get_hll_global 'Protomaker'
fooclass = get_class 'Foo'
fooproto = protomaker.'new_proto'(fooclass)
# create a subclass 'NS::Bar' from 'Foo' with attributes
.local pmc bclass, bproto
fooclass = get_class 'Foo'
(bclass, bproto) = protomaker.'new_subclass'(fooclass, 'NS::Bar', '$attr')
DESCRIPTION
Objects of class Protomaker are used to construct and initialize "protoobjects" for Parrot classes. The concept of protoobjects comes from Perl 6; protoobjects are "empty" instances of a class -- i.e., they are instances that are simply more undefined than a normal instance.
Newly created protoobjects are automatically added as symbols in a corresponding namespace -- for example, the protoobject for Foo::Bar::Baz is automatically entered as the 'Baz' symbol in the ['Foo';'Bar'] namespace.
Methods
- new_proto(class) Create and initialize a new protoobject for
- new_subclass(baseclass, name [, attr1, attr2, ...] ) Helper method to create subclasses and their corresponding protoobjects as a single method call. This method creates a subclass of
class. The newly created protoobject is placed as an entry in the appropriate namespace and returned.
baseclass with the given name, adds attributes attr1, attr2, etc. to the subclass, and then creates a corresponding protoobject for the subclass.The name parameter is either an array of strings or a string with namespace identifiers separated by double colons (::).The method returns the subclass object and its corresponding protoobject.