summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Campbell2017-08-14 17:28:41 +0100
committerBrian Campbell2017-08-14 17:28:41 +0100
commit637ed6dcd3831fb831ab30f7ed1dc00226a8fa7c (patch)
tree4e757be417aecdd496eb863416c289112247d319 /src
parent404eef7b9a446f8b1da2024cbf722911958d9f52 (diff)
Existentials in free type var functions
Diffstat (limited to 'src')
-rw-r--r--src/spec_analysis.ml2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/spec_analysis.ml b/src/spec_analysis.ml
index 1475da7a..5281ef27 100644
--- a/src/spec_analysis.ml
+++ b/src/spec_analysis.ml
@@ -211,6 +211,7 @@ let rec free_type_names_t consider_var (Typ_aux (t, _)) = match t with
| Typ_tup ts -> free_type_names_ts consider_var ts
| Typ_app (name,targs) -> Nameset.add (string_of_id name) (free_type_names_t_args consider_var targs)
| Typ_wild -> mt
+ | Typ_exist (kids,_,t') -> List.fold_left (fun s kid -> Nameset.remove (string_of_kid kid) s) (free_type_names_t consider_var t') kids
and free_type_names_ts consider_var ts = nameset_bigunion (List.map (free_type_names_t consider_var) ts)
and free_type_names_maybe_t consider_var = function
| Some t -> free_type_names_t consider_var t
@@ -239,6 +240,7 @@ let rec fv_of_typ consider_var bound used (Typ_aux (t,_)) : Nameset.t =
| Typ_tup ts -> List.fold_right (fun t n -> fv_of_typ consider_var bound n t) ts used
| Typ_app(id,targs) ->
List.fold_right (fun ta n -> fv_of_targ consider_var bound n ta) targs (conditional_add_typ bound used id)
+ | Typ_exist (kids,_,t') -> fv_of_typ consider_var (List.fold_left (fun b (Kid_aux (Var v,_)) -> Nameset.add v b) bound kids) used t'
and fv_of_targ consider_var bound used (Ast.Typ_arg_aux(targ,_)) : Nameset.t = match targ with
| Typ_arg_typ t -> fv_of_typ consider_var bound used t