WRAP_IN_LIST
16*N+13 - Pop N arguments from the parse stack of the current potential message send. Create an N-element list with them, and push the list back onto the parse stack.
This is the equivalent of pushing an empty list prior to pushing those arguments, then using APPEND_ARGUMENT after each argument is parsed to add them to the list. The advantage of using this operation instead is to allow the pure stack manipulation operations to occur after parsing an argument and/or fixed tokens, which increases the conformity between the non-repeating and repeating clauses, which in turn reduces (at least) the number of actions executed each time the root bundle tree is used to start parsing a subexpression.
Properties
Whether this operation can run successfully if there is a pre-parsed first argument that has not yet been consumed.
Whether this instance commutes with PARSE_PART instructions.
A Statistic that records the number of nanoseconds spent while expanding occurrences of this ParsingOperation.
A Statistic that records the number of nanoseconds spent while executing occurrences of this ParsingOperation.
Functions
Assume that the instruction encodes an operand that represents the index of an argument to be checked (for grammatical restrictions): answer the operand.
Answer the instruction coding of the receiver for the given operand. The receiver must be arity one (1), which is equivalent to its ordinal being greater than or equal to distinctInstructions.
Assume that the instruction encodes an operand that represents a message part index: answer the operand. Answer 0 if the operand does not represent a message part.
Given an instruction and program counter, answer the list of successor program counters that should be explored. For example, a BRANCH_FORWARD instruction will need to visit both the next program counter and the branch target.
Extract the index of the type check argument for a TYPE_CHECK_ARGUMENT parsing instruction. This indexes the static MessageSplitter.constantForIndex.