@@ -750,30 +750,32 @@ fn parse_type_slice(ty: &TypeSlice, namespace: &Namespace) -> Result<Type> {
750
750
751
751
fn parse_type_array ( ty : & TypeArray , namespace : & Namespace ) -> Result < Type > {
752
752
let inner = parse_type ( & ty. elem , namespace) ?;
753
- match & ty. len {
754
- Expr :: Lit ( lit) => {
755
- match & lit. lit {
756
- Lit :: Int ( len_token) => {
757
- let v = match len_token. base10_parse :: < usize > ( ) {
758
- Ok ( n_v) => n_v,
759
- Err ( err) => return Err ( Error :: new_spanned ( len_token, err) ) ,
760
- } ;
761
- Ok ( Type :: Array ( Box :: new ( Array {
762
- bracket : ty. bracket_token ,
763
- inner,
764
- semi_token : ty. semi_token ,
765
- len : v,
766
- len_token : len_token. clone ( ) ,
767
- } ) ) )
768
- }
769
- _ => Err ( Error :: new_spanned ( lit, "array length must be an integer literal" ) ) ,
770
- }
771
- }
772
- _ => Err ( Error :: new_spanned (
773
- & ty. len ,
774
- "unsupported expression, array length must be an integer literal" ,
775
- ) ) ,
776
- }
753
+
754
+ let len_expr = if let Expr :: Lit ( lit) = & ty. len {
755
+ lit
756
+ } else {
757
+ let msg = "unsupported expression, array length must be an integer literal" ;
758
+ return Err ( Error :: new_spanned ( & ty. len , msg) ) ;
759
+ } ;
760
+
761
+ let len_token = if let Lit :: Int ( int) = & len_expr. lit {
762
+ int. clone ( )
763
+ } else {
764
+ let msg = "array length must be an integer literal" ;
765
+ return Err ( Error :: new_spanned ( len_expr, msg) ) ;
766
+ } ;
767
+
768
+ let bracket = ty. bracket_token ;
769
+ let semi_token = ty. semi_token ;
770
+ let len = len_token. base10_parse :: < usize > ( ) ?;
771
+
772
+ Ok ( Type :: Array ( Box :: new ( Array {
773
+ bracket,
774
+ inner,
775
+ semi_token,
776
+ len,
777
+ len_token,
778
+ } ) ) )
777
779
}
778
780
779
781
fn parse_type_fn ( ty : & TypeBareFn , namespace : & Namespace ) -> Result < Type > {
0 commit comments