1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::Serialize;
3
4#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize)]
5pub enum WatSyntaxKind {
6 Whitespace,
8 Newline,
9 Comment,
10 Error,
11 Eof,
12 Text,
13
14 IntegerLiteral,
16 FloatLiteral,
17 StringLiteral,
18 Identifier,
19
20 ModuleKw,
22 FuncKw,
23 ExportKw,
24 ImportKw,
25 TypeKw,
26 ParamKw,
27 ResultKw,
28 LocalKw,
29 GlobalKw,
30 MemoryKw,
31 TableKw,
32 ElemKw,
33 DataKw,
34 StartKw,
35
36 BlockKw,
38 LoopKw,
39 IfKw,
40 ThenKw,
41 ElseKw,
42 EndKw,
43 BrKw,
44 BrIfKw,
45 BrTableKw,
46 ReturnKw,
47 CallKw,
48 CallIndirectKw,
49
50 LocalGetKw,
52 LocalSetKw,
53 LocalTeeKw,
54 GlobalGetKw,
55 GlobalSetKw,
56
57 I32LoadKw,
59 I64LoadKw,
60 F32LoadKw,
61 F64LoadKw,
62 I32Load8SKw,
63 I32Load8UKw,
64 I32Load16SKw,
65 I32Load16UKw,
66 I64Load8SKw,
67 I64Load8UKw,
68 I64Load16SKw,
69 I64Load16UKw,
70 I64Load32SKw,
71 I64Load32UKw,
72 I32StoreKw,
73 I64StoreKw,
74 F32StoreKw,
75 F64StoreKw,
76 I32Store8Kw,
77 I32Store16Kw,
78 I64Store8Kw,
79 I64Store16Kw,
80 I64Store32Kw,
81 MemorySizeKw,
82 MemoryGrowKw,
83
84 I32ConstKw,
86 I64ConstKw,
87 F32ConstKw,
88 F64ConstKw,
89
90 I32AddKw,
92 I64AddKw,
93 F32AddKw,
94 F64AddKw,
95 I32SubKw,
96 I64SubKw,
97 F32SubKw,
98 F64SubKw,
99 I32MulKw,
100 I64MulKw,
101 F32MulKw,
102 F64MulKw,
103 I32DivSKw,
104 I32DivUKw,
105 I64DivSKw,
106 I64DivUKw,
107 F32DivKw,
108 F64DivKw,
109 I32RemSKw,
110 I32RemUKw,
111 I64RemSKw,
112 I64RemUKw,
113
114 I32EqKw,
116 I64EqKw,
117 F32EqKw,
118 F64EqKw,
119 I32NeKw,
120 I64NeKw,
121 F32NeKw,
122 F64NeKw,
123 I32LtSKw,
124 I32LtUKw,
125 I64LtSKw,
126 I64LtUKw,
127 F32LtKw,
128 F64LtKw,
129 I32GtSKw,
130 I32GtUKw,
131 I64GtSKw,
132 I64GtUKw,
133 F32GtKw,
134 F64GtKw,
135 I32LeSKw,
136 I32LeUKw,
137 I64LeSKw,
138 I64LeUKw,
139 F32LeKw,
140 F64LeKw,
141 I32GeSKw,
142 I32GeUKw,
143 I64GeSKw,
144 I64GeUKw,
145 F32GeKw,
146 F64GeKw,
147
148 I32AndKw,
150 I64AndKw,
151 I32OrKw,
152 I64OrKw,
153 I32XorKw,
154 I64XorKw,
155 I32ShlKw,
156 I64ShlKw,
157 I32ShrSKw,
158 I32ShrUKw,
159 I64ShrSKw,
160 I64ShrUKw,
161 I32RotlKw,
162 I64RotlKw,
163 I32RotrKw,
164 I64RotrKw,
165
166 I32WrapI64Kw,
168 I64ExtendI32SKw,
169 I64ExtendI32UKw,
170 I32TruncF32SKw,
171 I32TruncF32UKw,
172 I32TruncF64SKw,
173 I32TruncF64UKw,
174 I64TruncF32SKw,
175 I64TruncF32UKw,
176 I64TruncF64SKw,
177 I64TruncF64UKw,
178 F32ConvertI32SKw,
179 F32ConvertI32UKw,
180 F32ConvertI64SKw,
181 F32ConvertI64UKw,
182 F64ConvertI32SKw,
183 F64ConvertI32UKw,
184 F64ConvertI64SKw,
185 F64ConvertI64UKw,
186 F32DemoteF64Kw,
187 F64PromoteF32Kw,
188
189 DropKw,
191 SelectKw,
192 UnreachableKw,
193 NopKw,
194
195 I32Kw,
197 I64Kw,
198 F32Kw,
199 F64Kw,
200 FuncrefKw,
201 ExternrefKw,
202
203 MutKw,
205 OffsetKw,
206 AlignKw,
207
208 LeftParen,
210 RightParen,
211 LeftBracket,
212 RightBracket,
213 LeftBrace,
214 RightBrace,
215 Semicolon,
216 Comma,
217 Dot,
218 Quote,
219 Dollar,
220 Plus,
221 Minus,
222 Star,
223 Slash,
224 Eq,
225 Colon,
226 Question,
227 Bang,
228 At,
229 Hash,
230 Percent,
231 Caret,
232 Ampersand,
233 LessThan,
234 GreaterThan,
235 Backslash,
236 Pipe,
237 Tilde,
238 Root,
240 SourceFile,
241 Module,
242 Item,
243}
244
245impl TokenType for WatSyntaxKind {
246 const END_OF_STREAM: Self = Self::Eof;
247 type Role = UniversalTokenRole;
248
249 fn role(&self) -> Self::Role {
250 match self {
251 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
252 Self::Comment => UniversalTokenRole::Comment,
253 Self::Eof => UniversalTokenRole::Eof,
254 _ => UniversalTokenRole::None,
255 }
256 }
257}
258
259impl ElementType for WatSyntaxKind {
260 type Role = UniversalElementRole;
261
262 fn role(&self) -> Self::Role {
263 match self {
264 Self::Root | Self::SourceFile => UniversalElementRole::Root,
265 Self::Error => UniversalElementRole::Error,
266 _ => UniversalElementRole::None,
267 }
268 }
269}