@@ -198,12 +198,11 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
198
198
_ => todo ! ( "Don't know what error to return yet" ) ,
199
199
} ;
200
200
self . expect ( & Token :: Colon ) ?;
201
- let mut type_ = self . parse_type ( ) ?;
202
- self . array_type ( & mut type_) ?;
201
+ let ty = self . parse_type ( ) ?;
203
202
204
203
match fields. iter ( ) . find ( |( field_name, _) | field_name == & name) {
205
204
Some ( _) => todo ! ( "Don't know yet what error to return" ) ,
206
- None => fields. push ( ( name, type_ ) ) ,
205
+ None => fields. push ( ( name, ty ) ) ,
207
206
} ;
208
207
209
208
if !self . cur_token_is ( & Token :: RBrace ) {
@@ -273,26 +272,33 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
273
272
}
274
273
275
274
fn parse_type ( & mut self ) -> Result < Ty , Error > {
276
- let mut n = 0 ;
277
- while self . cur_token_is ( & Token :: Asterisk ) {
278
- self . expect ( & Token :: Asterisk ) ?;
279
- n += 1 ;
280
- }
275
+ Ok ( match self . next_token ( ) ?. unwrap ( ) {
276
+ Token :: Asterisk => Ty :: Ptr ( Box :: new ( self . parse_type ( ) ?) ) ,
277
+ Token :: LBracket => match self . next_token ( ) ?. unwrap ( ) {
278
+ Token :: Integer ( int) => {
279
+ let length: usize = str:: parse ( & int) . unwrap ( ) ;
280
+ self . expect ( & Token :: RBracket ) ?;
281
281
282
- let mut base = match self . next_token ( ) ?. unwrap ( ) {
283
- Token :: U8 => Ok ( Ty :: UInt ( UintTy :: U8 ) ) ,
284
- Token :: U16 => Ok ( Ty :: UInt ( UintTy :: U16 ) ) ,
285
- Token :: U32 => Ok ( Ty :: UInt ( UintTy :: U32 ) ) ,
286
- Token :: U64 => Ok ( Ty :: UInt ( UintTy :: U64 ) ) ,
287
- Token :: I8 => Ok ( Ty :: Int ( IntTy :: I8 ) ) ,
288
- Token :: I16 => Ok ( Ty :: Int ( IntTy :: I16 ) ) ,
289
- Token :: I32 => Ok ( Ty :: Int ( IntTy :: I32 ) ) ,
290
- Token :: I64 => Ok ( Ty :: Int ( IntTy :: I64 ) ) ,
291
- Token :: Usize => Ok ( Ty :: UInt ( UintTy :: Usize ) ) ,
292
- Token :: Isize => Ok ( Ty :: Int ( IntTy :: Isize ) ) ,
293
- Token :: Bool => Ok ( Ty :: Bool ) ,
294
- Token :: Void => Ok ( Ty :: Void ) ,
295
- Token :: Ident ( ident) => Ok ( Ty :: Ident ( ident) ) ,
282
+ Ty :: Array {
283
+ ty : Box :: new ( self . parse_type ( ) ?) ,
284
+ len : length,
285
+ }
286
+ }
287
+ token => panic ! ( "Expected integer, got {token}" ) ,
288
+ } ,
289
+ Token :: U8 => Ty :: UInt ( UintTy :: U8 ) ,
290
+ Token :: U16 => Ty :: UInt ( UintTy :: U16 ) ,
291
+ Token :: U32 => Ty :: UInt ( UintTy :: U32 ) ,
292
+ Token :: U64 => Ty :: UInt ( UintTy :: U64 ) ,
293
+ Token :: I8 => Ty :: Int ( IntTy :: I8 ) ,
294
+ Token :: I16 => Ty :: Int ( IntTy :: I16 ) ,
295
+ Token :: I32 => Ty :: Int ( IntTy :: I32 ) ,
296
+ Token :: I64 => Ty :: Int ( IntTy :: I64 ) ,
297
+ Token :: Usize => Ty :: UInt ( UintTy :: Usize ) ,
298
+ Token :: Isize => Ty :: Int ( IntTy :: Isize ) ,
299
+ Token :: Bool => Ty :: Bool ,
300
+ Token :: Void => Ty :: Void ,
301
+ Token :: Ident ( ident) => Ty :: Ident ( ident) ,
296
302
Token :: Fn => {
297
303
self . expect ( & Token :: LParen ) ?;
298
304
@@ -309,17 +315,10 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
309
315
self . expect ( & Token :: RParen ) ?;
310
316
self . expect ( & Token :: Arrow ) ?;
311
317
312
- Ok ( Ty :: Fn ( params, Box :: new ( self . parse_type ( ) ?) ) )
318
+ Ty :: Fn ( params, Box :: new ( self . parse_type ( ) ?) )
313
319
}
314
- token => Err ( Error :: ParseType ( token) ) ,
315
- } ?;
316
-
317
- while n > 0 {
318
- base = Ty :: Ptr ( Box :: new ( base) ) ;
319
- n -= 1 ;
320
- }
321
-
322
- Ok ( base)
320
+ token => return Err ( Error :: ParseType ( token) ) ,
321
+ } )
323
322
}
324
323
325
324
fn parse_return ( & mut self ) -> Result < Stmt , Error > {
@@ -403,27 +402,6 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
403
402
} ) )
404
403
}
405
404
406
- fn array_type ( & mut self , type_ : & mut Ty ) -> Result < ( ) , Error > {
407
- if self . cur_token_is ( & Token :: LBracket ) {
408
- self . expect ( & Token :: LBracket ) ?;
409
-
410
- match self . next_token ( ) ?. unwrap ( ) {
411
- Token :: Integer ( int) => {
412
- let length: usize = str:: parse ( & int) . unwrap ( ) ;
413
- self . expect ( & Token :: RBracket ) ?;
414
-
415
- * type_ = Ty :: Array {
416
- ty : Box :: new ( type_. clone ( ) ) ,
417
- len : length,
418
- } ;
419
- }
420
- token => panic ! ( "Expected integer, got {token}" ) ,
421
- }
422
- }
423
-
424
- Ok ( ( ) )
425
- }
426
-
427
405
fn local ( & mut self ) -> Result < Stmt , Error > {
428
406
self . expect ( & Token :: Let ) ?;
429
407
@@ -436,10 +414,7 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
436
414
let ty = if self . cur_token_is ( & Token :: Colon ) {
437
415
self . expect ( & Token :: Colon ) ?;
438
416
439
- let mut ty = self . parse_type ( ) ?;
440
- self . array_type ( & mut ty) ?;
441
-
442
- ty
417
+ self . parse_type ( ) ?
443
418
} else {
444
419
Ty :: Infer
445
420
} ;
@@ -472,8 +447,7 @@ impl<'a, 'src, T: Iterator<Item = Result<Token, Span>>> Parser<'a, 'src, T> {
472
447
} ;
473
448
self . expect ( & Token :: Colon ) ?;
474
449
475
- let mut ty = self . parse_type ( ) ?;
476
- self . array_type ( & mut ty) ?;
450
+ let ty = self . parse_type ( ) ?;
477
451
478
452
let expr = if self . cur_token_is ( & Token :: Assign ) {
479
453
self . expect ( & Token :: Assign ) ?;
0 commit comments