NAME
docs/dev/pcc_state.pod - Readme file for the Parrot Calling Conventions State Table.
DESCRIPTION
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.
PARROT CALLING CONVENTIONS STATE TABLE
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 | | | | | | | | | | | ------------------------------------------------------------------------
Glossary
- Flag Values
- Passing
- Expressions
- Errors
- Done
- Notes
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