X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/75d4c2d6fb7996625d062f5949ceb2e66c0a70ab..ecc307a0d31b150d93330795398268814b249ff4:/src/tycheck.sml?ds=sidebyside diff --git a/src/tycheck.sml b/src/tycheck.sml index f68100f..d83a5c0 100644 --- a/src/tycheck.sml +++ b/src/tycheck.sml @@ -258,10 +258,7 @@ fun envVarSetFrom v (e, _) = | _ => NONE -fun ununify (tAll as (t, _)) = - case t of - TUnif (_, ref (SOME t)) => ununify t - | _ => tAll +val ununify = Describe.ununify fun checkExp G (eAll as (e, loc)) = let @@ -574,8 +571,6 @@ fun checkExp G (eAll as (e, loc)) = | EIf (e1, e2, e3) => let - val t = (newUnif (), loc) - val t1 = checkExp G e1 val t2 = checkExp G e2 val t3 = checkExp G e3 @@ -583,20 +578,21 @@ fun checkExp G (eAll as (e, loc)) = in (subTyp (t1, bool)) handle Unify ue => - dte (WrongType ("\"If\" test", + dte (WrongType ("\"if\" test", e1, t1, bool, SOME ue)); - subTyp (t2, t); - (subTyp (t3, t)) - handle Unify ue => - dte (WrongType ("\"Else\" case", - eAll, - t3, - t2, - SOME ue)); - t + (subTyp (t2, t3); t3) + handle Unify _ => + ((subTyp (t3, t2); t2) + handle Unify ue => + (dte (WrongType ("\"else\" case", + eAll, + t3, + t2, + SOME ue)); + (TError, loc))) end end