summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lex/lexgen.ml25
1 files changed, 10 insertions, 15 deletions
diff --git a/lex/lexgen.ml b/lex/lexgen.ml
index 4054f27cc7..5ad2f1f71f 100644
--- a/lex/lexgen.ml
+++ b/lex/lexgen.ml
@@ -684,13 +684,10 @@ let env_to_class m =
let env1 =
MemMap.fold
(fun _ (tag,s) r ->
- try
- let ss = TagMap.find tag r in
- let r = TagMap.remove tag r in
- TagMap.add tag (StateSetSet.add s ss) r
- with
- | Not_found ->
- TagMap.add tag (StateSetSet.add s StateSetSet.empty) r)
+ TagMap.update tag (function
+ | None -> StateSetSet.singleton s
+ | Some ss -> StateSetSet.add s ss
+ ) r)
m TagMap.empty in
TagMap.fold
(fun tag ss r -> MemKey.add {tag=tag ; equiv=ss} r)
@@ -701,14 +698,12 @@ let env_to_class m =
let inverse_mem_map trans m r =
TagMap.fold
(fun tag addr r ->
- try
- let otag,s = MemMap.find addr r in
- assert (tag = otag) ;
- let r = MemMap.remove addr r in
- MemMap.add addr (tag,StateSet.add trans s) r
- with
- | Not_found ->
- MemMap.add addr (tag,StateSet.add trans StateSet.empty) r)
+ MemMap.update addr (function
+ | None -> tag, StateSet.singleton trans
+ | Some (otag, s) ->
+ assert (tag = otag);
+ (tag, StateSet.add trans s)
+ ) r)
m r
let inverse_mem_map_other n (_,m) r = inverse_mem_map (OnChars n) m r