Methods
PIR provides syntax to simplify writing methods and method calls. These calls follow the Parrot-calling conventions. The basic syntax is similar to the single-line subroutine call above, but instead of a subroutine label name it takes a variable for the invocant PMC and a string with the name of the method:
object."methodname"(arguments)
The invocant can be a variable or register, and the method name can
be a literal string, string variable, or method object register. This
tiny bit of code sets up all the registers for a method call and
makes the call, saving and restoring the top half of the register
frames around the call. Internally, the call is a
callmethodcc
opcode, so it also generates a return
continuation.
This example defines two methods in the Foo
class.
It calls one from the main body of the subroutine and the other from
within the first method:
.sub _main .local pmc class .local pmc obj newclass class, "Foo" # create a new Foo class find_type $I0, "Foo" # find its dynamic type number new obj, $I0 # instantiate a Foo object obj."_meth"( ) # call obj."_meth" which is actually print "done\n" # "_meth" in the "Foo" namespace end .end .namespace [ "Foo" ] # start namespace "Foo" .sub _meth method # define Foo::_meth global print "in meth\n" $S0 = "_other_meth" # method names can be in a register too self.$S0( ) # self is the invocant .end .sub _other_meth method # define another method print "in other_meth\n" # as above Parrot provides a return .end # statement
Each ...
Get Perl 6 and Parrot Essentials, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.