Below inline/attached describes what's done until now.
leo
According to the proposed changes described in
Subject: [PROPOSAL] infix MMD operators
Subject: Again the infix ops
the following is done:
1) Arithmetic infix opcodes add, sub, mul, div, fdiv, mod, cmod, pow
are converted to use the new MMD function signature that returns the
result PMC.
2) These opcodes aren't emitted as such but are converted like so:
add Px, Py, Pz => infix .MMD_ADD, Px, Py, Pz
which dispatches to
PMC* add([INTERP, SELF], value, dest)
3) The new C<infix> opcodes (currently in experimental.ops) calls
C<mmd_dispatch_*> as usual.
4) The two argument opcodes forms call now distinct infix MMD functions
add Px, Py => infix .MMD_ADD, Px, Py
=> void i_add([INTERP, SELF], value)
Additionally, if result and self are identical in the 3-arg variant
the opcode is onverted to the inplace variant:
add Px, Px, Pz => i_add(Px, Pz)
5) Overloading of the 3 argument opcodes and the infix opcodes is now
separated. We probably have to install fallback functions that call
the 3-argument form for a missing inplace variant.
Overloaded infix operations now have to return the result PMC.
Px = "__add"(Py, Pz)
If the result PMC should be reused, this can be achieved by passing it
to the overloaded function:
Px = "__add"(Py, Pz, Px)
The inplace functions have an "i_" prefix
"__i_add"(Px, Py)
(see also include/parrot/vtable.h:Parrot_mmd_func_names[]
6) Python and Tcl dynamic classes are changed to use the inherited functions
of Parrot core scalar types where appropriate.
leo