Kwasm.format.text
package kwasm.format.text
Classes
| Name | Description |
|---|---|
data class TextModuleCounts
|
|
data class ParseResult
|
|
class Tokenizer
|
A tokenizer capable of splitting a raw text-format WASM file into its component tokens. From the docs: The character stream in the source text is divided, from left to right, into a sequence of tokens, as defined by the following grammar. Tokens are formed from the input character stream according to the longest match rule. That is, the next token always consists of the longest possible sequence of characters that is recognized by the above lexical grammar. Tokens can be separated by white space, but except for strings, they cannot themselves contain whitespace. |
Subpackages
| Name | Description |
|---|---|
package kwasm.format.text.instruction
|
|
package kwasm.format.text.module
|
|
package kwasm.format.text.token
|
|
package kwasm.format.text.type
|
|
package kwasm.format.text.whitespace
|
Methods
incrementFor
fun <T : Identifier> TextModuleCounts.incrementFor(identifier: T): TextModuleCounts
Receiver
| Name | Description |
|---|---|
TextModuleCounts
|
Parameters
| Name | Description |
|---|---|
identifier: T
|
ReturnValue
| Name | Description |
|---|---|
TextModuleCounts
|
createIdentifier
fun <T : Identifier> createIdentifier(stringValue: String?, intValue: Int?): T?
Parameters
| Name | Description |
|---|---|
stringValue: String?
|
|
intValue: Int?
|
ReturnValue
| Name | Description |
|---|---|
T?
|
isKeyword
fun Token.isKeyword(keywordValue: String): Boolean
Receiver
| Name | Description |
|---|---|
Token
|
Parameters
| Name | Description |
|---|---|
keywordValue: String
|
ReturnValue
| Name | Description |
|---|---|
Boolean
|
asKeywordMatching
fun Token.asKeywordMatching(value: String): Keyword?
Casts the Token into a Keyword and returns it if its Keyword.value is value.
Returns null if either condition is unmet.
Receiver
| Name | Description |
|---|---|
Token
|
Parameters
| Name | Description |
|---|---|
value: String
|
ReturnValue
| Name | Description |
|---|---|
Keyword?
|
asKeywordMatching
fun Token.asKeywordMatching(regex: Regex): Pair
Casts the Token into a Keyword and returns it, along with the match, if its Keyword.value matches regexp.
Returns null if neither condition is met.
Receiver
| Name | Description |
|---|---|
Token
|
Parameters
| Name | Description |
|---|---|
regex: Regex
|
ReturnValue
| Name | Description |
|---|---|
Pair
|
assertIsKeyword
fun Token.assertIsKeyword(keywordValue: String)
Receiver
| Name | Description |
|---|---|
Token
|
Parameters
| Name | Description |
|---|---|
keywordValue: String
|
ReturnValue
| Name | Description |
|---|---|
Unit
|
parseIdentifier
fun <T : Identifier> List<Token>.parseIdentifier(fromIndex: Int, intAllowed: Boolean): ParseResult<T>?
Parses an Identifier of type T from the receiving List of Tokens. If no explicit
Identifier is found, an implicit one with Identifier.stringRepr and Identifier.unique both
set to null is returned.
Note: Does not support Identifier.TypeDef.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
intAllowed: Boolean
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<T>?
|
parseOrCreateIdentifier
fun <T : Identifier> List<Token>.parseOrCreateIdentifier(fromIndex: Int, counts: TextModuleCounts): Pair
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
counts: TextModuleCounts
|
ReturnValue
| Name | Description |
|---|---|
Pair
|
parseLiteral
fun <T : Any> List<Token>.parseLiteral(fromIndex: Int, asClass: KClass<T>): ParseResult<Literal<T>>
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
asClass: KClass<T>
|
ReturnValue
| Name | Description |
|---|---|
ParseResult<Literal<T>>
|
isKeyword
fun List<Token>.isKeyword(atIndex: Int, keyword: String): Boolean
Determines whether the Token at the given position is a Keyword matching the provided keyword value.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
atIndex: Int
|
|
keyword: String
|
ReturnValue
| Name | Description |
|---|---|
Boolean
|
isOpenParen
fun List<Token>.isOpenParen(atIndex: Int): Boolean
Helper to check if a Token at a given position within the receiving List is a Paren.Open.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
atIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
Boolean
|
isClosedParen
fun List<Token>.isClosedParen(atIndex: Int): Boolean
Helper to check if a Token at a given position within the receiving List is a Paren.Closed.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
atIndex: Int
|
ReturnValue
| Name | Description |
|---|---|
Boolean
|
contextAt
fun List<Token>.contextAt(index: Int): ParseContext?
Helper to get the closest kwasm.format.ParseContext from the given position.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
index: Int
|
ReturnValue
| Name | Description |
|---|---|
ParseContext?
|
getOrThrow
inline fun <T : Token> List<Token>.getOrThrow(index: Int, crossinline message: ()->String): T
Returns the Token as type T from the List at the given index, or throws a ParseException with the result of the message lambda.
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
index: Int
|
|
crossinline message: ()->String
|
ReturnValue
| Name | Description |
|---|---|
T
|
getOrThrow
fun <T : Token> List<Token>.getOrThrow(index: Int, message: String?): T
Returns the Token as type T from the List at the given index, or throws a ParseException with the provided message (or if null: "Expected T".
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
index: Int
|
|
message: String?
|
ReturnValue
| Name | Description |
|---|---|
T
|
tokensUntilParenClosure
fun List<Token>.tokensUntilParenClosure(fromIndex: Int, expectedClosures: Int): List<Token>
Finds and returns all tokens between the fromIndex and when the expectedClosures-number of Paren.Closed tokens are found (inclusive).
For example:
(blah (foo (bar) (baz)))
myList.tokensUntilParenClosure(1, 1)
Would return a list of tokens equivalent to blah (foo (bar) (baz)))
Receiver
| Name | Description |
|---|---|
List<Token>
|
Parameters
| Name | Description |
|---|---|
fromIndex: Int
|
|
expectedClosures: Int
|
ReturnValue
| Name | Description |
|---|---|
List<Token>
|
Creates an Identifier of type T.