The input is in the form of a vector with the following elements:

0. name (string)
1. global context (vector)
2. #ret values (integer)
3. min #args (integer)
4. req #args (integer)
5. has rest (nil or 't')
6. argument names (vector of symbol)
7. regions (vector of integer, see below)
8. keyword table (hash: symbol => integer)
9. instructions (vector of symbol | vector)
10. nested funs (input vectors)

Symbols are used in the instruction vector for labels, vectors for byte code instructions. The instructions are a symbol (all lower-case) for the op-code, followed by the necessary source obj operands, source integer operands and destination operands. The format of each of these types of operands is described below:

Source Operands

The simple forms may be used as is, or may start a source operand vector. The vector forms may only be used within a source operand vector (possibly following a simple form). In vector form, the codes are merely run end to end in one vector, for example: (4 plus 5 times 2) or (some_var_name vsub 2 field some_field_name).

Destination Operands

The destination can be specified from another location, or can be created by the destination operand. If no region or wait or offset is specified in a new destination, and the addr is one of the forms that is marked "can be used alone", then this form may be used directly as the full destination operand without enclosing it in a vector. Logo