Skip to content

Commit d9f9784

Browse files
committed
Reduce nesting of array parse
1 parent 5cb9065 commit d9f9784

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

syntax/parse.rs

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -750,30 +750,32 @@ fn parse_type_slice(ty: &TypeSlice, namespace: &Namespace) -> Result<Type> {
750750

751751
fn 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

779781
fn parse_type_fn(ty: &TypeBareFn, namespace: &Namespace) -> Result<Type> {

0 commit comments

Comments
 (0)