diff options
author | 2003-11-19 09:57:52 +0000 | |
---|---|---|
committer | 2003-11-19 09:57:52 +0000 | |
commit | 8f0a9f241e3d905bdecfe9ba3d0c0f7feb1e2b30 (patch) | |
tree | 87306e3dcfbe4b75038f3596c6168bf6edfa3cd3 | |
parent | 1b6a8e5777cfe498f71680a0963271c27dbae26b (diff) |
Protection contre l'effacement des niveaux vides de operconstr et pattern par le delete_rule de camlp4
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@4947 85f007b7-540e-0410-9357-904b9bb8a0f7
-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 5473d8248..eb61a70bd 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 32ab9894e..3930c270a 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 cbf416acc..71657fafa 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 *) |