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

Reply via email to