use oak_core::{Token, TokenType, UniversalTokenRole};
pub type WatToken = Token<WatTokenType>;
impl TokenType for WatTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Eof;
fn is_ignored(&self) -> bool {
matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
}
fn role(&self) -> Self::Role {
match self {
Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
Self::Comment => UniversalTokenRole::Comment,
Self::IntegerLiteral | Self::FloatLiteral | Self::StringLiteral => UniversalTokenRole::Literal,
Self::Identifier => UniversalTokenRole::Name,
Self::ModuleKw
| Self::FuncKw
| Self::ExportKw
| Self::ImportKw
| Self::TypeKw
| Self::ParamKw
| Self::ResultKw
| Self::LocalKw
| Self::GlobalKw
| Self::MemoryKw
| Self::TableKw
| Self::ElemKw
| Self::DataKw
| Self::StartKw
| Self::BlockKw
| Self::LoopKw
| Self::IfKw
| Self::ThenKw
| Self::ElseKw
| Self::EndKw
| Self::BrKw
| Self::BrIfKw
| Self::BrTableKw
| Self::ReturnKw
| Self::CallKw
| Self::CallIndirectKw
| Self::LocalGetKw
| Self::LocalSetKw
| Self::LocalTeeKw
| Self::GlobalGetKw
| Self::GlobalSetKw
| Self::I32LoadKw
| Self::I64LoadKw
| Self::F32LoadKw
| Self::F64LoadKw
| Self::I32StoreKw
| Self::I64StoreKw
| Self::F32StoreKw
| Self::F64StoreKw
| Self::MemorySizeKw
| Self::MemoryGrowKw
| Self::I32ConstKw
| Self::I64ConstKw
| Self::F32ConstKw
| Self::F64ConstKw
| Self::I32AddKw
| Self::I64AddKw
| Self::F32AddKw
| Self::F64AddKw
| Self::I32SubKw
| Self::I64SubKw
| Self::F32SubKw
| Self::F64SubKw
| Self::I32MulKw
| Self::I64MulKw
| Self::F32MulKw
| Self::F64MulKw
| Self::I32EqKw
| Self::I64EqKw
| Self::F32EqKw
| Self::F64EqKw
| Self::I32NeKw
| Self::I64NeKw
| Self::F32NeKw
| Self::F64NeKw
| Self::DropKw
| Self::SelectKw
| Self::UnreachableKw
| Self::NopKw
| Self::I32Kw
| Self::I64Kw
| Self::F32Kw
| Self::F64Kw => UniversalTokenRole::Keyword,
Self::LeftParen | Self::RightParen => UniversalTokenRole::Punctuation,
Self::Eq => UniversalTokenRole::Operator,
_ => UniversalTokenRole::None,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum WatTokenType {
Whitespace,
Newline,
Comment,
Error,
Eof,
Text,
IntegerLiteral,
FloatLiteral,
StringLiteral,
Identifier,
ModuleKw,
FuncKw,
ExportKw,
ImportKw,
TypeKw,
ParamKw,
ResultKw,
LocalKw,
GlobalKw,
MemoryKw,
TableKw,
ElemKw,
DataKw,
StartKw,
BlockKw,
LoopKw,
IfKw,
ThenKw,
ElseKw,
EndKw,
BrKw,
BrIfKw,
BrTableKw,
ReturnKw,
CallKw,
CallIndirectKw,
LocalGetKw,
LocalSetKw,
LocalTeeKw,
GlobalGetKw,
GlobalSetKw,
I32LoadKw,
I64LoadKw,
F32LoadKw,
F64LoadKw,
I32Load8SKw,
I32Load8UKw,
I32Load16SKw,
I32Load16UKw,
I64Load8SKw,
I64Load8UKw,
I64Load16SKw,
I64Load16UKw,
I64Load32SKw,
I64Load32UKw,
I32StoreKw,
I64StoreKw,
F32StoreKw,
F64StoreKw,
I32Store8Kw,
I32Store16Kw,
I64Store8Kw,
I64Store16Kw,
I64Store32Kw,
MemorySizeKw,
MemoryGrowKw,
I32ConstKw,
I64ConstKw,
F32ConstKw,
F64ConstKw,
I32AddKw,
I64AddKw,
F32AddKw,
F64AddKw,
I32SubKw,
I64SubKw,
F32SubKw,
F64SubKw,
I32MulKw,
I64MulKw,
F32MulKw,
F64MulKw,
I32DivSKw,
I32DivUKw,
I64DivSKw,
I64DivUKw,
F32DivKw,
F64DivKw,
I32RemSKw,
I32RemUKw,
I64RemSKw,
I64RemUKw,
I32EqKw,
I64EqKw,
F32EqKw,
F64EqKw,
I32NeKw,
I64NeKw,
F32NeKw,
F64NeKw,
I32LtSKw,
I32LtUKw,
I64LtSKw,
I64LtUKw,
F32LtKw,
F64LtKw,
I32GtSKw,
I32GtUKw,
I64GtSKw,
I64GtUKw,
F32GtKw,
F64GtKw,
I32LeSKw,
I32LeUKw,
I64LeSKw,
I64LeUKw,
F32LeKw,
F64LeKw,
I32GeSKw,
I32GeUKw,
I64GeSKw,
I64GeUKw,
F32GeKw,
F64GeKw,
I32AndKw,
I64AndKw,
I32OrKw,
I64OrKw,
I32XorKw,
I64XorKw,
I32ShlKw,
I64ShlKw,
I32ShrSKw,
I32ShrUKw,
I64ShrSKw,
I64ShrUKw,
I32RotlKw,
I64RotlKw,
I32RotrKw,
I64RotrKw,
I32WrapI64Kw,
I64ExtendI32SKw,
I64ExtendI32UKw,
I32TruncF32SKw,
I32TruncF32UKw,
I32TruncF64SKw,
I32TruncF64UKw,
I64TruncF32SKw,
I64TruncF32UKw,
I64TruncF64SKw,
I64TruncF64UKw,
F32ConvertI32SKw,
F32ConvertI32UKw,
F32ConvertI64SKw,
F32ConvertI64UKw,
F64ConvertI32SKw,
F64ConvertI32UKw,
F64ConvertI64SKw,
F64ConvertI64UKw,
F32DemoteF64Kw,
F64PromoteF32Kw,
DropKw,
SelectKw,
UnreachableKw,
NopKw,
I32Kw,
I64Kw,
F32Kw,
F64Kw,
FuncrefKw,
ExternrefKw,
MutKw,
OffsetKw,
AlignKw,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
LeftBrace,
RightBrace,
Semicolon,
Comma,
Dot,
Quote,
Dollar,
Plus,
Minus,
Star,
Slash,
Eq,
Colon,
Question,
Bang,
At,
Hash,
Percent,
Caret,
Ampersand,
LessThan,
GreaterThan,
Backslash,
Pipe,
Tilde,
Root,
SourceFile,
Module,
Item,
}