Ticket #199 (closed todo: fixed)
fix handling of vtable methods
Reported by: | whiteknight | Owned by: | whiteknight |
---|---|---|---|
Priority: | normal | Milestone: | 0.9.1 |
Component: | imcc | Version: | |
Severity: | medium | Keywords: | |
Cc: | Language: | ||
Patch status: | Platform: | all |
Description
In object.pmc, all vtable overrides are invoked with Parrot_call_meth_fromc_args. This function passes SELF as an invocant to all vtable overrides in PIR. This means that any vtable interfaces that aren't also flagged as being methods (either explicitly with :method or implicitly by referencing self) will throw an exception because there are too many parameters passed (the normal parameters + 1 for the invocant).
We should update vtable overrides in PIR to always be treated as if they have :method as well. I can't imagine a use case where we actually don't want a reference to the invocant to be passed. I think this should be relatively easy to hack into IMCC, unless somebody comes up with a disagreement.