Kwasm.format.text.instruction
package kwasm.format.text.instruction
Methods
parseControlInstruction
fun List<Token>.parseControlInstruction(fromIndex: Int): ParseResult<ControlInstruction>?
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<ControlInstruction>?
|
parseExpression
fun List<Token>.parseExpression(fromIndex: Int): ParseResult<Expression>
Parses an Expression from the receiving List of Tokens.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<Expression>
|
parseFoldedInstructions
fun List<Token>.parseFoldedInstructions(fromIndex: Int): ParseResult<AstNodeList<Instruction>>
Parses a possibly-empty AstNodeList of folded Instructions into an unwrapped list of non-folded instructions.
See parseFoldedInstruction.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<AstNodeList<Instruction>>
|
parseFoldedInstruction
fun List<Token>.parseFoldedInstruction(fromIndex: Int): ParseResult<AstNodeList<Instruction>>?
From the docs:
Instructions can be written as S-expressions by grouping them into folded form. In that notation, an instruction is wrapped in parentheses and optionally includes nested folded instructions to indicate its operands.
In the case of kwasm.ast.ControlInstruction.Block/kwasm.ast.ControlInstruction.Loop
instructions, the folded form omits the end delimiter. For kwasm.ast.ControlInstruction.If
instructions, both branches have to be wrapped into nested S-expressions, headed by the keywords
then and else.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<AstNodeList<Instruction>>?
|
parseInstructions
fun List<Token>.parseInstructions(fromIndex: Int, min: Int, max: Int): ParseResult<AstNodeList<Instruction>>
Parses a List of Instructions from the Tokens.
Throws ParseException if fewer than min are found, and returns at most max.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
min: Int
|
|
max: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<AstNodeList<Instruction>>
|
parseInstruction
fun List<Token>.parseInstruction(fromIndex: Int): ParseResult<Instruction>?
Parses an Instruction from the receiving Tokens List.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<Instruction>?
|
parseLabel
fun List<Token>.parseLabel(startIndex: Int): ParseResult<Label>
Parses an Identifier.Label from the tokens.
From the docs:
labelI ::= v:id => compose(, I) (if v ∉ I.labels)
ϵ => compose({ labels (ϵ) }, I)
When the Token at startIndex is not an kwasm.format.text.token.Identifier, this function:
- returns an empty identifier, if and only if the it is not a Keyword nor a Reserved, or
- throws a ParseException.
Note: Composition will be left up to the interpreter.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
startIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<Label>
|
parseMemarg
fun List<Token>.parseMemarg(fromIndex: Int, expectedMaxBytes: Int): ParseResult<MemArg>
Parses a MemArg from the receiving List of Tokens.
From the docs:
memarg_N ::= o:offset a:align_N => { align n, offset o } (if a = 2^n)
offset ::= ‘offset=’ o:u32 => o
ϵ => 0
align_N ::= ‘align=’ a:u32 => a
ϵ => N
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
expectedMaxBytes: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<MemArg>
|
parseMemoryInstruction
fun List<Token>.parseMemoryInstruction(fromIndex: Int): ParseResult<MemoryInstruction>?
Attempts to parse a MemoryInstruction from the receiving List of Tokens. If none is found
at the given start index (fromIndex), null is returned.
From the docs:
plaininstrI ::= ‘i32.load’ m:memarg4 => i32.load m
‘i64.load’ m:memarg8 => i64.load m
‘f32.load’ m:memarg4 => f32.load m
‘f64.load’ m:memarg8 => f64.load m
‘i32.load8_s’ m:memarg1 => i32.load8_s m
‘i32.load8_u’ m:memarg1 => i32.load8_u m
‘i32.load16_s’ m:memarg2 => i32.load16_s m
‘i32.load16_u’ m:memarg2 => i32.load16_u m
‘i64.load8_s’ m:memarg1 => i64.load8_s m
‘i64.load8_u’ m:memarg1 => i64.load8_u m
‘i64.load16_s’ m:memarg2 => i64.load16_s m
‘i64.load16_u’ m:memarg2 => i64.load16_u m
‘i64.load32_s’ m:memarg4 => i64.load32_s m
‘i64.load32_u’ m:memarg4 => i64.load32_u m
‘i32.store’ m:memarg4 => i32.store m
‘i64.store’ m:memarg8 => i64.store m
‘f32.store’ m:memarg4 => f32.store m
‘f64.store’ m:memarg8 => f64.store m
‘i32.store8’ m:memarg1 => i32.store8 m
‘i32.store16’ m:memarg2 => i32.store16 m
‘i64.store8’ m:memarg1 => i64.store8 m
‘i64.store16’ m:memarg2 => i64.store16 m
‘i64.store32’ m:memarg4 => i64.store32 m
‘memory.size’ => memory.size
‘memory.grow’ => memory.grow
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<MemoryInstruction>?
|
parseNumericConstant
fun List<Token>.parseNumericConstant(fromIndex: Int): ParseResult<NumericConstantInstruction<*>>?
Attempts to parse a NumericConstantInstruction from the receiving List of Tokens.
From the docs:
plaininstrI ::= ‘i32.const’ n:i32 => i32.const n
‘i64.const’ n:i64 => i64.const n
‘f32.const’ z:f32 => f32.const z
‘f64.const’ z:f64 => f64.const z
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<NumericConstantInstruction<*>>?
|
parseNumericInstruction
fun List<Token>.parseNumericInstruction(fromIndex: Int): ParseResult<NumericInstruction>?
Parses a NumericInstruction from the receiving List of Tokens.
See the docs for details.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<NumericInstruction>?
|
parseParametricInstruction
fun List<Token>.parseParametricInstruction(fromIndex: Int): ParseResult<ParametricInstruction>?
Parses a ParametricInstruction from the receiving List of Tokens.
See the docs for details.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<ParametricInstruction>?
|
parseVariableInstruction
fun List<Token>.parseVariableInstruction(fromIndex: Int): ParseResult<VariableInstruction>?
Attempts to parse a VariableInstruction from the receiving List of Tokens.
From the docs:
plaininstrI ::= ‘local.get’ x:localidx => local.get x
‘local.set’ x:localidx => local.set x
‘local.tee’ x:localidx => local.tee x
‘global.get’ x:globalidx => global.get x
‘global.set’ x:globalidx => global.set x
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<VariableInstruction>?
|
Attempts to parse a ControlInstruction from the receiving Token. Returns
nullif none was found.From the docs: