Allow wider expressions for when self is not taken as borrow

This commit is contained in:
Sofia 2025-07-29 23:55:31 +03:00
parent 3adb745576
commit 1e094eeea0

View File

@ -614,24 +614,36 @@ impl Expression {
first_param.1, first_param.1,
) )
.resolve_ref(type_refs.types); .resolve_ref(type_refs.types);
let backing_var = first_param.backing_var().expect("todo").1.clone(); let backing_var = first_param.backing_var();
let is_mutable = if let Some(backing_var) = first_param.backing_var() {
if let TypeKind::Borrow(inner, _) = type_kind { if let Some((mutable, _)) = type_refs.find_var(&backing_var.1) {
if let TypeKind::Borrow(..) = *inner.clone() { mutable
*type_kind = type_kind.unroll_borrow(); } else {
let ExprKind::Borrow(val, _) = &first_param.0 else { return Err(ErrorKind::VariableNotDefined(backing_var.1.clone()));
panic!()
};
*first_param = *val.clone();
}
}
if let Some((mutable, _)) = type_refs.find_var(&backing_var) {
if !mutable {
first_param.remove_borrow_mutability();
} }
} else { } else {
return Err(ErrorKind::VariableNotDefined(backing_var)); false
};
if backing_var.is_some() {
if let TypeKind::Borrow(inner, _) = type_kind {
if let TypeKind::Borrow(..) = *inner.clone() {
*type_kind = type_kind.unroll_borrow();
let ExprKind::Borrow(val, _) = &first_param.0 else {
panic!()
};
*first_param = *val.clone();
}
}
} else {
let ExprKind::Borrow(val, _) = &first_param.0 else {
panic!()
};
*first_param = *val.clone();
}
if !is_mutable {
first_param.remove_borrow_mutability();
} }
} }
} }