diff options
author | 2016-02-03 10:26:28 +0100 | |
---|---|---|
committer | 2016-02-03 10:37:46 +0100 | |
commit | 7eeec8f82d96a71929289b0b9401a1b96e1d3dda (patch) | |
tree | 147be9fcf35444c112ff392c7160d81d40b3c8a0 | |
parent | 22a2cc1897f0d9f568ebfb807673e84f6ada491a (diff) |
More compact representation for evar resolvability flag.
This patch was proposed by JH in bug report #4547.
-rw-r--r-- | pretyping/typeclasses.ml | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/pretyping/typeclasses.ml b/pretyping/typeclasses.ml index 3be98a1ae..bb475cc55 100644 --- a/pretyping/typeclasses.ml +++ b/pretyping/typeclasses.ml @@ -495,15 +495,18 @@ let is_instance = function let resolvable = Store.field () let set_resolvable s b = - Store.set s resolvable b + if b then Store.remove s resolvable + else Store.set s resolvable () let is_resolvable evi = assert (match evi.evar_body with Evar_empty -> true | _ -> false); - Option.default true (Store.get evi.evar_extra resolvable) + Option.is_empty (Store.get evi.evar_extra resolvable) let mark_resolvability_undef b evi = - let t = Store.set evi.evar_extra resolvable b in - { evi with evar_extra = t } + if is_resolvable evi = b then evi + else + let t = set_resolvable evi.evar_extra b in + { evi with evar_extra = t } let mark_resolvability b evi = assert (match evi.evar_body with Evar_empty -> true | _ -> false); |