mago_syntax/
macros.rs

1#[macro_export]
2macro_rules! T {
3    ("eval") => {
4        $crate::token::TokenKind::Eval
5    };
6    ("die") => {
7        $crate::token::TokenKind::Die
8    };
9    ("self") => {
10        $crate::token::TokenKind::Self_
11    };
12    ("parent") => {
13        $crate::token::TokenKind::Parent
14    };
15    ("`") => {
16        $crate::token::TokenKind::Backtick
17    };
18    ("<<<") => {
19        $crate::token::TokenKind::DocumentStart(_)
20    };
21    (">>>") => {
22        $crate::token::TokenKind::DocumentEnd
23    };
24    ("from") => {
25        $crate::token::TokenKind::From
26    };
27    ("print") => {
28        $crate::token::TokenKind::Print
29    };
30    ("$") => {
31        $crate::token::TokenKind::Dollar
32    };
33    ("__halt_compiler") => {
34        $crate::token::TokenKind::HaltCompiler
35    };
36    ("readonly") => {
37        $crate::token::TokenKind::Readonly
38    };
39    ("global") => {
40        $crate::token::TokenKind::Global
41    };
42    ("abstract") => {
43        $crate::token::TokenKind::Abstract
44    };
45    ("&") => {
46        $crate::token::TokenKind::Ampersand
47    };
48    ("&=") => {
49        $crate::token::TokenKind::AmpersandEqual
50    };
51    ("&&") => {
52        $crate::token::TokenKind::AmpersandAmpersand
53    };
54    ("&&=") => {
55        $crate::token::TokenKind::AmpersandAmpersandEqual
56    };
57    ("array") => {
58        $crate::token::TokenKind::Array
59    };
60    ("(array)") => {
61        $crate::token::TokenKind::ArrayCast
62    };
63    ("->") => {
64        $crate::token::TokenKind::MinusGreaterThan
65    };
66    ("?->") => {
67        $crate::token::TokenKind::QuestionMinusGreaterThan
68    };
69    ("@") => {
70        $crate::token::TokenKind::At
71    };
72    ("as") => {
73        $crate::token::TokenKind::As
74    };
75    ("*") => {
76        $crate::token::TokenKind::Asterisk
77    };
78    ("#[") => {
79        $crate::token::TokenKind::HashLeftBracket
80    };
81    ("!") => {
82        $crate::token::TokenKind::Bang
83    };
84    ("!=") => {
85        $crate::token::TokenKind::BangEqual
86    };
87    ("<>") => {
88        $crate::token::TokenKind::LessThanGreaterThan
89    };
90    ("!==") => {
91        $crate::token::TokenKind::BangEqualEqual
92    };
93    ("<=>") => {
94        $crate::token::TokenKind::LessThanEqualGreaterThan
95    };
96    ("(bool)") => {
97        $crate::token::TokenKind::BoolCast
98    };
99    ("(boolean)") => {
100        $crate::token::TokenKind::BooleanCast
101    };
102    ("and") => {
103        $crate::token::TokenKind::And
104    };
105    ("or") => {
106        $crate::token::TokenKind::Or
107    };
108    ("break") => {
109        $crate::token::TokenKind::Break
110    };
111    ("callable") => {
112        $crate::token::TokenKind::Callable
113    };
114    ("^") => {
115        $crate::token::TokenKind::Caret
116    };
117    ("^=") => {
118        $crate::token::TokenKind::CaretEqual
119    };
120    ("case") => {
121        $crate::token::TokenKind::Case
122    };
123    ("catch") => {
124        $crate::token::TokenKind::Catch
125    };
126    ("class") => {
127        $crate::token::TokenKind::Class
128    };
129    ("__CLASS__") => {
130        $crate::token::TokenKind::ClassConstant
131    };
132    ("__TRAIT__") => {
133        $crate::token::TokenKind::TraitConstant
134    };
135    ("__FUNCTION__") => {
136        $crate::token::TokenKind::FunctionConstant
137    };
138    ("__METHOD__") => {
139        $crate::token::TokenKind::MethodConstant
140    };
141    ("__LINE__") => {
142        $crate::token::TokenKind::LineConstant
143    };
144    ("__FILE__") => {
145        $crate::token::TokenKind::FileConstant
146    };
147    ("clone") => {
148        $crate::token::TokenKind::Clone
149    };
150    ("-=") => {
151        $crate::token::TokenKind::MinusEqual
152    };
153    ("?>") => {
154        $crate::token::TokenKind::CloseTag
155    };
156    ("??") => {
157        $crate::token::TokenKind::QuestionQuestion
158    };
159    ("??=") => {
160        $crate::token::TokenKind::QuestionQuestionEqual
161    };
162    ("*=") => {
163        $crate::token::TokenKind::AsteriskEqual
164    };
165    (":") => {
166        $crate::token::TokenKind::Colon
167    };
168    (",") => {
169        $crate::token::TokenKind::Comma
170    };
171    ("// comment") => {
172        $crate::token::TokenKind::SingleLineComment
173    };
174    ("# comment") => {
175        $crate::token::TokenKind::HashComment
176    };
177    ("/* comment */") => {
178        $crate::token::TokenKind::MultiLineComment
179    };
180    ("/** comment */") => {
181        $crate::token::TokenKind::DocBlockComment
182    };
183    ("const") => {
184        $crate::token::TokenKind::Const
185    };
186    ("continue") => {
187        $crate::token::TokenKind::Continue
188    };
189    ("declare") => {
190        $crate::token::TokenKind::Declare
191    };
192    ("--") => {
193        $crate::token::TokenKind::MinusMinus
194    };
195    ("default") => {
196        $crate::token::TokenKind::Default
197    };
198    ("__DIR__") => {
199        $crate::token::TokenKind::DirConstant
200    };
201    ("/=") => {
202        $crate::token::TokenKind::SlashEqual
203    };
204    ("do") => {
205        $crate::token::TokenKind::Do
206    };
207    ("${") => {
208        $crate::token::TokenKind::DollarLeftBrace
209    };
210    (".") => {
211        $crate::token::TokenKind::Dot
212    };
213    (".=") => {
214        $crate::token::TokenKind::DotEqual
215    };
216    ("=>") => {
217        $crate::token::TokenKind::EqualGreaterThan
218    };
219    ("(double)") => {
220        $crate::token::TokenKind::DoubleCast
221    };
222    ("(real)") => {
223        $crate::token::TokenKind::RealCast
224    };
225    ("(float)") => {
226        $crate::token::TokenKind::FloatCast
227    };
228    ("::") => {
229        $crate::token::TokenKind::ColonColon
230    };
231    ("==") => {
232        $crate::token::TokenKind::EqualEqual
233    };
234    ("\"") => {
235        $crate::token::TokenKind::DoubleQuote
236    };
237    ("else") => {
238        $crate::token::TokenKind::Else
239    };
240    ("echo") => {
241        $crate::token::TokenKind::Echo
242    };
243    ("...") => {
244        $crate::token::TokenKind::DotDotDot
245    };
246    ("elseif") => {
247        $crate::token::TokenKind::ElseIf
248    };
249    ("empty") => {
250        $crate::token::TokenKind::Empty
251    };
252    ("enddeclare") => {
253        $crate::token::TokenKind::EndDeclare
254    };
255    ("endfor") => {
256        $crate::token::TokenKind::EndFor
257    };
258    ("endforeach") => {
259        $crate::token::TokenKind::EndForeach
260    };
261    ("endif") => {
262        $crate::token::TokenKind::EndIf
263    };
264    ("endswitch") => {
265        $crate::token::TokenKind::EndSwitch
266    };
267    ("endwhile") => {
268        $crate::token::TokenKind::EndWhile
269    };
270    ("enum") => {
271        $crate::token::TokenKind::Enum
272    };
273    ("=") => {
274        $crate::token::TokenKind::Equal
275    };
276    ("extends") => {
277        $crate::token::TokenKind::Extends
278    };
279    ("false") => {
280        $crate::token::TokenKind::False
281    };
282    ("final") => {
283        $crate::token::TokenKind::Final
284    };
285    ("finally") => {
286        $crate::token::TokenKind::Finally
287    };
288    ("fn") => {
289        $crate::token::TokenKind::Fn
290    };
291    ("for") => {
292        $crate::token::TokenKind::For
293    };
294    ("foreach") => {
295        $crate::token::TokenKind::Foreach
296    };
297    ("\\Fully\\Qualified\\Identifier") => {
298        $crate::token::TokenKind::FullyQualifiedIdentifier
299    };
300    ("function") => {
301        $crate::token::TokenKind::Function
302    };
303    ("goto") => {
304        $crate::token::TokenKind::Goto
305    };
306    (">") => {
307        $crate::token::TokenKind::GreaterThan
308    };
309    (">=") => {
310        $crate::token::TokenKind::GreaterThanEqual
311    };
312    ("Identifier") => {
313        $crate::token::TokenKind::Identifier
314    };
315    ("if") => {
316        $crate::token::TokenKind::If
317    };
318    ("implements") => {
319        $crate::token::TokenKind::Implements
320    };
321    ("include") => {
322        $crate::token::TokenKind::Include
323    };
324    ("include_once") => {
325        $crate::token::TokenKind::IncludeOnce
326    };
327    ("++") => {
328        $crate::token::TokenKind::PlusPlus
329    };
330    ("instanceof") => {
331        $crate::token::TokenKind::Instanceof
332    };
333    ("insteadof") => {
334        $crate::token::TokenKind::Insteadof
335    };
336    ("exit") => {
337        $crate::token::TokenKind::Exit
338    };
339    ("unset") => {
340        $crate::token::TokenKind::Unset
341    };
342    ("isset") => {
343        $crate::token::TokenKind::Isset
344    };
345    ("list") => {
346        $crate::token::TokenKind::List
347    };
348    ("(int)") => {
349        $crate::token::TokenKind::IntCast
350    };
351    ("(integer)") => {
352        $crate::token::TokenKind::IntegerCast
353    };
354    ("interface") => {
355        $crate::token::TokenKind::Interface
356    };
357    ("{") => {
358        $crate::token::TokenKind::LeftBrace
359    };
360    ("[") => {
361        $crate::token::TokenKind::LeftBracket
362    };
363    ("(") => {
364        $crate::token::TokenKind::LeftParenthesis
365    };
366    (")") => {
367        $crate::token::TokenKind::RightParenthesis
368    };
369    ("<<") => {
370        $crate::token::TokenKind::LeftShift
371    };
372    ("<<=") => {
373        $crate::token::TokenKind::LeftShiftEqual
374    };
375    (">>") => {
376        $crate::token::TokenKind::RightShift
377    };
378    (">>=") => {
379        $crate::token::TokenKind::RightShiftEqual
380    };
381    ("<") => {
382        $crate::token::TokenKind::LessThan
383    };
384    ("<=") => {
385        $crate::token::TokenKind::LessThanEqual
386    };
387    ("match") => {
388        $crate::token::TokenKind::Match
389    };
390    ("-") => {
391        $crate::token::TokenKind::Minus
392    };
393    ("namespace") => {
394        $crate::token::TokenKind::Namespace
395    };
396    ("\\") => {
397        $crate::token::TokenKind::NamespaceSeparator
398    };
399    ("__NAMESPACE__") => {
400        $crate::token::TokenKind::NamespaceConstant
401    };
402    ("new") => {
403        $crate::token::TokenKind::New
404    };
405    ("null") => {
406        $crate::token::TokenKind::Null
407    };
408    ("(object)") => {
409        $crate::token::TokenKind::ObjectCast
410    };
411    ("(unset)") => {
412        $crate::token::TokenKind::UnsetCast
413    };
414    ("(void)") => {
415        $crate::token::TokenKind::VoidCast
416    };
417    ("<?php") => {
418        $crate::token::TokenKind::OpenTag
419    };
420    ("<?=") => {
421        $crate::token::TokenKind::EchoTag
422    };
423    ("<?") => {
424        $crate::token::TokenKind::ShortOpenTag
425    };
426    ("%") => {
427        $crate::token::TokenKind::Percent
428    };
429    ("%=") => {
430        $crate::token::TokenKind::PercentEqual
431    };
432    ("|") => {
433        $crate::token::TokenKind::Pipe
434    };
435    ("|=") => {
436        $crate::token::TokenKind::PipeEqual
437    };
438    ("+") => {
439        $crate::token::TokenKind::Plus
440    };
441    ("+=") => {
442        $crate::token::TokenKind::PlusEqual
443    };
444    ("**") => {
445        $crate::token::TokenKind::AsteriskAsterisk
446    };
447    ("**=") => {
448        $crate::token::TokenKind::AsteriskAsteriskEqual
449    };
450    ("private(set)") => {
451        $crate::token::TokenKind::PrivateSet
452    };
453    ("private") => {
454        $crate::token::TokenKind::Private
455    };
456    ("protected") => {
457        $crate::token::TokenKind::Protected
458    };
459    ("protected(set)") => {
460        $crate::token::TokenKind::ProtectedSet
461    };
462    ("public") => {
463        $crate::token::TokenKind::Public
464    };
465    ("public(set)") => {
466        $crate::token::TokenKind::PublicSet
467    };
468    ("Qualified\\Identifier") => {
469        $crate::token::TokenKind::QualifiedIdentifier
470    };
471    ("?") => {
472        $crate::token::TokenKind::Question
473    };
474    ("?:") => {
475        $crate::token::TokenKind::QuestionColon
476    };
477    ("require") => {
478        $crate::token::TokenKind::Require
479    };
480    ("require_once") => {
481        $crate::token::TokenKind::RequireOnce
482    };
483    ("return") => {
484        $crate::token::TokenKind::Return
485    };
486    ("}") => {
487        $crate::token::TokenKind::RightBrace
488    };
489    ("]") => {
490        $crate::token::TokenKind::RightBracket
491    };
492    (";") => {
493        $crate::token::TokenKind::Semicolon
494    };
495    ("/") => {
496        $crate::token::TokenKind::Slash
497    };
498    ("static") => {
499        $crate::token::TokenKind::Static
500    };
501    ("(string)") => {
502        $crate::token::TokenKind::StringCast
503    };
504    ("(binary)") => {
505        $crate::token::TokenKind::BinaryCast
506    };
507    ("switch") => {
508        $crate::token::TokenKind::Switch
509    };
510    ("throw") => {
511        $crate::token::TokenKind::Throw
512    };
513    ("trait") => {
514        $crate::token::TokenKind::Trait
515    };
516    ("===") => {
517        $crate::token::TokenKind::EqualEqualEqual
518    };
519    ("true") => {
520        $crate::token::TokenKind::True
521    };
522    ("try") => {
523        $crate::token::TokenKind::Try
524    };
525    ("use") => {
526        $crate::token::TokenKind::Use
527    };
528    ("var") => {
529        $crate::token::TokenKind::Var
530    };
531    ("$variable") => {
532        $crate::token::TokenKind::Variable
533    };
534    ("yield") => {
535        $crate::token::TokenKind::Yield
536    };
537    ("while") => {
538        $crate::token::TokenKind::While
539    };
540    ("~") => {
541        $crate::token::TokenKind::Tilde
542    };
543    ("||") => {
544        $crate::token::TokenKind::PipePipe
545    };
546    ("xor") => {
547        $crate::token::TokenKind::Xor
548    };
549    ("|>") => {
550        $crate::token::TokenKind::PipeGreaterThan
551    };
552    ($name:ident) => {
553        $crate::token::TokenKind::$name
554    };
555    ($first:tt | $($rest:tt)+) => {
556        $crate::T![$first] | $crate::T![$($rest)+]
557    };
558    ($($kind:tt),+ $(,)?) => {
559        &[$($crate::T![$kind]),+]
560    };
561}