Reduce nesting of array parse
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 8d2b703..2c8d982 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -750,30 +750,32 @@
fn parse_type_array(ty: &TypeArray, namespace: &Namespace) -> Result<Type> {
let inner = parse_type(&ty.elem, namespace)?;
- match &ty.len {
- Expr::Lit(lit) => {
- match &lit.lit {
- Lit::Int(len_token) => {
- let v = match len_token.base10_parse::<usize>() {
- Ok(n_v) => n_v,
- Err(err) => return Err(Error::new_spanned(len_token, err)),
- };
- Ok(Type::Array(Box::new(Array {
- bracket: ty.bracket_token,
- inner,
- semi_token: ty.semi_token,
- len: v,
- len_token: len_token.clone(),
- })))
- }
- _ => Err(Error::new_spanned(lit, "array length must be an integer literal")),
- }
- }
- _ => Err(Error::new_spanned(
- &ty.len,
- "unsupported expression, array length must be an integer literal",
- )),
- }
+
+ let len_expr = if let Expr::Lit(lit) = &ty.len {
+ lit
+ } else {
+ let msg = "unsupported expression, array length must be an integer literal";
+ return Err(Error::new_spanned(&ty.len, msg));
+ };
+
+ let len_token = if let Lit::Int(int) = &len_expr.lit {
+ int.clone()
+ } else {
+ let msg = "array length must be an integer literal";
+ return Err(Error::new_spanned(len_expr, msg));
+ };
+
+ let bracket = ty.bracket_token;
+ let semi_token = ty.semi_token;
+ let len = len_token.base10_parse::<usize>()?;
+
+ Ok(Type::Array(Box::new(Array {
+ bracket,
+ inner,
+ semi_token,
+ len,
+ len_token,
+ })))
}
fn parse_type_fn(ty: &TypeBareFn, namespace: &Namespace) -> Result<Type> {