diff --git a/libflux/flux-core/src/semantic/convert.rs b/libflux/flux-core/src/semantic/convert.rs index 9130a1a75e..3f9da76e29 100644 --- a/libflux/flux-core/src/semantic/convert.rs +++ b/libflux/flux-core/src/semantic/convert.rs @@ -1031,8 +1031,13 @@ impl<'a> Converter<'a> { test, consequent, alternate, +<<<<<<< HEAD typ: MonoType::Error, } +======= + typ: MonoType::Var(self.sub.fresh()), + }) +>>>>>>> 48a598b5 (feat: Merge the types in conditionl expressions) } fn convert_object_expression(&mut self, expr: &ast::ObjectExpr) -> ObjectExpr { diff --git a/libflux/flux-core/src/semantic/formatter/tests.rs b/libflux/flux-core/src/semantic/formatter/tests.rs index 41fb94b3df..b369bf4611 100644 --- a/libflux/flux-core/src/semantic/formatter/tests.rs +++ b/libflux/flux-core/src/semantic/formatter/tests.rs @@ -265,8 +265,14 @@ fn format_block_statement() { expect![[r##" package main (r) => { +<<<<<<< HEAD v = (if r:#A <:bool 0 then -r:#A:#A else r:#A):#A return v:#A *:#A v:#A }:(r:#A) => #A"##]], +======= + v = (if r:t10 <:bool 0 then -r:t10:t10 else r:t10):t10 + return v:t10 *:t10 v:t10 + }:(r:t10) => t10"#]], +>>>>>>> 48a598b5 (feat: Merge the types in conditionl expressions) ) } diff --git a/libflux/flux-core/src/semantic/infer.rs b/libflux/flux-core/src/semantic/infer.rs index c01fcc739d..2bb395393b 100644 --- a/libflux/flux-core/src/semantic/infer.rs +++ b/libflux/flux-core/src/semantic/infer.rs @@ -314,7 +314,6 @@ pub fn instantiate( sub: &mut Substitution, loc: SourceLocation, ) -> (MonoType, Constraints) { - eprintln!("Instantiate {}", poly); // Substitute fresh type variables for all quantified variables let sub: SubstitutionMap = poly .vars diff --git a/libflux/flux-core/src/semantic/types.rs b/libflux/flux-core/src/semantic/types.rs index 448742e3f7..e2d9d7a191 100644 --- a/libflux/flux-core/src/semantic/types.rs +++ b/libflux/flux-core/src/semantic/types.rs @@ -893,9 +893,12 @@ impl MonoType { (MonoType::Builtin(exp), MonoType::Builtin(act)) => exp.unify(*act, unifier), - (MonoType::Label(_), MonoType::Label(_)) => (), - (MonoType::Builtin(BuiltinType::String), MonoType::Label(_)) - | (MonoType::Label(_), MonoType::Builtin(BuiltinType::String)) => (), + (MonoType::Label(l), MonoType::Label(r)) if l == r => {} + (MonoType::Label(_), MonoType::Label(_)) + | (MonoType::Builtin(BuiltinType::String), MonoType::Label(_)) + | (MonoType::Label(_), MonoType::Builtin(BuiltinType::String)) => { + return MonoType::STRING + } (MonoType::Var(tv), MonoType::Var(tv2)) => { match (unifier.sub.try_apply(*tv), unifier.sub.try_apply(*tv2)) {