| parrotcode: Untitled | |
| Contents | Documentation | 

this document expresses the calling conventions as outlined in PDD03 in table format. this is a work in progress, which, when finished, should assist in creating an exhaustive test suite for calling conventions.
              1      2      3      4      5      6      7      8      9
           |                          DEST                         |      |
           |          unnamed          |           named         *3|      |
           |   required  |   optional  |   required  |   optional  |      |
           |      |    *1|      |    *1|      |    *1|      |    *1|      |
           | nrml | slrp | nrml | slrp | nrml | slrp | nrml | slrp | END  |
   ------------------------------------------------------------------------
           |      |      |      |      |      |      |      |      |      |
 A    nrml |  P1  |  P2  |  P1  |  P2  |  E6  |  E6  |  E6  |  E6  |  E1  |
    u      |      |      |      |      |      |      |      |      |      |
    n----------------------------------------------------------------------
    n  *1,2|      |      |      |      |      |      |      |      |      |
 B  a flat |  P3  |  P3  |  P3  |  P3  |  P4  |  P5  | P4   |  P5  |  E2  |
    m      |      |      |      |      |      |      |      |      |      |
    e----------------------------------------------------------------------
    d    *1|      |      |      |      |      |      |      |      |      |
 C    mayb |  P1  |  X1  |  P1  |  X1  |      |      |      |      |  E2  |
   S       |      |      |      |      |      |      |      |      |      |
   R-----------------------------------------------------------------------
   C       |      |      |      |      |      |      |      |      |      |
 D    nrml |  E5  |  E5  |  E5  |  E5  |      |      |      |      |  E1  |
           |      |      |      |      |      |      |      |      |      |
    n----------------------------------------------------------------------
    a    *3|      |      |      |      |      |      |      |      |      |
 E  m flat |  E5  |  E5  |  E5  |  E5  |      |      |      |      |  E2  |
    e      |      |      |      |      |      |      |      |      |      |
    d----------------------------------------------------------------------
           |      |      |      |      |      |      |      |      |      |
 F    mayb |  E4  |  E4  |  E4  |  E4  |  E4  |  E4  |  E4  |  E4  |  E2  |
           |      |      |      |      |      |      |      |      |      |
   ------------------------------------------------------------------------
           |      |      |      |      |      |      |      |      |      |
 G     END |  E3  |  E3  |  D1  |  D1  |  E3  |  E3  |  D1  |  D1  |  D1  |
           |      |      |      |      |      |      |      |      |      |
   ------------------------------------------------------------------------

  nrml  no flags   (src: val & 0x03a0 = 0; dest: val & 0x0260 = 0)
  slrp  SLURPY     (val & 0x0020 = 1)
  flat  FLAT       (val & 0x0020 = 1)
  P1  pass as-is, next state
  P2  pass as-is, next src
  P3  pass contents as array items, next
  P4  pass current array item as-is, next src array item
  P5  pass current array items as pairs (a[0],a[0]) or as (a[0],a[1]) (a.size % 2 = 0)
  P4  pass current array item as-is, next src array item
  P5  pass current array items as pairs (a[0],a[0]) or as (a[0],a[1]) (a.size % 2 = 0)
  X1  if(src pmc is aggregate or reference to aggregate)
        if dest is array, pass as flat
        if dest is hash, pass as pairs
  E1  overflow
  E2  overflow if aggregate is not empty
  E3  underflow
  E4  [removed]
  E5  named parameter passed, unnamed expected
  E6  unnamed parameter passed, named expected
  D1  done
  *1  pmc only
  *2  error unless pmc is aggregate or reference to aggregate
  *3  pmc or string constant only

|  |   |