@@ -268,6 +268,8 @@ namespace solidity::langutil
268
268
/* Yul-specific tokens, but not keywords. */ \
269
269
T (Leave, " leave" , 0 ) \
270
270
\
271
+ T (NonExperimentalEnd, nullptr , 0 ) /* used as non-experimental enum end marker */ \
272
+ T (ExperimentalEnd, nullptr , 0 ) /* used as experimental enum end marker */ \
271
273
/* Illegal token - not able to scan. */ \
272
274
T (Illegal, " ILLEGAL" , 0 ) \
273
275
\
@@ -323,6 +325,39 @@ namespace TokenTraits
323
325
tok == Token::TrueLiteral || tok == Token::FalseLiteral || tok == Token::HexStringLiteral || tok == Token::Hex;
324
326
}
325
327
328
+ constexpr bool isExperimentalSolidityKeyword (Token token)
329
+ {
330
+ return
331
+ token == Token::Assembly ||
332
+ token == Token::Contract ||
333
+ token == Token::External ||
334
+ token == Token::Fallback ||
335
+ token == Token::Pragma ||
336
+ token == Token::Import ||
337
+ token == Token::As ||
338
+ token == Token::Function ||
339
+ token == Token::Let ||
340
+ token == Token::Return ||
341
+ token == Token::Type ||
342
+ token == Token::If ||
343
+ token == Token::Else ||
344
+ token == Token::Do ||
345
+ token == Token::While ||
346
+ token == Token::For ||
347
+ token == Token::Continue ||
348
+ token == Token::Break;
349
+ // TODO: see isExperimentalSolidityKeyword below
350
+ // || (token > Token::NonExperimentalEnd && token < Token::ExperimentalEnd);
351
+ }
352
+
353
+ constexpr bool isExperimentalSolidityOnlyKeyword (Token)
354
+ {
355
+ // TODO: use token > Token::NonExperimentalEnd && token < Token::ExperimentalEnd
356
+ // as soon as other experimental tokens are added. For now the comparison generates
357
+ // a warning from clang because it is always false.
358
+ return false ;
359
+ }
360
+
326
361
bool isYulKeyword (std::string const & _literal);
327
362
328
363
Token AssignmentToBinaryOp (Token op);
0 commit comments