Summary:
1) PIR code using PIRs HLL call syntax doesn't need changes.
foo() # call sub foo a = bar(x) # call bar with argument, get return value (a,b,c) = baz(x,y)
.return() # return from a sub - maybe omitted if last
# statement before .end
.return(foo, bar) # return these values.yield(foo) # yield value(s) from a coroutine
self."method"(x, y) # method call on object self $P0 = other_object # and on another one (r, s) = $P0."other_meth"(a)
2) PASM code using pdd03 calling conventions
All explicit usage of P0, P1 related to subroutines as well as P2 in OO code is *not* safe and need changes.
2a) return from a sub
instead of "invoke P1" use the new opcode "returncc"
2b) accessing the object "self" in methods:
.include "interpinfo.pasm"
interpinfo P2, .INTERPINFO_CURRENT_OBJECT
# get object into given register2c) access the current subroutine object
.include "interpinfo.pasm"
interpinfo P0, .INTERPINFO_CURRENT_SUB2d) create a real continuation from the current continuation
.include "interpinfo.pasm"
interpinfo P1, .INTERPINFO_CURRENT_CONTThis continuation is already a full Continuation PMC usable for call/cc.
Reference: docs/pdds/pdd03_calling_conventions.pod
I'll try to make these changes seamlessly, but I can't guarantee that there will be no intermittend failures in tests or other code, until the changes are done.
leo
