aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-11-19 09:57:52 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2003-11-19 09:57:52 +0000
commit8f0a9f241e3d905bdecfe9ba3d0c0f7feb1e2b30 (patch)
tree87306e3dcfbe4b75038f3596c6168bf6edfa3cd3
parent1b6a8e5777cfe498f71680a0963271c27dbae26b (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.ml1
-rw-r--r--parsing/pcoq.ml48
-rw-r--r--parsing/pcoq.mli2
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 *)