Allow wider expressions for when self is not taken as borrow
This commit is contained in:
parent
3adb745576
commit
1e094eeea0
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user