@@ -162,28 +162,6 @@ int conditional_keyword(bool condition, int token)
162162 return make_identifier ();
163163}
164164
165- int c17_keyword (int token)
166- {
167- if (PARSER.c17 )
168- {
169- loc ();
170- return token;
171- }
172- else
173- return make_identifier ();
174- }
175-
176- int c23_keyword (int token)
177- {
178- if (PARSER.c23 )
179- {
180- loc ();
181- return token;
182- }
183- else
184- return make_identifier ();
185- }
186-
187165int MSC_cpp_keyword (int token)
188166{
189167 if (PARSER.cpp98 && PARSER.mode ==configt::ansi_ct::flavourt::VISUAL_STUDIO)
@@ -852,15 +830,22 @@ enable_or_disable ("enable"|"disable")
852830 return make_identifier ();
853831 }
854832
833+ %{
834+ /* C23 Keywords */
835+ %}
836+
837+ " _BitInt" { return conditional_keyword (PARSER.c23 , TOK_BITINT); }
838+ " _typeof_unqual" { return conditional_keyword (PARSER.c23 , TOK_TYPEOF_UNQUAL); }
839+
855840%{
856841/* C++ Keywords and Operators */
857842%}
858843
859- " alignas" { return conditional_keyword (PARSER.cpp11 , TOK_ALIGNAS); } // C++11
860- " alignof" { return conditional_keyword (PARSER.cpp11 , TOK_ALIGNOF); } // C++11
844+ " alignas" { return conditional_keyword (PARSER.cpp11 || PARSER. c23 , TOK_ALIGNAS); }
845+ " alignof" { return conditional_keyword (PARSER.cpp11 || PARSER. c23 , TOK_ALIGNOF); }
861846" and" { return conditional_keyword (PARSER.cpp98 , TOK_ANDAND); }
862847" and_eq" { return conditional_keyword (PARSER.cpp98 , TOK_ANDASSIGN); }
863- " bool" { return conditional_keyword (PARSER.cpp98 , TOK_BOOL); }
848+ " bool" { return conditional_keyword (PARSER.cpp98 || PARSER. c23 , TOK_BOOL); }
864849" catch" { return conditional_keyword (PARSER.cpp98 , TOK_CATCH); }
865850" char16_t" { // C++11, but Visual Studio uses typedefs
866851 return conditional_keyword (
@@ -876,11 +861,11 @@ enable_or_disable ("enable"|"disable")
876861 }
877862" class" { return conditional_keyword (PARSER.cpp98 , TOK_CLASS); }
878863" compl" { return conditional_keyword (PARSER.cpp98 , ' ~' ); }
879- " constexpr" { return conditional_keyword (PARSER.cpp11 , TOK_CONSTEXPR); } // C++11
864+ " constexpr" { return conditional_keyword (PARSER.cpp11 || PARSER. c23 , TOK_CONSTEXPR); }
880865" delete" { return conditional_keyword (PARSER.cpp98 , TOK_DELETE); }
881866" decltype" { return conditional_keyword (PARSER.cpp11 , TOK_DECLTYPE); } // C++11
882867" explicit" { return conditional_keyword (PARSER.cpp98 , TOK_EXPLICIT); }
883- " false" { return conditional_keyword (PARSER.cpp98 , TOK_FALSE); }
868+ " false" { return conditional_keyword (PARSER.cpp98 || PARSER. c23 , TOK_FALSE); }
884869" friend" { return conditional_keyword (PARSER.cpp98 , TOK_FRIEND); }
885870" mutable" { return conditional_keyword (PARSER.cpp98 , TOK_MUTABLE); }
886871" namespace" { return conditional_keyword (PARSER.cpp98 , TOK_NAMESPACE); }
@@ -890,7 +875,7 @@ enable_or_disable ("enable"|"disable")
890875" noreturn" { return conditional_keyword (PARSER.cpp11 , TOK_NORETURN); } // C++11
891876" not" { return conditional_keyword (PARSER.cpp98 , ' !' ); }
892877" not_eq" { return conditional_keyword (PARSER.cpp98 , TOK_NE); }
893- " nullptr" { return conditional_keyword (PARSER.cpp11 , TOK_NULLPTR); } // C++11
878+ " nullptr" { return conditional_keyword (PARSER.cpp11 || PARSER. c23 , TOK_NULLPTR); }
894879" operator" { return conditional_keyword (PARSER.cpp98 , TOK_OPERATOR); }
895880" or" { return conditional_keyword (PARSER.cpp98 , TOK_OROR); }
896881" or_eq" { return conditional_keyword (PARSER.cpp98 , TOK_ORASSIGN); }
@@ -901,15 +886,15 @@ enable_or_disable ("enable"|"disable")
901886 // as a keyword, even though the documentation claims
902887 // it's a macro.
903888 return conditional_keyword (
904- PARSER.cpp11 ||
889+ PARSER.cpp11 || PARSER. c23 ||
905890 PARSER.mode == configt::ansi_ct::flavourt::VISUAL_STUDIO,
906891 TOK_STATIC_ASSERT);
907892 }
908893" template" { return conditional_keyword (PARSER.cpp98 , TOK_TEMPLATE); }
909894" this" { return conditional_keyword (PARSER.cpp98 , TOK_THIS); }
910- " thread_local" { return conditional_keyword (PARSER.cpp11 , TOK_THREAD_LOCAL); } // C++11
895+ " thread_local" { return conditional_keyword (PARSER.cpp11 || PARSER. c23 , TOK_THREAD_LOCAL); }
911896" throw" { return conditional_keyword (PARSER.cpp98 , TOK_THROW); }
912- " true" { return conditional_keyword (PARSER.cpp98 , TOK_TRUE); }
897+ " true" { return conditional_keyword (PARSER.cpp98 || PARSER. c23 , TOK_TRUE); }
913898" typeid" { return conditional_keyword (PARSER.cpp98 , TOK_TYPEID); }
914899" typename" { return conditional_keyword (PARSER.cpp98 , TOK_TYPENAME); }
915900" using" { return conditional_keyword (PARSER.cpp98 , TOK_USING); }
@@ -1241,7 +1226,7 @@ enable_or_disable ("enable"|"disable")
12411226 return make_identifier ();
12421227 }
12431228
1244- " typeof" { if (PARSER.cpp98 ||
1229+ " typeof" { if (PARSER.cpp98 || PARSER. c23 ||
12451230 PARSER.mode ==configt::ansi_ct::flavourt::GCC ||
12461231 PARSER.mode ==configt::ansi_ct::flavourt::CLANG ||
12471232 PARSER.mode ==configt::ansi_ct::flavourt::CODEWARRIOR ||
0 commit comments