@@ -750,30 +750,32 @@ fn parse_type_slice(ty: &TypeSlice, namespace: &Namespace) -> Result<Type> {
750750
751751fn parse_type_array ( ty : & TypeArray , namespace : & Namespace ) -> Result < Type > {
752752 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+ } ) ) )
777779}
778780
779781fn parse_type_fn ( ty : & TypeBareFn , namespace : & Namespace ) -> Result < Type > {
0 commit comments