Check for mutability when doing a let
This commit is contained in:
parent
5763df948f
commit
37386db437
@ -63,6 +63,8 @@ pub enum ErrorKind {
|
||||
TypesDifferMutability(TypeKind, TypeKind),
|
||||
#[error("Cannot mutably borrow variable {0}, which is not declared as mutable")]
|
||||
ImpossibleMutableBorrow(String),
|
||||
#[error("Cannot declare variable {0} as mutable, when it's type is immutable")]
|
||||
ImpossibleMutLet(String),
|
||||
}
|
||||
|
||||
/// Struct used to implement a type-checking pass that can be performed on the
|
||||
@ -225,6 +227,13 @@ impl Block {
|
||||
variable_reference.2 + expression.1,
|
||||
);
|
||||
|
||||
if *mutable && !res_t.is_mutable() {
|
||||
state.note_errors(
|
||||
&vec![ErrorKind::ImpossibleMutLet(variable_reference.1.clone())],
|
||||
variable_reference.2,
|
||||
);
|
||||
}
|
||||
|
||||
let res_t = if res_t.known().is_err() {
|
||||
// Unable to infer variable type even from expression! Default it
|
||||
let res_t = state.or_else(
|
||||
|
@ -7,7 +7,7 @@ fn changer(param: &mut u32) {
|
||||
fn main() -> u32 {
|
||||
let value = 6;
|
||||
|
||||
changer(&value);
|
||||
let mut a = &value;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user