diff options
| -rw-r--r-- | parsing/egrammar.ml | 1 | ||||
| -rw-r--r-- | parsing/pcoq.ml4 | 8 | ||||
| -rw-r--r-- | parsing/pcoq.mli | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/parsing/egrammar.ml b/parsing/egrammar.ml index 5473d8248a..eb61a70bd2 100644 --- a/parsing/egrammar.ml +++ b/parsing/egrammar.ml @@ -425,6 +425,7 @@ let unfreeze (grams, lex) = let n,l = number_of_entries undo in remove_grammars n; remove_levels l; + reinit_levels (); grammar_state := common; Lexer.unfreeze lex; List.iter extend_grammar (List.rev redo) diff --git a/parsing/pcoq.ml4 b/parsing/pcoq.ml4 index 32ab9894ed..3930c270ac 100644 --- a/parsing/pcoq.ml4 +++ b/parsing/pcoq.ml4 @@ -426,7 +426,13 @@ let reset_all_grammars () = f Vernac_.vernac; Lexer.init() - +let reinit_levels () = + if not !Options.v7 then begin + (* Ensure that primitive levels exist even if emptied by rule deletion *) + G.extend Constr.pattern (Some(Gramext.Before "0")) [(Some "1",None,[])]; + G.extend Constr.operconstr (Some(Gramext.After "10")) [(Some "9",None,[])]; + G.extend Constr.pattern (Some(Gramext.After "10")) [(Some "9",None,[])] + end let main_entry = Gram.Entry.create "vernac" diff --git a/parsing/pcoq.mli b/parsing/pcoq.mli index cbf416acc8..71657fafa9 100644 --- a/parsing/pcoq.mli +++ b/parsing/pcoq.mli @@ -46,6 +46,8 @@ val grammar_extend : val remove_grammars : int -> unit +val reinit_levels : unit -> unit + val camlp4_verbosity : bool -> ('a -> unit) -> 'a -> unit (* Parse a string *) |
