added tuple assignment check

escape-analysis
pca006132 2021-08-21 15:11:01 +08:00
parent c4d6b3691a
commit f5b8b58826
1 changed files with 13 additions and 0 deletions

View File

@ -1,3 +1,5 @@
use crate::typecheck::typedef::TypeEnum;
use super::type_inferencer::Inferencer;
use super::typedef::Type;
use rustpython_parser::ast::{self, Expr, ExprKind, Stmt, StmtKind};
@ -22,6 +24,17 @@ impl<'a> Inferencer<'a> {
}
Ok(())
}
ExprKind::Subscript { value, slice, .. } => {
self.check_expr(value, defined_identifiers)?;
self.check_expr(slice, defined_identifiers)?;
if let TypeEnum::TTuple { .. } = &*self.unifier.get_ty(value.custom.unwrap()) {
return Err(format!(
"Error at {}: cannot assign to tuple element",
value.location
));
}
Ok(())
}
_ => self.check_expr(pattern, defined_identifiers),
}
}