Dan Sugalski <[EMAIL PROTECTED]> wrote: > At 5:04 PM -0500 1/18/05, Sam Ruby wrote:
>> f = "Parrot".find >> print f("r") >> >>Note that I referenced the method as an attribute, and then called >>it as a function. > Mmm, syntax! :) Luckily it makes no difference to us at the parrot > level. What that should translate to is something like: > $P0 = find_method Parrot_string, "find" > # Elided check for failed lookup and fallback to attribute fetch > $P1 = make_bound_method(Parrot_string, $P0) Not quite. It's just: f = getattribute Parrot_string, "find" nothing more. The C<get_attr_str> vtable has to do the right thing, i.e. if the attribute is a callable, it has to return a bound method object. >>Furthermore, the function "remembers" what object it is bound to. >>This is accomplished by VTABLE_find_method creating a new >>PyBoundMeth PMC which contains two references, one to the object, >>and one to the method. > While a good idea, I think it's not the right way to handle this. > Binding objects to methods to create invokable subs is going to be > something we're going to need for a lot of the languages, so I think > we'd be better served providing a general facility to do it rather > than leaving it to each individual language designer to do it. Should > save some work all around too. Yeah. When this came up last, I've proposed two ways to handle it: 1) inside the Sub/NCI PMC 2) by a distinct Bound_Meth PMC class derived from 1) The latter is probably cleaner. Binding the object to the callable could be done e.g. by the C<set_pmc> vtable. leo