@@ -8,9 +8,11 @@ use crate::{
8
8
parser:: speculate:: speculate,
9
9
punctuator:: Punctuator ,
10
10
token:: CTokenKind ,
11
+ translate:: get_decorators,
11
12
} ,
12
13
source_files:: Source ,
13
14
} ;
15
+ use ignore:: types:: TypesBuilder ;
14
16
15
17
// Implements expression parsing for the C parser
16
18
impl < ' a > Parser < ' a > {
@@ -237,30 +239,38 @@ impl<'a> Parser<'a> {
237
239
238
240
match & self . input . peek ( ) . kind {
239
241
CTokenKind :: Punctuator ( Punctuator :: Ampersand ) => {
242
+ self . input . advance ( ) ;
240
243
let inner = self . parse_expr_primary ( ) ?;
241
244
return Ok ( ExprKind :: AddressOf ( Box :: new ( inner) ) . at ( source) ) ;
242
245
}
243
246
CTokenKind :: Punctuator ( Punctuator :: Multiply ) => {
247
+ self . input . advance ( ) ;
244
248
let inner = self . parse_expr_primary ( ) ?;
245
249
return Ok ( ExprKind :: Dereference ( Box :: new ( inner) ) . at ( source) ) ;
246
250
}
247
251
CTokenKind :: Punctuator ( Punctuator :: Add ) => todo ! ( ) ,
248
252
CTokenKind :: Punctuator ( Punctuator :: Subtract ) => {
253
+ self . input . advance ( ) ;
249
254
let inner = self . parse_expr_primary ( ) ?;
250
255
return Ok ( ExprKind :: Negate ( Box :: new ( inner) ) . at ( source) ) ;
251
256
}
252
257
CTokenKind :: Punctuator ( Punctuator :: BitComplement ) => {
258
+ self . input . advance ( ) ;
253
259
let inner = self . parse_expr_primary ( ) ?;
254
260
return Ok ( ExprKind :: BitComplement ( Box :: new ( inner) ) . at ( source) ) ;
255
261
}
256
262
CTokenKind :: Punctuator ( Punctuator :: Not ) => {
263
+ self . input . advance ( ) ;
257
264
let inner = self . parse_expr_primary ( ) ?;
258
265
return Ok ( ExprKind :: Not ( Box :: new ( inner) ) . at ( source) ) ;
259
266
}
260
267
CTokenKind :: Punctuator ( Punctuator :: Increment ) => todo ! ( "parse increment expression" ) ,
261
268
CTokenKind :: Punctuator ( Punctuator :: Decrement ) => todo ! ( "parse decrement expression" ) ,
262
269
CTokenKind :: SizeofKeyword => {
263
- if let Ok ( _ty) = speculate ! ( self . input, self . parse_type_in_parens( ) ) {
270
+ self . input . advance ( ) ;
271
+
272
+ if let Ok ( type_name) = speculate ! ( self . input, self . parse_type_in_parens( ) ) {
273
+ let mut type_builder = TypesBuilder :: new ( ) ;
264
274
return todo ! ( "handle parsed sizeof(type)" ) ;
265
275
}
266
276
@@ -303,7 +313,7 @@ impl<'a> Parser<'a> {
303
313
304
314
let type_name = self . parse_type_name ( ) ?;
305
315
306
- if !self . eat_open_paren ( ) {
316
+ if !self . eat_punctuator ( Punctuator :: CloseParen ) {
307
317
return Err ( self . error ( "Expected ')' after type in parentheses" ) ) ;
308
318
}
309
319
0 commit comments