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