find_method
bsdz
blairuk at googlemail.com
Tue Apr 21 20:49:38 UTC 2009
Hi
I've posed a similar question on IRC a couple of times without a
response. So I've posted it here for a wider audience.
This really follows on from my previous post about inheritance and
results from a small investigation (with a little help from Andrew).
After subclassing a base class and attempting to run a method (that
exists in the base class) on the new derived class, this causes an
error. I use the term method loosely as their appears to be several
types of functions, namely vtables, methods and i guess plain subs.
I wrote a simple PIR sub (http://nopaste.snit.ch/16339): -
<code>
.include 'library/dumper.pir'
.sub '' :main
$P0 = get_class 'Integer'
$P1 = $P0.'find_method'('i_subtract')
_dumper($P1, 'find_method result')
$P2 = new 'Integer'
$P2 = 10
$P2.'i_subtract'(1)
_dumper($P2, '10 - 1')
$P3 = inspect $P0
_dumper($P3, 'inspect')
.end
What is interesting in the above code is I use i_subtract as a method
on $P2 but it's not findable using find_method. In actual fact, the
output from the above script is as follows: -
<output>
"find_method result" => null
"10 - 1" => 9
"inspect" => Hash {
"methods" => Hash {
"get_as_base" => undef
},
"name" => "Integer",
"namespace" => NameSpace {
...
"i_subtract" => MultiSub (size:3) [
PMC 'NCI' { ... },
PMC 'NCI' { ... },
PMC 'NCI' { ... }
],
...
},
"parents" => ResizablePMCArray (size:0) [
]
</output>
</code>
This shows the i_subtract sub under a namespace hash.
This seems to be a cause for inheritance not working since it relies
on the find_method. This also seems to happen if one creates their own
method in the new derived class's namespace - that new method is no
longer under methods but under namespace.
I've looked at PDD15 and not been able to find the info I need to
determine what is the correct behaviour. But then, perhaps I am
reading it wrong.
Can anyone help and offer some insight. If I know what the proper
behaviour should be then I might be able to supply a patch.
Cheers
Blair
More information about the parrot-dev
mailing list