The token string for each role will be organized in the following structure:
Substring Terminator
Activation Substitutes none
Activation Equation Activation Token
Consequence Substitutes none
Consequence Macros MacroTerminator Token
Consequence Equations none
(the next two items are optional)
Relationship Adjustments none
Physical Changes none
Terminator Token
When the interpreter encounters a macro definition token, it must store an internal index to that point in the token string, and then skip to the next MacroTerminator token, where processing proceeds normally. When it encounters a macro call token, it must refer to its previously-stored index to the macro to continue processing.
There is no point in retaining this variable. Instead, we will permit procedures (as distinct from functions). These are single-line calls that perform a procedure and return no value to the stack. Thus, a token can return either zero or one value on the stack &emdash; no more. This will require substantial changes in the editor.
The interpreter will always perform a stack check on encountering either the Activation token or the Terminator token; if the stack pointer is not zero, the interpreter will poison the results.