Skip to main content

oak_smalltalk/parser/
element_type.rs

1use 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    // Special
10    Root,
11    SourceFile,
12    Eof,
13    Error,
14
15    // Literals
16    Number,
17    Integer,
18    Float,
19    String,
20    Character,
21    Symbol,
22
23    // Keywords
24    True,
25    False,
26    Nil,
27    Self_,
28    Super,
29
30    // Identifiers
31    Identifier,
32
33    // Operators
34    Plus,
35    Minus,
36    Star,
37    Slash,
38    Percent,
39    Equal,
40    NotEqual,
41    Less,
42    Greater,
43    LessEqual,
44    GreaterEqual,
45
46    // Delimiters
47    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    // Comments
61    Comment,
62
63    // Whitespace
64    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}