Not much more will work currently as function signatures are still missing.
The MultiSub object "foo" in the global namespace that triggers the MMD search is hand-crafted in main.
The function call signature is created in the S0 register, the call sequence looks basically like this:
set P5, f # get arg1 set P6, b # get arg2 set I0, 1 # prototyped call set I1, 0 # 0 int args set I2, 0 # 0 string args set I3, 2 # 2 PMC args set I4, 0 # 0 float args set S0, "PP" # signature find_name P0, "foo" invokecc
The whole register setup for I0..I4 is basically useless, as it doesn't contain the order of the call arguments that is needed to find the appropriate multi sub. E.g.:
foo(int, float) foo(float, int)
would both have I1 = I4 = 1.
We have to adjust calling conventions eventually .
Related changes:
- parrotlib.imc did call function in the ::internal namespace w/o lookup
- adjusted call sequence so that find_name can investigate arguments
- if the C<find_name> opcode encounters a MultiSub object, MMD search is done
leo