oak_smalltalk/parser/
element_type.rs1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[repr(u8)]
8pub enum SmalltalkElementType {
9 Root,
11 SourceFile,
12 Eof,
13 Error,
14
15 Number,
17 Integer,
18 Float,
19 String,
20 Character,
21 Symbol,
22
23 True,
25 False,
26 Nil,
27 Self_,
28 Super,
29
30 Identifier,
32
33 Plus,
35 Minus,
36 Star,
37 Slash,
38 Percent,
39 Equal,
40 NotEqual,
41 Less,
42 Greater,
43 LessEqual,
44 GreaterEqual,
45
46 LeftParen,
48 RightParen,
49 LeftBracket,
50 RightBracket,
51 LeftBrace,
52 RightBrace,
53 Dot,
54 Semicolon,
55 Comma,
56 Colon,
57 Pipe,
58 Caret,
59
60 Comment,
62
63 Whitespace,
65 Newline,
66}
67
68impl TokenType for SmalltalkElementType {
69 type Role = UniversalTokenRole;
70 const END_OF_STREAM: Self = Self::Eof;
71
72 fn role(&self) -> Self::Role {
73 UniversalTokenRole::None
74 }
75}
76
77impl ElementType for SmalltalkElementType {
78 type Role = UniversalElementRole;
79
80 fn role(&self) -> Self::Role {
81 match self {
82 _ => UniversalElementRole::None,
83 }
84 }
85}
86
87impl From<crate::lexer::token_type::SmalltalkTokenType> for SmalltalkElementType {
88 fn from(token: crate::lexer::token_type::SmalltalkTokenType) -> Self {
89 unsafe { std::mem::transmute(token) }
90 }
91}