On Wednesday 11 April 2007 05:40, Alek Storm wrote:
> On 4/11/07, Allison Randal <[EMAIL PROTECTED]> wrote:
> > Actually, setting :vtable without setting :method makes a great deal of
> > sense, if you want to override a low-level vtable operation without
> > adding a named method to the class.
> Just use the :anon flag. It was designed for this. Vtable methods are
> methods, and they're called as methods from C.
Both options seem slightly wrong to me.
Vtable methods are methods, yes, so they should receive the invocant
automagically. I don't believe they do this currently:
.sub 'set_integer_native' :vtable :method
.param int size
.local pmc size_pmc
size_pmc = getattribute self, 'size'
size_pmc = size
.end
(runs fine)
.sub 'set_integer_native' :vtable
.param int size
.local pmc size_pmc
size_pmc = getattribute self, 'size'
size_pmc = size
.end
error:imcc:The opcode 'getattribute_p_ic_sc' (getattribute<3>) was not found.
Check the type and number of the arguments
Allison's right about method visibility outside of the vtable, and
throwing :anon on there seems a little hacky.
However, requiring :method to make vtable methods actually work if you use
self inside fails Allison's visibility problem.
-- c