The invoke op is bothering me -- namely, it disturbs me that it implicitly operates on P0. I know that P0 is the correct register to use according to pdd03, but I dislike having it be implicit. The user is required to set the rest of the pdd03 conventions up manually, so I don't see any need for invoke to be different. And it makes it much more clear what registers are being used if you have to pass in a PMC as an argument.
Sean O'Rourke proposed a long time ago, that with should have B<invoke_p> too. The current B<invoke> is fine for pdd03 only (where (almost) all other P registers might be parameters, but for calling Subs, compiled code, coroutines and so on, there is really no need, to not be able to select the object, which should get invoke'd.
So would anyone mind if I eliminated the zero-arg invoke op in favor of a one-arg invoke that takes a single PMC? (I may also have situations where I don't need to follow pdd03, and it would be more convenient to use a different register.)
Yep. At least add B<invoke Px>.
leo