use oak_core::{Token, TokenType, UniversalTokenRole};
pub type JasminToken = Token<JasminTokenType>;
impl TokenType for JasminTokenType {
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::ClassKw
| Self::VersionKw
| Self::MethodKw
| Self::FieldKw
| Self::StringKw
| Self::SourceFileKw
| Self::StackKw
| Self::LocalsKw
| Self::EndKw
| Self::CompiledKw
| Self::FromKw
| Self::InnerClassKw
| Self::NestMembersKw
| Self::BootstrapMethodKw
| Self::Public
| Self::Private
| Self::Protected
| Self::Static
| Self::Super
| Self::Final
| Self::Abstract
| Self::Synchronized
| Self::Native
| Self::Synthetic
| Self::Deprecated
| Self::Varargs
| Self::Bridge
| Self::Enum
| Self::Annotation
| Self::Strictfp
| Self::Interface
| Self::Volatile
| Self::Transient
| Self::ALoad0
| Self::ALoad1
| Self::ALoad2
| Self::ALoad3
| Self::ILoad0
| Self::ILoad1
| Self::ILoad2
| Self::ILoad3
| Self::Ldc
| Self::LdcW
| Self::Ldc2W
| Self::InvokeSpecial
| Self::InvokeVirtual
| Self::InvokeStatic
| Self::InvokeInterface
| Self::InvokeDynamic
| Self::GetStatic
| Self::PutStatic
| Self::GetField
| Self::PutField
| Self::Return
| Self::IReturn
| Self::AReturn
| Self::LReturn
| Self::FReturn
| Self::DReturn
| Self::Nop
| Self::Dup
| Self::Pop
| Self::New => UniversalTokenRole::Keyword,
Self::IdentifierToken => UniversalTokenRole::Name,
Self::StringLiteral | Self::Number => UniversalTokenRole::Literal,
Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
Self::Comment => UniversalTokenRole::Comment,
Self::LeftBrace | Self::RightBrace | Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::Colon | Self::Semicolon | Self::Dot | Self::Comma => UniversalTokenRole::Punctuation,
Self::Slash => UniversalTokenRole::Operator,
Self::Eof => UniversalTokenRole::Eof,
Self::Error => UniversalTokenRole::Error,
_ => UniversalTokenRole::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum JasminTokenType {
Root,
Class,
Method,
Field,
Instruction,
IdentifierNode,
StringNode,
NumberNode,
ErrorNode,
ClassKw,
VersionKw,
MethodKw,
FieldKw,
StringKw,
SourceFileKw,
StackKw,
LocalsKw,
EndKw,
CompiledKw,
FromKw,
InnerClassKw,
NestMembersKw,
BootstrapMethodKw,
Public,
Private,
Protected,
Static,
Super,
Final,
Abstract,
Synchronized,
Native,
Synthetic,
Deprecated,
Varargs,
Bridge,
Enum,
Annotation,
Strictfp,
Interface,
Volatile,
Transient,
ALoad0,
ALoad1,
ALoad2,
ALoad3,
ILoad0,
ILoad1,
ILoad2,
ILoad3,
Ldc,
LdcW,
Ldc2W,
InvokeSpecial,
InvokeVirtual,
InvokeStatic,
InvokeInterface,
InvokeDynamic,
GetStatic,
PutStatic,
GetField,
PutField,
Return,
IReturn,
AReturn,
LReturn,
FReturn,
DReturn,
Nop,
Dup,
Pop,
New,
LeftBrace,
RightBrace,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
Colon,
Semicolon,
Dot,
Comma,
Slash,
StringLiteral,
Number,
TypeDescriptor,
IdentifierToken,
Whitespace,
Newline,
Comment,
Eof,
Error,
}