hm-inference #6

Merged
sb10q merged 136 commits from hm-inference into master 2021-08-19 11:46:50 +08:00
2 changed files with 11 additions and 2 deletions
Showing only changes of commit b3d849ea7a - Show all commits

View File

@ -304,7 +304,9 @@ impl<'a> Inferencer<'a> {
Ok(Located { Ok(Located {
location, location,
custom: Some(list), custom: Some(new_context.unifier.add_ty(TypeEnum::TList {
ty: elt.custom.unwrap(),
})),
node: ExprKind::ListComp { node: ExprKind::ListComp {
elt: Box::new(elt), elt: Box::new(elt),
generators: vec![ast::Comprehension { generators: vec![ast::Comprehension {
@ -474,7 +476,7 @@ impl<'a> Inferencer<'a> {
for t in elts.iter() { for t in elts.iter() {
self.unifier.unify(ty, t.custom.unwrap())?; self.unifier.unify(ty, t.custom.unwrap())?;
} }
Ok(ty) Ok(self.unifier.add_ty(TypeEnum::TList { ty }))
} }
fn infer_tuple(&mut self, elts: &[ast::Expr<Option<Type>>]) -> InferenceResult { fn infer_tuple(&mut self, elts: &[ast::Expr<Option<Type>>]) -> InferenceResult {

View File

@ -159,6 +159,13 @@ impl TestEnvironment {
[("a", "fn[[x=bool], bool]"), ("b", "fn[[x=int32], int32]"), ("c", "bool"), [("a", "fn[[x=bool], bool]"), ("b", "fn[[x=int32], int32]"), ("c", "bool"),
("d", "int32"), ("foo1", "Foo[bool]"), ("foo2", "Foo[int32]")].iter().cloned().collect() ("d", "int32"), ("foo1", "Foo[bool]"), ("foo2", "Foo[int32]")].iter().cloned().collect()
; "obj test")] ; "obj test")]
#[test_case(indoc! {"
f = lambda x: True
a = [1, 2, 3]
b = [f(x) for x in a]
"},
[("a", "list[int32]"), ("b", "list[bool]"), ("f", "fn[[x=int32], bool]")].iter().cloned().collect()
; "listcomp test")]
fn test_basic(source: &str, mapping: HashMap<&str, &str>) { fn test_basic(source: &str, mapping: HashMap<&str, &str>) {
let mut env = TestEnvironment::new(); let mut env = TestEnvironment::new();
let id_to_name = std::mem::take(&mut env.id_to_name); let id_to_name = std::mem::take(&mut env.id_to_name);