@@ -162,28 +162,6 @@ int conditional_keyword(bool condition, int token)
162
162
return make_identifier ();
163
163
}
164
164
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
-
187
165
int MSC_cpp_keyword (int token)
188
166
{
189
167
if (PARSER.cpp98 && PARSER.mode ==configt::ansi_ct::flavourt::VISUAL_STUDIO)
@@ -852,15 +830,22 @@ enable_or_disable ("enable"|"disable")
852
830
return make_identifier ();
853
831
}
854
832
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
+
855
840
%{
856
841
/* C++ Keywords and Operators */
857
842
%}
858
843
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); }
861
846
" and" { return conditional_keyword (PARSER.cpp98 , TOK_ANDAND); }
862
847
" 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); }
864
849
" catch" { return conditional_keyword (PARSER.cpp98 , TOK_CATCH); }
865
850
" char16_t" { // C++11, but Visual Studio uses typedefs
866
851
return conditional_keyword (
@@ -876,11 +861,11 @@ enable_or_disable ("enable"|"disable")
876
861
}
877
862
" class" { return conditional_keyword (PARSER.cpp98 , TOK_CLASS); }
878
863
" 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); }
880
865
" delete" { return conditional_keyword (PARSER.cpp98 , TOK_DELETE); }
881
866
" decltype" { return conditional_keyword (PARSER.cpp11 , TOK_DECLTYPE); } // C++11
882
867
" 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); }
884
869
" friend" { return conditional_keyword (PARSER.cpp98 , TOK_FRIEND); }
885
870
" mutable" { return conditional_keyword (PARSER.cpp98 , TOK_MUTABLE); }
886
871
" namespace" { return conditional_keyword (PARSER.cpp98 , TOK_NAMESPACE); }
@@ -890,7 +875,7 @@ enable_or_disable ("enable"|"disable")
890
875
" noreturn" { return conditional_keyword (PARSER.cpp11 , TOK_NORETURN); } // C++11
891
876
" not" { return conditional_keyword (PARSER.cpp98 , ' !' ); }
892
877
" 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); }
894
879
" operator" { return conditional_keyword (PARSER.cpp98 , TOK_OPERATOR); }
895
880
" or" { return conditional_keyword (PARSER.cpp98 , TOK_OROR); }
896
881
" or_eq" { return conditional_keyword (PARSER.cpp98 , TOK_ORASSIGN); }
@@ -901,15 +886,15 @@ enable_or_disable ("enable"|"disable")
901
886
// as a keyword, even though the documentation claims
902
887
// it's a macro.
903
888
return conditional_keyword (
904
- PARSER.cpp11 ||
889
+ PARSER.cpp11 || PARSER. c23 ||
905
890
PARSER.mode == configt::ansi_ct::flavourt::VISUAL_STUDIO,
906
891
TOK_STATIC_ASSERT);
907
892
}
908
893
" template" { return conditional_keyword (PARSER.cpp98 , TOK_TEMPLATE); }
909
894
" 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); }
911
896
" 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); }
913
898
" typeid" { return conditional_keyword (PARSER.cpp98 , TOK_TYPEID); }
914
899
" typename" { return conditional_keyword (PARSER.cpp98 , TOK_TYPENAME); }
915
900
" using" { return conditional_keyword (PARSER.cpp98 , TOK_USING); }
@@ -1241,7 +1226,7 @@ enable_or_disable ("enable"|"disable")
1241
1226
return make_identifier ();
1242
1227
}
1243
1228
1244
- " typeof" { if (PARSER.cpp98 ||
1229
+ " typeof" { if (PARSER.cpp98 || PARSER. c23 ||
1245
1230
PARSER.mode ==configt::ansi_ct::flavourt::GCC ||
1246
1231
PARSER.mode ==configt::ansi_ct::flavourt::CLANG ||
1247
1232
PARSER.mode ==configt::ansi_ct::flavourt::CODEWARRIOR ||
0 commit comments