@@ -2,6 +2,7 @@ use super::{encoding::Encoding, lexer::LexError, punctuator::Punctuator};
2
2
use crate :: { inflow:: InflowEnd , source_files:: Source } ;
3
3
use derive_more:: { Deref , IsVariant , Unwrap } ;
4
4
use num_bigint:: BigInt ;
5
+ use std:: fmt:: Display ;
5
6
6
7
#[ derive( Clone , Debug , PartialEq , IsVariant , Unwrap ) ]
7
8
pub enum CTokenKind {
@@ -201,3 +202,72 @@ impl InflowEnd for CToken {
201
202
matches ! ( & self . kind, CTokenKind :: EndOfFile )
202
203
}
203
204
}
205
+
206
+ impl Display for CTokenKind {
207
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
208
+ match self {
209
+ CTokenKind :: EndOfFile => write ! ( f, "<end-of-file>" ) ,
210
+ CTokenKind :: LexError ( lex_error) => lex_error. fmt ( f) ,
211
+ CTokenKind :: Identifier ( identifier) => write ! ( f, "identifier '{}'" , identifier) ,
212
+ CTokenKind :: Punctuator ( punctuator) => write ! ( f, "'{}'" , punctuator) ,
213
+ CTokenKind :: Integer ( _) => write ! ( f, "integer literal" ) ,
214
+ CTokenKind :: Float ( _, _) => write ! ( f, "floating-point literal" ) ,
215
+ CTokenKind :: CharacterConstant ( _, _) => write ! ( f, "character literal" ) ,
216
+ CTokenKind :: StringLiteral ( _, _) => write ! ( f, "string literal" ) ,
217
+ CTokenKind :: AlignasKeyword => write ! ( f, "'alignas' keyword" ) ,
218
+ CTokenKind :: AlignofKeyword => write ! ( f, "'alignof' keyword" ) ,
219
+ CTokenKind :: AutoKeyword => write ! ( f, "'auto' keyword" ) ,
220
+ CTokenKind :: BoolKeyword => write ! ( f, "'bool' keyword" ) ,
221
+ CTokenKind :: BreakKeyword => write ! ( f, "'break' keyword" ) ,
222
+ CTokenKind :: CaseKeyword => write ! ( f, "'case' keyword" ) ,
223
+ CTokenKind :: CharKeyword => write ! ( f, "'char' keyword" ) ,
224
+ CTokenKind :: ConstKeyword => write ! ( f, "'const' keyword" ) ,
225
+ CTokenKind :: ConstexprKeyword => write ! ( f, "'constexpr' keyword" ) ,
226
+ CTokenKind :: ContinueKeyword => write ! ( f, "'continue' keyword" ) ,
227
+ CTokenKind :: DefaultKeyword => write ! ( f, "'default' keyword" ) ,
228
+ CTokenKind :: DoKeyword => write ! ( f, "'do' keyword" ) ,
229
+ CTokenKind :: DoubleKeyword => write ! ( f, "'double' keyword" ) ,
230
+ CTokenKind :: ElseKeyword => write ! ( f, "'else' keyword" ) ,
231
+ CTokenKind :: EnumKeyword => write ! ( f, "'enum' keyword" ) ,
232
+ CTokenKind :: ExternKeyword => write ! ( f, "'extern' keyword" ) ,
233
+ CTokenKind :: FalseKeyword => write ! ( f, "'false' keyword" ) ,
234
+ CTokenKind :: FloatKeyword => write ! ( f, "'float' keyword" ) ,
235
+ CTokenKind :: ForKeyword => write ! ( f, "'for' keyword" ) ,
236
+ CTokenKind :: GotoKeyword => write ! ( f, "'goto' keyword" ) ,
237
+ CTokenKind :: IfKeyword => write ! ( f, "'if' keyword" ) ,
238
+ CTokenKind :: InlineKeyword => write ! ( f, "'inline' keyword" ) ,
239
+ CTokenKind :: IntKeyword => write ! ( f, "'int' keyword" ) ,
240
+ CTokenKind :: LongKeyword => write ! ( f, "'long' keyword" ) ,
241
+ CTokenKind :: NullptrKeyword => write ! ( f, "'nullptr' keyword" ) ,
242
+ CTokenKind :: RegisterKeyword => write ! ( f, "'register' keyword" ) ,
243
+ CTokenKind :: RestrictKeyword => write ! ( f, "'restrict' keyword" ) ,
244
+ CTokenKind :: ReturnKeyword => write ! ( f, "'return' keyword" ) ,
245
+ CTokenKind :: ShortKeyword => write ! ( f, "'short' keyword" ) ,
246
+ CTokenKind :: SignedKeyword => write ! ( f, "'signed' keyword" ) ,
247
+ CTokenKind :: SizeofKeyword => write ! ( f, "'sizeof' keyword" ) ,
248
+ CTokenKind :: StaticKeyword => write ! ( f, "'static' keyword" ) ,
249
+ CTokenKind :: StaticAssertKeyword => write ! ( f, "'static_assert' keyword" ) ,
250
+ CTokenKind :: StructKeyword => write ! ( f, "'struct' keyword" ) ,
251
+ CTokenKind :: SwitchKeyword => write ! ( f, "'switch' keyword" ) ,
252
+ CTokenKind :: ThreadLocalKeyword => write ! ( f, "'thread_local' keyword" ) ,
253
+ CTokenKind :: TrueKeyword => write ! ( f, "'true' keyword" ) ,
254
+ CTokenKind :: TypedefKeyword => write ! ( f, "'typedef' keyword" ) ,
255
+ CTokenKind :: TypeofKeyword => write ! ( f, "'typeof' keyword" ) ,
256
+ CTokenKind :: TypeofUnqualKeyword => write ! ( f, "'typeof_unqual' keyword" ) ,
257
+ CTokenKind :: UnionKeyword => write ! ( f, "'union' keyword" ) ,
258
+ CTokenKind :: UnsignedKeyword => write ! ( f, "'unsigned' keyword" ) ,
259
+ CTokenKind :: VoidKeyword => write ! ( f, "'void' keyword" ) ,
260
+ CTokenKind :: VolatileKeyword => write ! ( f, "'volatile' keyword" ) ,
261
+ CTokenKind :: WhileKeyword => write ! ( f, "'while' keyword" ) ,
262
+ CTokenKind :: AtomicKeyword => write ! ( f, "'_Atomic' keyword" ) ,
263
+ CTokenKind :: BitIntKeyword => write ! ( f, "'_BitInt' keyword" ) ,
264
+ CTokenKind :: ComplexKeyword => write ! ( f, "'_Complex' keyword" ) ,
265
+ CTokenKind :: Decimal128Keyword => write ! ( f, "'_Decimal128' keyword" ) ,
266
+ CTokenKind :: Decimal32Keyword => write ! ( f, "'_Decimal32' keyword" ) ,
267
+ CTokenKind :: Decimal64Keyword => write ! ( f, "'_Decimal64' keyword" ) ,
268
+ CTokenKind :: GenericKeyword => write ! ( f, "'_Generic' keyword" ) ,
269
+ CTokenKind :: ImaginaryKeyword => write ! ( f, "'_Imaginary' keyword" ) ,
270
+ CTokenKind :: NoreturnKeyword => write ! ( f, "'_Noreturn' keyword" ) ,
271
+ }
272
+ }
273
+ }
0 commit comments