Andrew Whitworth wrote:

My proposal is this: All subs get the "self" keyword, whether they
want it or not. "self" in all subs point to the object that was being
invoked. In an ordinary subroutine, "self" will refer to the Sub PMC
itself. Ignore it if you don't want it, and nothing really changes
from how things are treated now. Objects, when invoked, will have this
"self" if they want it, which they probably always do. This also is
going to help us a lot internally, where we can unify the functions
for calling methods and functions for calling non-method subs. We
simplify a few things in IMCC too, although we do pay because an extra
parameter is being passed in many cases where it's not needed. As part
of this, I may also like to change VTABLE_invoke to take 4 parameters
instead of 3 (adding an optional invocant PMC, if it's different from
the sub object being invoked).

What do people think of this proposal? Any immediate problems come to
mind that would make this a Bad Idea?

The problem is that this introduces confusion between the invocant and the invoked code object. "self" should always and only refer to the invocant, and never refer to the invoked code object. And, "self" should never exist if the object wasn't invoked as a method. (Yes, it should give a more helpful error message.)

Personally, I'd like to eliminate the automatic "self" keyword entirely, and replace it with an explicit parameter declaration:

.param pmc self :invocant

But, this is an issue for 1.5, not 1.0.

Allison
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply via email to