@@ -43,15 +43,23 @@ impl<'a> Printer<'a> {
43
43
write ! ( & mut self . w, "{2:1$}{0}" , name, self . offset * 4 , "" ) . unwrap ( ) ;
44
44
}
45
45
46
- fn write_field ( & mut self , f : & fmt:: Debug ) {
47
- write ! ( & mut self . w, " {:?}" , f) . unwrap ( ) ;
46
+ fn field < T : fmt:: Display > ( & mut self , s : T ) {
47
+ write ! ( & mut self . w, " {}" , s) . unwrap ( ) ;
48
+ }
49
+
50
+ fn field_str ( & mut self , s : & str ) {
51
+ self . field_str_ext ( " " , s) ;
52
+ }
53
+
54
+ fn field_str_ext ( & mut self , prefix : & str , str : & str ) {
55
+ write ! ( & mut self . w, "{}\" {}\" " , prefix, str . escape_debug( ) ) . unwrap ( ) ;
48
56
}
49
57
}
50
58
51
59
impl < ' ast , ' a > Visit < ' ast > for Printer < ' a > {
52
60
fn visit_identifier ( & mut self , n : & ' ast Identifier , span : & ' ast Span ) {
53
61
self . name ( "Identifier" ) ;
54
- self . write_field ( & n. name ) ;
62
+ self . field_str ( & n. name ) ;
55
63
visit_identifier ( & mut self . block ( ) , n, span) ;
56
64
}
57
65
fn visit_constant ( & mut self , n : & ' ast Constant , span : & ' ast Span ) {
@@ -60,38 +68,50 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
60
68
}
61
69
fn visit_integer ( & mut self , n : & ' ast Integer , span : & ' ast Span ) {
62
70
self . name ( "Integer" ) ;
63
- self . write_field ( & n. number ) ;
71
+ self . field_str ( & n. number ) ;
64
72
visit_integer ( & mut self . block ( ) , n, span) ;
65
73
}
66
74
fn visit_integer_base ( & mut self , n : & ' ast IntegerBase , span : & ' ast Span ) {
67
75
self . name ( "IntegerBase" ) ;
68
- self . write_field ( & n) ;
76
+ self . field ( match n {
77
+ IntegerBase :: Decimal => "Decimal" ,
78
+ IntegerBase :: Octal => "Octal" ,
79
+ IntegerBase :: Hexadecimal => "Hexadecimal" ,
80
+ IntegerBase :: Binary => "Binary" ,
81
+ } ) ;
69
82
visit_integer_base ( & mut self . block ( ) , n, span) ;
70
83
}
71
84
fn visit_integer_suffix ( & mut self , n : & ' ast IntegerSuffix , span : & ' ast Span ) {
72
85
self . name ( "IntegerSuffix" ) ;
73
- self . write_field ( & n. unsigned ) ;
74
- self . write_field ( & n. imaginary ) ;
86
+ self . field ( n. unsigned ) ;
87
+ self . field ( n. imaginary ) ;
75
88
visit_integer_suffix ( & mut self . block ( ) , n, span) ;
76
89
}
77
90
fn visit_integer_size ( & mut self , n : & ' ast IntegerSize , span : & ' ast Span ) {
78
91
self . name ( "IntegerSize" ) ;
79
- self . write_field ( & n) ;
92
+ self . field ( match n {
93
+ IntegerSize :: Int => "Int" ,
94
+ IntegerSize :: Long => "Long" ,
95
+ IntegerSize :: LongLong => "LongLong" ,
96
+ } ) ;
80
97
visit_integer_size ( & mut self . block ( ) , n, span) ;
81
98
}
82
99
fn visit_float ( & mut self , n : & ' ast Float , span : & ' ast Span ) {
83
100
self . name ( "Float" ) ;
84
- self . write_field ( & n. number ) ;
101
+ self . field_str ( & n. number ) ;
85
102
visit_float ( & mut self . block ( ) , n, span) ;
86
103
}
87
104
fn visit_float_base ( & mut self , n : & ' ast FloatBase , span : & ' ast Span ) {
88
105
self . name ( "FloatBase" ) ;
89
- self . write_field ( & n) ;
106
+ self . field ( match n {
107
+ FloatBase :: Decimal => "Decimal" ,
108
+ FloatBase :: Hexadecimal => "Hexadecimal" ,
109
+ } ) ;
90
110
visit_float_base ( & mut self . block ( ) , n, span) ;
91
111
}
92
112
fn visit_float_suffix ( & mut self , n : & ' ast FloatSuffix , span : & ' ast Span ) {
93
113
self . name ( "FloatSuffix" ) ;
94
- self . write_field ( & n. imaginary ) ;
114
+ self . field ( n. imaginary ) ;
95
115
visit_float_suffix ( & mut self . block ( ) , n, span) ;
96
116
}
97
117
fn visit_float_format ( & mut self , n : & ' ast FloatFormat , span : & ' ast Span ) {
@@ -101,7 +121,15 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
101
121
}
102
122
fn visit_string_literal ( & mut self , n : & ' ast StringLiteral , span : & ' ast Span ) {
103
123
self . name ( "StringLiteral" ) ;
104
- self . write_field ( & n) ;
124
+
125
+ self . w . write_str ( " [" ) . unwrap ( ) ;
126
+ let mut comma = false ;
127
+ for p in n {
128
+ self . field_str_ext ( if comma { ", " } else { "" } , p) ;
129
+ comma = true ;
130
+ }
131
+ self . w . write_str ( "]" ) . unwrap ( ) ;
132
+
105
133
visit_string_literal ( & mut self . block ( ) , n, span) ;
106
134
}
107
135
fn visit_expression ( & mut self , n : & ' ast Expression , span : & ' ast Span ) {
@@ -110,7 +138,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
110
138
}
111
139
fn visit_member_operator ( & mut self , n : & ' ast MemberOperator , span : & ' ast Span ) {
112
140
self . name ( "MemberOperator" ) ;
113
- self . write_field ( & n) ;
141
+ self . field ( match n {
142
+ MemberOperator :: Direct => "Direct" ,
143
+ MemberOperator :: Indirect => "Indirect" ,
144
+ } ) ;
114
145
visit_member_operator ( & mut self . block ( ) , n, span) ;
115
146
}
116
147
fn visit_generic_selection ( & mut self , n : & ' ast GenericSelection , span : & ' ast Span ) {
@@ -143,7 +174,19 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
143
174
}
144
175
fn visit_unary_operator ( & mut self , n : & ' ast UnaryOperator , span : & ' ast Span ) {
145
176
self . name ( "UnaryOperator" ) ;
146
- self . write_field ( & n) ;
177
+ self . field ( match n {
178
+ UnaryOperator :: PostIncrement => "PostIncrement" ,
179
+ UnaryOperator :: PostDecrement => "PostDecrement" ,
180
+ UnaryOperator :: PreIncrement => "PreIncrement" ,
181
+ UnaryOperator :: PreDecrement => "PreDecrement" ,
182
+ UnaryOperator :: Address => "Address" ,
183
+ UnaryOperator :: Indirection => "Indirection" ,
184
+ UnaryOperator :: Plus => "Plus" ,
185
+ UnaryOperator :: Minus => "Minus" ,
186
+ UnaryOperator :: Complement => "Complement" ,
187
+ UnaryOperator :: Negate => "Negate" ,
188
+ UnaryOperator :: SizeOf => "SizeOf" ,
189
+ } ) ;
147
190
visit_unary_operator ( & mut self . block ( ) , n, span) ;
148
191
}
149
192
fn visit_unary_operator_expression (
@@ -160,7 +203,38 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
160
203
}
161
204
fn visit_binary_operator ( & mut self , n : & ' ast BinaryOperator , span : & ' ast Span ) {
162
205
self . name ( "BinaryOperator" ) ;
163
- self . write_field ( & n) ;
206
+ self . field ( match n {
207
+ BinaryOperator :: Index => "Index" ,
208
+ BinaryOperator :: Multiply => "Multiply" ,
209
+ BinaryOperator :: Divide => "Divide" ,
210
+ BinaryOperator :: Modulo => "Modulo" ,
211
+ BinaryOperator :: Plus => "Plus" ,
212
+ BinaryOperator :: Minus => "Minus" ,
213
+ BinaryOperator :: ShiftLeft => "ShiftLeft" ,
214
+ BinaryOperator :: ShiftRight => "ShiftRight" ,
215
+ BinaryOperator :: Less => "Less" ,
216
+ BinaryOperator :: Greater => "Greater" ,
217
+ BinaryOperator :: LessOrEqual => "LessOrEqual" ,
218
+ BinaryOperator :: GreaterOrEqual => "GreaterOrEqual" ,
219
+ BinaryOperator :: Equals => "Equals" ,
220
+ BinaryOperator :: NotEquals => "NotEquals" ,
221
+ BinaryOperator :: BitwiseAnd => "BitwiseAnd" ,
222
+ BinaryOperator :: BitwiseXor => "BitwiseXor" ,
223
+ BinaryOperator :: BitwiseOr => "BitwiseOr" ,
224
+ BinaryOperator :: LogicalAnd => "LogicalAnd" ,
225
+ BinaryOperator :: LogicalOr => "LogicalOr" ,
226
+ BinaryOperator :: Assign => "Assign" ,
227
+ BinaryOperator :: AssignMultiply => "AssignMultiply" ,
228
+ BinaryOperator :: AssignDivide => "AssignDivide" ,
229
+ BinaryOperator :: AssignModulo => "AssignModulo" ,
230
+ BinaryOperator :: AssignPlus => "AssignPlus" ,
231
+ BinaryOperator :: AssignMinus => "AssignMinus" ,
232
+ BinaryOperator :: AssignShiftLeft => "AssignShiftLeft" ,
233
+ BinaryOperator :: AssignShiftRight => "AssignShiftRight" ,
234
+ BinaryOperator :: AssignBitwiseAnd => "AssignBitwiseAnd" ,
235
+ BinaryOperator :: AssignBitwiseXor => "AssignBitwiseXor" ,
236
+ BinaryOperator :: AssignBitwiseOr => "AssignBitwiseOr" ,
237
+ } ) ;
164
238
visit_binary_operator ( & mut self . block ( ) , n, span) ;
165
239
}
166
240
fn visit_binary_operator_expression (
@@ -206,7 +280,14 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
206
280
}
207
281
fn visit_storage_class_specifier ( & mut self , n : & ' ast StorageClassSpecifier , span : & ' ast Span ) {
208
282
self . name ( "StorageClassSpecifier" ) ;
209
- self . write_field ( & n) ;
283
+ self . field ( match n {
284
+ StorageClassSpecifier :: Typedef => "Typedef" ,
285
+ StorageClassSpecifier :: Extern => "Extern" ,
286
+ StorageClassSpecifier :: Static => "Static" ,
287
+ StorageClassSpecifier :: ThreadLocal => "ThreadLocal" ,
288
+ StorageClassSpecifier :: Auto => "Auto" ,
289
+ StorageClassSpecifier :: Register => "Register" ,
290
+ } ) ;
210
291
visit_storage_class_specifier ( & mut self . block ( ) , n, span) ;
211
292
}
212
293
fn visit_type_specifier ( & mut self , n : & ' ast TypeSpecifier , span : & ' ast Span ) {
@@ -216,12 +297,17 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
216
297
}
217
298
fn visit_ts18661_float_type ( & mut self , n : & ' ast TS18661FloatType , span : & ' ast Span ) {
218
299
self . name ( "TS18661FloatType" ) ;
219
- self . write_field ( & n. width ) ;
300
+ self . field ( n. width ) ;
220
301
visit_ts18661_float_type ( & mut self . block ( ) , n, span) ;
221
302
}
222
303
fn visit_ts18661_float_format ( & mut self , n : & ' ast TS18661FloatFormat , span : & ' ast Span ) {
223
304
self . name ( "TS18661FloatFormat" ) ;
224
- self . write_field ( & n) ;
305
+ self . field ( match n {
306
+ TS18661FloatFormat :: BinaryInterchange => "BinaryInterchange" ,
307
+ TS18661FloatFormat :: BinaryExtended => "BinaryExtended" ,
308
+ TS18661FloatFormat :: DecimalInterchange => "DecimalInterchange" ,
309
+ TS18661FloatFormat :: DecimalExtended => "DecimalExtended" ,
310
+ } ) ;
225
311
visit_ts18661_float_format ( & mut self . block ( ) , n, span) ;
226
312
}
227
313
fn visit_struct_type ( & mut self , n : & ' ast StructType , span : & ' ast Span ) {
@@ -230,7 +316,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
230
316
}
231
317
fn visit_struct_kind ( & mut self , n : & ' ast StructKind , span : & ' ast Span ) {
232
318
self . name ( "StructKind" ) ;
233
- self . write_field ( & n) ;
319
+ self . field ( match n {
320
+ StructKind :: Struct => "Struct" ,
321
+ StructKind :: Union => "Union" ,
322
+ } ) ;
234
323
visit_struct_kind ( & mut self . block ( ) , n, span) ;
235
324
}
236
325
fn visit_struct_declaration ( & mut self , n : & ' ast StructDeclaration , span : & ' ast Span ) {
@@ -259,12 +348,23 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
259
348
}
260
349
fn visit_type_qualifier ( & mut self , n : & ' ast TypeQualifier , span : & ' ast Span ) {
261
350
self . name ( "TypeQualifier" ) ;
262
- self . write_field ( & n) ;
351
+ self . field ( match n {
352
+ TypeQualifier :: Const => "Const" ,
353
+ TypeQualifier :: Restrict => "Restrict" ,
354
+ TypeQualifier :: Volatile => "Volatile" ,
355
+ TypeQualifier :: Nonnull => "Nonnull" ,
356
+ TypeQualifier :: NullUnspecified => "NullUnspecified" ,
357
+ TypeQualifier :: Nullable => "Nullable" ,
358
+ TypeQualifier :: Atomic => "Atomic" ,
359
+ } ) ;
263
360
visit_type_qualifier ( & mut self . block ( ) , n, span) ;
264
361
}
265
362
fn visit_function_specifier ( & mut self , n : & ' ast FunctionSpecifier , span : & ' ast Span ) {
266
363
self . name ( "FunctionSpecifier" ) ;
267
- self . write_field ( & n) ;
364
+ self . field ( match n {
365
+ FunctionSpecifier :: Inline => "Inline" ,
366
+ FunctionSpecifier :: Noreturn => "Noreturn" ,
367
+ } ) ;
268
368
visit_function_specifier ( & mut self . block ( ) , n, span) ;
269
369
}
270
370
fn visit_alignment_specifier ( & mut self , n : & ' ast AlignmentSpecifier , span : & ' ast Span ) {
@@ -307,7 +407,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
307
407
}
308
408
fn visit_ellipsis ( & mut self , n : & ' ast Ellipsis , span : & ' ast Span ) {
309
409
self . name ( "Ellipsis" ) ;
310
- self . write_field ( & n) ;
410
+ self . field ( match n {
411
+ Ellipsis :: Some => "Some" ,
412
+ Ellipsis :: None => "None" ,
413
+ } ) ;
311
414
visit_ellipsis ( & mut self . block ( ) , n, span) ;
312
415
}
313
416
fn visit_type_name ( & mut self , n : & ' ast TypeName , span : & ' ast Span ) {
@@ -391,7 +494,7 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
391
494
}
392
495
fn visit_attribute ( & mut self , n : & ' ast Attribute , span : & ' ast Span ) {
393
496
self . name ( "Attribute" ) ;
394
- self . write_field ( & n. name . node ) ;
497
+ self . field_str ( & n. name . node ) ;
395
498
visit_attribute ( & mut self . block ( ) , n, span) ;
396
499
}
397
500
fn visit_asm_statement ( & mut self , n : & ' ast AsmStatement , span : & ' ast Span ) {
0 commit comments