diff options
-rw-r--r-- | typing/ctype.ml | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/typing/ctype.ml b/typing/ctype.ml index b43d5c260..e6f7a8a56 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -1007,15 +1007,17 @@ let rec occur_rec env visited ty0 ty = let type_changed = ref false (* trace possible changes to the studied type *) +let merge r b = if b then r := true + let occur env ty0 ty = if not !Clflags.recursive_types then let old = !type_changed in try while type_changed := false; occur_rec env [] ty0 ty; !type_changed do () (* prerr_endline "changed" *) done; - type_changed := old + merge type_changed old with exn -> - type_changed := old; + merge type_changed old; raise (match exn with Occur -> Unify [] | _ -> exn) |