1use lang_util::SmolStr;
2
3#[derive(Debug, Clone, PartialEq, lang_util::Token)]
4#[allow(missing_docs)]
5pub enum Token {
6 #[lang_util(token = "const", kind = "storage qualifier", kind = "type qualifier")]
7 Const,
8 #[lang_util(token = "bool", kind = "type name")]
9 Bool,
10 #[lang_util(token = "float", kind = "type name")]
11 Float,
12 #[lang_util(token = "int", kind = "type name")]
13 Int,
14 #[lang_util(token = "uint", kind = "type name")]
15 UInt,
16 #[lang_util(token = "double", kind = "type name")]
17 Double,
18 #[lang_util(token = "bvec2", kind = "type name")]
19 BVec2,
20 #[lang_util(token = "bvec3", kind = "type name")]
21 BVec3,
22 #[lang_util(token = "bvec4", kind = "type name")]
23 BVec4,
24 #[lang_util(token = "ivec2", kind = "type name")]
25 IVec2,
26 #[lang_util(token = "ivec3", kind = "type name")]
27 IVec3,
28 #[lang_util(token = "ivec4", kind = "type name")]
29 IVec4,
30 #[lang_util(token = "uvec2", kind = "type name")]
31 UVec2,
32 #[lang_util(token = "uvec3", kind = "type name")]
33 UVec3,
34 #[lang_util(token = "uvec4", kind = "type name")]
35 UVec4,
36 #[lang_util(token = "vec2", kind = "type name")]
37 Vec2,
38 #[lang_util(token = "vec3", kind = "type name")]
39 Vec3,
40 #[lang_util(token = "vec4", kind = "type name")]
41 Vec4,
42 #[lang_util(token = "mat2", kind = "type name")]
43 Mat2,
44 #[lang_util(token = "mat3", kind = "type name")]
45 Mat3,
46 #[lang_util(token = "mat4", kind = "type name")]
47 Mat4,
48 #[lang_util(token = "mat2x2", kind = "type name")]
49 Mat2x2,
50 #[lang_util(token = "mat2x3", kind = "type name")]
51 Mat2x3,
52 #[lang_util(token = "mat2x4", kind = "type name")]
53 Mat2x4,
54 #[lang_util(token = "mat3x2", kind = "type name")]
55 Mat3x2,
56 #[lang_util(token = "mat3x3", kind = "type name")]
57 Mat3x3,
58 #[lang_util(token = "mat3x4", kind = "type name")]
59 Mat3x4,
60 #[lang_util(token = "mat4x2", kind = "type name")]
61 Mat4x2,
62 #[lang_util(token = "mat4x3", kind = "type name")]
63 Mat4x3,
64 #[lang_util(token = "mat4x4", kind = "type name")]
65 Mat4x4,
66 #[lang_util(token = "dvec2", kind = "type name")]
67 DVec2,
68 #[lang_util(token = "dvec3", kind = "type name")]
69 DVec3,
70 #[lang_util(token = "dvec4", kind = "type name")]
71 DVec4,
72 #[lang_util(token = "dmat2", kind = "type name")]
73 DMat2,
74 #[lang_util(token = "dmat3", kind = "type name")]
75 DMat3,
76 #[lang_util(token = "dmat4", kind = "type name")]
77 DMat4,
78 #[lang_util(token = "dmat2x2", kind = "type name")]
79 DMat2x2,
80 #[lang_util(token = "dmat2x3", kind = "type name")]
81 DMat2x3,
82 #[lang_util(token = "dmat2x4", kind = "type name")]
83 DMat2x4,
84 #[lang_util(token = "dmat3x2", kind = "type name")]
85 DMat3x2,
86 #[lang_util(token = "dmat3x3", kind = "type name")]
87 DMat3x3,
88 #[lang_util(token = "dmat3x4", kind = "type name")]
89 DMat3x4,
90 #[lang_util(token = "dmat4x2", kind = "type name")]
91 DMat4x2,
92 #[lang_util(token = "dmat4x3", kind = "type name")]
93 DMat4x3,
94 #[lang_util(token = "dmat4x4", kind = "type name")]
95 DMat4x4,
96 #[lang_util(
97 token = "centroid",
98 kind = "storage qualifier",
99 kind = "type qualifier"
100 )]
101 Centroid,
102 #[lang_util(token = "in", kind = "storage qualifier", kind = "type qualifier")]
103 In,
104 #[lang_util(token = "out", kind = "storage qualifier", kind = "type qualifier")]
105 Out,
106 #[lang_util(token = "inout", kind = "storage qualifier", kind = "type qualifier")]
107 InOut,
108 #[lang_util(token = "uniform", kind = "storage qualifier", kind = "type qualifier")]
109 Uniform,
110 #[lang_util(token = "patch", kind = "storage qualifier", kind = "type qualifier")]
111 Patch,
112 #[lang_util(token = "sample", kind = "storage qualifier", kind = "type qualifier")]
113 Sample,
114 #[lang_util(token = "buffer", kind = "storage qualifier", kind = "type qualifier")]
115 Buffer,
116 #[lang_util(token = "shared", kind = "storage qualifier", kind = "type qualifier")]
117 Shared,
118 #[lang_util(
119 token = "coherent",
120 kind = "storage qualifier",
121 kind = "type qualifier"
122 )]
123 Coherent,
124 #[lang_util(
125 token = "volatile",
126 kind = "storage qualifier",
127 kind = "type qualifier"
128 )]
129 Volatile,
130 #[lang_util(
131 token = "restrict",
132 kind = "storage qualifier",
133 kind = "type qualifier"
134 )]
135 Restrict,
136 #[lang_util(
137 token = "readonly",
138 kind = "storage qualifier",
139 kind = "type qualifier"
140 )]
141 ReadOnly,
142 #[lang_util(
143 token = "writeonly",
144 kind = "storage qualifier",
145 kind = "type qualifier"
146 )]
147 WriteOnly,
148 #[lang_util(
149 token = "attribute",
150 kind = "storage qualifier",
151 kind = "type qualifier"
152 )]
153 Attribute,
154 #[lang_util(token = "varying", kind = "storage qualifier", kind = "type qualifier")]
155 Varying,
156 #[lang_util(
157 token = "noperspective",
158 kind = "interpolation qualifier",
159 kind = "type qualifier"
160 )]
161 NoPerspective,
162 #[lang_util(
163 token = "flat",
164 kind = "interpolation qualifier",
165 kind = "type qualifier"
166 )]
167 Flat,
168 #[lang_util(
169 token = "smooth",
170 kind = "interpolation qualifier",
171 kind = "type qualifier"
172 )]
173 Smooth,
174 #[lang_util(token = "layout", kind = "layout qualifier", kind = "type qualifier")]
175 Layout,
176 #[lang_util(token = "atomic_uint", kind = "type name")]
177 AtomicUInt,
178 #[lang_util(token = "sampler1D", kind = "type name")]
179 Sampler1D,
180 #[lang_util(
181 token = "sampler1DShadow",
182 kind = "type name",
183 kind = "vulkan type name"
184 )]
185 Sampler1DShadow,
186 #[lang_util(
187 token = "sampler1DArray",
188 kind = "type name",
189 kind = "vulkan type name"
190 )]
191 Sampler1DArray,
192 #[lang_util(
193 token = "sampler1DArrayShadow",
194 kind = "type name",
195 kind = "vulkan type name"
196 )]
197 Sampler1DArrayShadow,
198 #[lang_util(token = "isampler1D", kind = "type name")]
199 ISampler1D,
200 #[lang_util(
201 token = "isampler1DArray",
202 kind = "type name",
203 kind = "vulkan type name"
204 )]
205 ISampler1DArray,
206 #[lang_util(token = "usampler1D", kind = "type name")]
207 USampler1D,
208 #[lang_util(
209 token = "usampler1DArray",
210 kind = "type name",
211 kind = "vulkan type name"
212 )]
213 USampler1DArray,
214 #[lang_util(token = "sampler2D", kind = "type name")]
215 Sampler2D,
216 #[lang_util(
217 token = "sampler2DShadow",
218 kind = "type name",
219 kind = "vulkan type name"
220 )]
221 Sampler2DShadow,
222 #[lang_util(
223 token = "sampler2DArray",
224 kind = "type name",
225 kind = "vulkan type name"
226 )]
227 Sampler2DArray,
228 #[lang_util(
229 token = "sampler2DArrayShadow",
230 kind = "type name",
231 kind = "vulkan type name"
232 )]
233 Sampler2DArrayShadow,
234 #[lang_util(token = "isampler2D", kind = "type name")]
235 ISampler2D,
236 #[lang_util(
237 token = "isampler2DArray",
238 kind = "type name",
239 kind = "vulkan type name"
240 )]
241 ISampler2DArray,
242 #[lang_util(token = "usampler2D", kind = "type name")]
243 USampler2D,
244 #[lang_util(
245 token = "usampler2DArray",
246 kind = "type name",
247 kind = "vulkan type name"
248 )]
249 USampler2DArray,
250 #[lang_util(token = "sampler2DRect", kind = "type name")]
251 Sampler2DRect,
252 #[lang_util(
253 token = "sampler2DRectShadow",
254 kind = "type name",
255 kind = "vulkan type name"
256 )]
257 Sampler2DRectShadow,
258 #[lang_util(
259 token = "isampler2DRect",
260 kind = "type name",
261 kind = "vulkan type name"
262 )]
263 ISampler2DRect,
264 #[lang_util(
265 token = "usampler2DRect",
266 kind = "type name",
267 kind = "vulkan type name"
268 )]
269 USampler2DRect,
270 #[lang_util(token = "sampler2DMS", kind = "type name")]
271 Sampler2DMs,
272 #[lang_util(token = "isampler2DMS", kind = "type name")]
273 ISampler2DMs,
274 #[lang_util(token = "usampler2DMS", kind = "type name")]
275 USampler2DMs,
276 #[lang_util(
277 token = "sampler2DMSArray",
278 kind = "type name",
279 kind = "vulkan type name"
280 )]
281 Sampler2DMsArray,
282 #[lang_util(
283 token = "isampler2DMSArray",
284 kind = "type name",
285 kind = "vulkan type name"
286 )]
287 ISampler2DMsArray,
288 #[lang_util(
289 token = "usampler2DMSArray",
290 kind = "type name",
291 kind = "vulkan type name"
292 )]
293 USampler2DMsArray,
294 #[lang_util(token = "sampler3D", kind = "type name")]
295 Sampler3D,
296 #[lang_util(token = "isampler3D", kind = "type name")]
297 ISampler3D,
298 #[lang_util(token = "usampler3D", kind = "type name")]
299 USampler3D,
300 #[lang_util(token = "samplerCube", kind = "type name")]
301 SamplerCube,
302 #[lang_util(
303 token = "samplerCubeShadow",
304 kind = "type name",
305 kind = "vulkan type name"
306 )]
307 SamplerCubeShadow,
308 #[lang_util(token = "isamplerCube", kind = "type name")]
309 ISamplerCube,
310 #[lang_util(token = "usamplerCube", kind = "type name")]
311 USamplerCube,
312 #[lang_util(
313 token = "samplerCubeArray",
314 kind = "type name",
315 kind = "vulkan type name"
316 )]
317 SamplerCubeArray,
318 #[lang_util(
319 token = "samplerCubeArrayShadow",
320 kind = "type name",
321 kind = "vulkan type name"
322 )]
323 SamplerCubeArrayShadow,
324 #[lang_util(
325 token = "isamplerCubeArray",
326 kind = "type name",
327 kind = "vulkan type name"
328 )]
329 ISamplerCubeArray,
330 #[lang_util(
331 token = "usamplerCubeArray",
332 kind = "type name",
333 kind = "vulkan type name"
334 )]
335 USamplerCubeArray,
336 #[lang_util(token = "samplerBuffer", kind = "type name")]
337 SamplerBuffer,
338 #[lang_util(
339 token = "isamplerBuffer",
340 kind = "type name",
341 kind = "vulkan type name"
342 )]
343 ISamplerBuffer,
344 #[lang_util(
345 token = "usamplerBuffer",
346 kind = "type name",
347 kind = "vulkan type name"
348 )]
349 USamplerBuffer,
350 #[lang_util(token = "image1D", kind = "type name")]
351 Image1D,
352 #[lang_util(token = "iimage1D", kind = "type name")]
353 IImage1D,
354 #[lang_util(token = "uimage1D", kind = "type name")]
355 UImage1D,
356 #[lang_util(token = "image1DArray", kind = "type name")]
357 Image1DArray,
358 #[lang_util(token = "iimage1DArray", kind = "type name")]
359 IImage1DArray,
360 #[lang_util(token = "uimage1DArray", kind = "type name")]
361 UImage1DArray,
362 #[lang_util(token = "image2D", kind = "type name")]
363 Image2D,
364 #[lang_util(token = "iimage2D", kind = "type name")]
365 IImage2D,
366 #[lang_util(token = "uimage2D", kind = "type name")]
367 UImage2D,
368 #[lang_util(token = "image2DArray", kind = "type name")]
369 Image2DArray,
370 #[lang_util(token = "iimage2DArray", kind = "type name")]
371 IImage2DArray,
372 #[lang_util(token = "uimage2DArray", kind = "type name")]
373 UImage2DArray,
374 #[lang_util(token = "image2DRect", kind = "type name")]
375 Image2DRect,
376 #[lang_util(token = "iimage2DRect", kind = "type name")]
377 IImage2DRect,
378 #[lang_util(token = "uimage2DRect", kind = "type name")]
379 UImage2DRect,
380 #[lang_util(token = "image2DMS", kind = "type name")]
381 Image2DMs,
382 #[lang_util(token = "iimage2DMS", kind = "type name")]
383 IImage2DMs,
384 #[lang_util(token = "uimage2DMS", kind = "type name")]
385 UImage2DMs,
386 #[lang_util(
387 token = "image2DMSArray",
388 kind = "type name",
389 kind = "vulkan type name"
390 )]
391 Image2DMsArray,
392 #[lang_util(
393 token = "iimage2DMSArray",
394 kind = "type name",
395 kind = "vulkan type name"
396 )]
397 IImage2DMsArray,
398 #[lang_util(
399 token = "uimage2DMSArray",
400 kind = "type name",
401 kind = "vulkan type name"
402 )]
403 UImage2DMsArray,
404 #[lang_util(token = "image3D", kind = "type name")]
405 Image3D,
406 #[lang_util(token = "iimage3D", kind = "type name")]
407 IImage3D,
408 #[lang_util(token = "uimage3D", kind = "type name")]
409 UImage3D,
410 #[lang_util(token = "imageCube", kind = "type name")]
411 ImageCube,
412 #[lang_util(token = "iimageCube", kind = "type name")]
413 IImageCube,
414 #[lang_util(token = "uimageCube", kind = "type name")]
415 UImageCube,
416 #[lang_util(
417 token = "imageCubeArray",
418 kind = "type name",
419 kind = "vulkan type name"
420 )]
421 ImageCubeArray,
422 #[lang_util(
423 token = "iimageCubeArray",
424 kind = "type name",
425 kind = "vulkan type name"
426 )]
427 IImageCubeArray,
428 #[lang_util(
429 token = "uimageCubeArray",
430 kind = "type name",
431 kind = "vulkan type name"
432 )]
433 UImageCubeArray,
434 #[lang_util(token = "imageBuffer", kind = "type name")]
435 ImageBuffer,
436 #[lang_util(token = "iimageBuffer", kind = "type name")]
437 IImageBuffer,
438 #[lang_util(token = "uimageBuffer", kind = "type name")]
439 UImageBuffer,
440
441 #[lang_util(token = "texture1D")]
443 Texture1D,
444 #[lang_util(token = "texture1DArray")]
445 Texture1DArray,
446 #[lang_util(token = "itexture1D")]
447 ITexture1D,
448 #[lang_util(token = "itexture1DArray")]
449 ITexture1DArray,
450 #[lang_util(token = "utexture1D")]
451 UTexture1D,
452 #[lang_util(token = "utexture1DArray")]
453 UTexture1DArray,
454 #[lang_util(token = "texture2D")]
455 Texture2D,
456 #[lang_util(token = "texture2DArray")]
457 Texture2DArray,
458 #[lang_util(token = "itexture2D")]
459 ITexture2D,
460 #[lang_util(token = "itexture2DArray")]
461 ITexture2DArray,
462 #[lang_util(token = "utexture2D")]
463 UTexture2D,
464 #[lang_util(token = "utexture2DArray")]
465 UTexture2DArray,
466 #[lang_util(token = "texture2DRect")]
467 Texture2DRect,
468 #[lang_util(token = "itexture2DRect")]
469 ITexture2DRect,
470 #[lang_util(token = "utexture2DRect")]
471 UTexture2DRect,
472 #[lang_util(token = "texture2DMS")]
473 Texture2DMs,
474 #[lang_util(token = "itexture2DMS")]
475 ITexture2DMs,
476 #[lang_util(token = "utexture2DMS")]
477 UTexture2DMs,
478 #[lang_util(token = "texture2DMSArray")]
479 Texture2DMsArray,
480 #[lang_util(token = "itexture2DMSArray")]
481 ITexture2DMsArray,
482 #[lang_util(token = "utexture2DMSArray")]
483 UTexture2DMsArray,
484 #[lang_util(token = "texture3D")]
485 Texture3D,
486 #[lang_util(token = "itexture3D")]
487 ITexture3D,
488 #[lang_util(token = "utexture3D")]
489 UTexture3D,
490 #[lang_util(token = "textureCube")]
491 TextureCube,
492 #[lang_util(token = "itextureCube")]
493 ITextureCube,
494 #[lang_util(token = "utextureCube")]
495 UTextureCube,
496 #[lang_util(token = "textureCubeArray")]
497 TextureCubeArray,
498 #[lang_util(token = "itextureCubeArray")]
499 ITextureCubeArray,
500 #[lang_util(token = "utextureCubeArray")]
501 UTextureCubeArray,
502 #[lang_util(token = "textureBuffer")]
503 TextureBuffer,
504 #[lang_util(token = "itextureBuffer")]
505 ITextureBuffer,
506 #[lang_util(token = "utextureBuffer")]
507 UTextureBuffer,
508 #[lang_util(token = "sampler")]
509 Sampler,
510 #[lang_util(token = "samplerShadow")]
511 SamplerShadow,
512 #[lang_util(token = "subpassInput")]
513 SubpassInput,
514 #[lang_util(token = "isubpassInput")]
515 ISubpassInput,
516 #[lang_util(token = "usubpassInput")]
517 USubpassInput,
518 #[lang_util(token = "subpassInputMS")]
519 SubpassInputMs,
520 #[lang_util(token = "isubpassInputMS")]
521 ISubpassInputMs,
522 #[lang_util(token = "usubpassInputMS")]
523 USubpassInputMs,
524 #[lang_util(token = "struct", kind = "struct", kind = "keyword")]
526 Struct,
527 #[lang_util(token = "void", kind = "type name")]
528 Void,
529 #[lang_util(token = "while", kind = "keyword")]
530 While,
531 #[lang_util(token = "break", kind = "keyword")]
532 Break,
533 #[lang_util(token = "continue", kind = "keyword")]
534 Continue,
535 #[lang_util(token = "do", kind = "keyword")]
536 Do,
537 #[lang_util(token = "else", kind = "keyword")]
538 Else,
539 #[lang_util(token = "for", kind = "keyword")]
540 For,
541 #[lang_util(token = "if", kind = "keyword")]
542 If,
543 #[lang_util(token = "discard", kind = "keyword")]
544 Discard,
545 #[lang_util(token = "return", kind = "keyword")]
546 Return,
547 #[lang_util(token = "switch", kind = "keyword")]
548 Switch,
549 #[lang_util(token = "case", kind = "keyword")]
550 Case,
551 #[lang_util(token = "default", kind = "keyword")]
552 Default,
553 #[lang_util(
554 token = "subroutine",
555 kind = "storage qualifier",
556 kind = "type qualifier"
557 )]
558 Subroutine,
559 #[lang_util(parser = "ident", kind = "identifier")]
560 Identifier(SmolStr),
561 #[lang_util(parser = "ty_name", kind = "type name")]
562 TypeName(SmolStr), #[lang_util(parser = "float_constant", kind = "literal")]
564 FloatConstant(f32),
565 #[lang_util(parser = "int_constant", kind = "literal")]
566 IntConstant(i32),
567 #[lang_util(parser = "uint_constant", kind = "literal")]
568 UIntConstant(u32),
569 #[lang_util(parser = "bool_constant", kind = "literal")]
570 BoolConstant(bool),
571 #[lang_util(parser = "double_constant", kind = "literal")]
572 DoubleConstant(f64),
573 #[lang_util(token = "<<", kind = "binary operator", kind = "operator")]
574 LeftOp,
575 #[lang_util(token = ">>", kind = "binary operator", kind = "operator")]
576 RightOp,
577 #[lang_util(token = "++", kind = "unary operator", kind = "operator")]
578 IncOp,
579 #[lang_util(token = "--", kind = "unary operator", kind = "operator")]
580 DecOp,
581 #[lang_util(token = "<=", kind = "binary operator", kind = "operator")]
582 LeOp,
583 #[lang_util(token = ">=", kind = "binary operator", kind = "operator")]
584 GeOp,
585 #[lang_util(token = "==", kind = "binary operator", kind = "operator")]
586 EqOp,
587 #[lang_util(token = "!=", kind = "binary operator", kind = "operator")]
588 NeOp,
589 #[lang_util(token = "&&", kind = "binary operator", kind = "operator")]
590 AndOp,
591 #[lang_util(token = "||", kind = "binary operator", kind = "operator")]
592 OrOp,
593 #[lang_util(token = "^^", kind = "binary operator", kind = "operator")]
594 XorOp,
595 #[lang_util(token = "*=", kind = "binary operator", kind = "operator")]
596 MulAssign,
597 #[lang_util(token = "/=", kind = "binary operator", kind = "operator")]
598 DivAssign,
599 #[lang_util(token = "+=", kind = "binary operator", kind = "operator")]
600 AddAssign,
601 #[lang_util(token = "%=", kind = "binary operator", kind = "operator")]
602 ModAssign,
603 #[lang_util(token = "<<=", kind = "binary operator", kind = "operator")]
604 LeftAssign,
605 #[lang_util(token = ">>=", kind = "binary operator", kind = "operator")]
606 RightAssign,
607 #[lang_util(token = "&=", kind = "binary operator", kind = "operator")]
608 AndAssign,
609 #[lang_util(token = "^=", kind = "binary operator", kind = "operator")]
610 XorAssign,
611 #[lang_util(token = "|=", kind = "binary operator", kind = "operator")]
612 OrAssign,
613 #[lang_util(token = "-=", kind = "binary operator", kind = "operator")]
614 SubAssign,
615 #[lang_util(token = "(")]
616 LeftParen,
617 #[lang_util(token = ")")]
618 RightParen,
619 #[lang_util(token = "[")]
620 LeftBracket,
621 #[lang_util(token = "]")]
622 RightBracket,
623 #[lang_util(token = "{")]
624 LeftBrace,
625 #[lang_util(token = "}")]
626 RightBrace,
627 #[lang_util(token = ".", kind = "binary operator", kind = "operator")]
628 Dot,
629 #[lang_util(token = ",", kind = "operator")]
630 Comma,
631 #[lang_util(token = ":", kind = "operator")]
632 Colon,
633 #[lang_util(token = "=", kind = "binary operator", kind = "operator")]
634 Equal,
635 #[lang_util(token = ";")]
636 Semicolon,
637 #[lang_util(token = "!", kind = "unary operator", kind = "operator")]
638 Bang,
639 #[lang_util(
640 token = "-",
641 kind = "binary operator",
642 kind = "unary operator",
643 kind = "operator"
644 )]
645 Dash,
646 #[lang_util(token = "~", kind = "unary operator", kind = "operator")]
647 Tilde,
648 #[lang_util(
649 token = "+",
650 kind = "binary operator",
651 kind = "unary operator",
652 kind = "operator"
653 )]
654 Plus,
655 #[lang_util(token = "*", kind = "binary operator", kind = "operator")]
656 Star,
657 #[lang_util(token = "/", kind = "binary operator", kind = "operator")]
658 Slash,
659 #[lang_util(token = "%", kind = "binary operator", kind = "operator")]
660 Percent,
661 #[lang_util(token = "<", kind = "binary operator", kind = "operator")]
662 LeftAngle,
663 #[lang_util(token = ">", kind = "binary operator", kind = "operator")]
664 RightAngle,
665 #[lang_util(token = "|", kind = "binary operator", kind = "operator")]
666 VerticalBar,
667 #[lang_util(token = "^", kind = "binary operator", kind = "operator")]
668 Caret,
669 #[lang_util(token = "&", kind = "binary operator", kind = "operator")]
670 Ampersand,
671 #[lang_util(token = "?", kind = "operator")]
672 Question,
673 #[lang_util(token = "invariant")]
674 Invariant,
675 #[lang_util(token = "precise", kind = "type qualifier")]
676 Precise,
677 #[lang_util(token = "highp", kind = "precision qualifier", kind = "type qualifier")]
678 HighPrecision,
679 #[lang_util(
680 token = "mediump",
681 kind = "precision qualifier",
682 kind = "type qualifier"
683 )]
684 MediumPrecision,
685 #[lang_util(token = "lowp", kind = "precision qualifier", kind = "type qualifier")]
686 LowPrecision,
687 #[lang_util(token = "precision")]
688 Precision,
689
690 #[lang_util(display = "<whitespace>", parser(display), kind = "trivia")]
692 Whitespace,
693 #[lang_util(display = "<single line comment>", parser(display), kind = "trivia")]
694 SingleLineComment,
695 #[lang_util(display = "<multi line comment>", parser(display), kind = "trivia")]
696 MultiLineComment,
697
698 #[lang_util(display = "#define", parser(display), kind = "preprocessor directive")]
700 PpDefine,
701 #[lang_util(display = "#else", parser(display), kind = "preprocessor directive")]
702 PpElse,
703 #[lang_util(display = "#elif", parser(display), kind = "preprocessor directive")]
704 PpElif,
705 #[lang_util(display = "#endif", parser(display), kind = "preprocessor directive")]
706 PpEndIf,
707 #[lang_util(display = "#error", parser(display), kind = "preprocessor directive")]
708 PpError,
709 #[lang_util(display = "#if", parser(display), kind = "preprocessor directive")]
710 PpIf,
711 #[lang_util(display = "#ifdef", parser(display), kind = "preprocessor directive")]
712 PpIfDef,
713 #[lang_util(display = "#ifndef", parser(display), kind = "preprocessor directive")]
714 PpIfNDef,
715 #[lang_util(display = "#include", parser(display), kind = "preprocessor directive")]
716 PpInclude,
717 #[lang_util(display = "#line", parser(display), kind = "preprocessor directive")]
718 PpLine,
719 #[lang_util(display = "#pragma", parser(display), kind = "preprocessor directive")]
720 PpPragma,
721 #[lang_util(display = "#undef", parser(display), kind = "preprocessor directive")]
722 PpUndef,
723 #[lang_util(display = "#version", parser(display), kind = "preprocessor directive")]
724 PpVersion,
725 #[lang_util(
726 display = "#extension",
727 parser(display),
728 kind = "preprocessor directive"
729 )]
730 PpExtension,
731
732 #[lang_util(
733 display = "<preprocessor string>",
734 parser(display),
735 kind = "preprocessor string"
736 )]
737 PpRest(String),
738
739 #[lang_util(display = "core", parser(display), kind = "version profile")]
740 PpCore,
741 #[lang_util(display = "compatibility", parser(display), kind = "version profile")]
742 PpCompatibility,
743 #[lang_util(display = "es", parser(display), kind = "version profile")]
744 PpEs,
745
746 #[lang_util(display = "require", parser(display), kind = "extension behavior")]
747 PpExtRequire,
748 #[lang_util(display = "enable", parser(display), kind = "extension behavior")]
749 PpExtEnable,
750 #[lang_util(display = "warn", parser(display), kind = "extension behavior")]
751 PpExtWarn,
752 #[lang_util(display = "disable", parser(display), kind = "extension behavior")]
753 PpExtDisable,
754
755 #[lang_util(display = "<{}>", parser(display), kind = "include path")]
756 PpPathAbsolute(String),
757 #[lang_util(display = "\"{}\"", parser(display), kind = "include path")]
758 PpPathRelative(String),
759
760 #[lang_util(display = "<invalid token>", parser(display), kind = "error")]
761 Error,
762}
763
764impl Token {
765 pub fn is_pp(&self) -> bool {
767 matches!(
768 self,
769 Self::PpDefine
770 | Self::PpElse
771 | Self::PpElif
772 | Self::PpEndIf
773 | Self::PpError
774 | Self::PpIf
775 | Self::PpIfDef
776 | Self::PpIfNDef
777 | Self::PpInclude
778 | Self::PpLine
779 | Self::PpPragma
780 | Self::PpUndef
781 | Self::PpVersion
782 | Self::PpExtension
783 )
784 }
785
786 pub fn as_str(&self) -> &str {
788 match self {
789 Self::Identifier(s) => s,
790 Self::TypeName(s) => s,
791 Self::PpPathRelative(s) => s,
792 Self::PpPathAbsolute(s) => s,
793 _ => panic!("cannot convert token {:?}, to str", self),
794 }
795 }
796}
797
798macro_rules! impl_from {
799 ($t:ty => $i:ident) => {
800 impl From<Token> for $t {
801 fn from(value: Token) -> Self {
802 match value {
803 Token::$i(i) => i,
804 other => panic!(concat!("cannot convert {:?} into ", stringify!($i)), other),
805 }
806 }
807 }
808 };
809}
810
811impl_from!(i32 => IntConstant);
812impl_from!(u32 => UIntConstant);
813impl_from!(f32 => FloatConstant);
814impl_from!(f64 => DoubleConstant);
815impl_from!(bool => BoolConstant);
816
817impl From<Token> for String {
818 fn from(value: Token) -> Self {
819 match value {
820 Token::PpRest(s) => s,
821 other => panic!("cannot convert {:?} into String", other),
822 }
823 }
824}