diff options
| author | Pierre-Marie Pédrot | 2018-09-27 14:23:25 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2018-11-09 14:10:27 +0100 |
| commit | 601ce3738253e4bb197900ee6dad271c4e3666d6 (patch) | |
| tree | c4164f53de30589a26a147f548b8693875971027 /engine/univNames.ml | |
| parent | 31825dc11a8e7fea42702182a3015067b0ed1140 (diff) | |
Adding universe names to polymorphic entry instances.
Diffstat (limited to 'engine/univNames.ml')
| -rw-r--r-- | engine/univNames.ml | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/engine/univNames.ml b/engine/univNames.ml index a71f9c5736..a037e577c4 100644 --- a/engine/univNames.ml +++ b/engine/univNames.ml @@ -81,18 +81,23 @@ let ubinder_obj : GlobRef.t * Id.t list -> Libobject.obj = discharge_function = discharge_ubinder; rebuild_function = (fun x -> x); } +let compute_instance_binders inst ubinders = + let revmap = Id.Map.fold (fun id lvl accu -> LMap.add lvl id accu) ubinders LMap.empty in + let map lvl = + try Name (LMap.find lvl revmap) + with Not_found -> Name (name_universe lvl) + in + Array.map_to_list map (Instance.to_array inst) + let register_universe_binders ref ubinders = (** TODO: change the API to register a [Name.t list] instead. This is the last part of the code that depends on the internal representation of names in abstract contexts, but removing it requires quite a rework of the callers. *) let univs = AUContext.instance (Environ.universes_of_global (Global.env()) ref) in - let revmap = Id.Map.fold (fun id lvl accu -> LMap.add lvl id accu) ubinders LMap.empty in - let map lvl = - try LMap.find lvl revmap - with Not_found -> name_universe lvl - in - let ubinders = Array.map_to_list map (Instance.to_array univs) in + let ubinders = compute_instance_binders univs ubinders in + (** FIXME: the function above always generate names but this may change *) + let ubinders = List.map (function Name id -> id | Anonymous -> assert false) ubinders in if not (List.is_empty ubinders) then Lib.add_anonymous_leaf (ubinder_obj (ref, ubinders)) type univ_name_list = Names.lname list |
