I've implemented this, but I am near the point of recanting. Examples
of problematic code (both from t/pie/b3.t):
return TT.__new__(cls, value)
return T.__cmp__(a, b)
Where the latter ends up invoking the cmp method with three arguments
instead of the customary two, and confusion reigns.
The way this is resolved in Python is with a distinction between "bound"
and "unbound" methods. Roughly, in Parrot terms, this is a distinction
between methods where the object can be found in P2 and P5 respectively.
I'm resisting implementing this for now, but will likely have to cave
ultimately. To implement this would require a call to pmc_new on each
method call on an instance, as well as reinserting the argument as the
first parameter (shifting each of the curent parameters in the process).
Blech.
- Sam Ruby