aboutsummaryrefslogtreecommitdiffhomepage
path: root/parsing/egramcoq.ml
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/egramcoq.ml')
-rw-r--r--parsing/egramcoq.ml23
1 files changed, 12 insertions, 11 deletions
diff --git a/parsing/egramcoq.ml b/parsing/egramcoq.ml
index b3fdd384a..880d4b8ce 100644
--- a/parsing/egramcoq.ml
+++ b/parsing/egramcoq.ml
@@ -171,12 +171,13 @@ let prepare_empty_levels forpat (pos,p4assoc,name,reinit) =
grammar_extend entry reinit (pos,[(name, p4assoc, [])])
let pure_sublevels level symbs =
- map_succeed
- (function s ->
- let i = level_of_snterml s in
- if level = Some i then failwith "";
- i)
- symbs
+ let filter s =
+ try
+ let i = level_of_snterml s in
+ if level = Some i then None else Some i
+ with Failure _ -> None
+ in
+ List.map_filter filter symbs
let extend_constr (entry,level) (n,assoc) mkact forpat rules =
List.fold_left (fun nb pt ->
@@ -260,11 +261,11 @@ let extend_grammar gram =
grammar_state := (nb,gram) :: !grammar_state
let recover_notation_grammar ntn prec =
- let l = map_succeed (function
- | _, Notation (prec',vars,(_,_,ntn',_ as x)) when prec = prec' & ntn = ntn' ->
- vars, x
- | _ ->
- failwith "") !grammar_state in
+ let filter = function
+ | _, Notation (prec', vars, (_,_,ntn',_ as x)) when prec = prec' & ntn = ntn' ->
+ Some (vars, x)
+ | _ -> None in
+ let l = List.map_filter filter !grammar_state in
assert (List.length l = 1);
List.hd l