From 14f8db195021e709734ed89d9cb513d1c0db6a93 Mon Sep 17 00:00:00 2001 From: Hugo Herbelin Date: Mon, 3 Oct 2016 22:12:56 +0200 Subject: Fixing #4970 (confusion between special "{" and non special "{{" in notations). --- test-suite/bugs/closed/4970.v | 3 +++ toplevel/metasyntax.ml | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test-suite/bugs/closed/4970.v diff --git a/test-suite/bugs/closed/4970.v b/test-suite/bugs/closed/4970.v new file mode 100644 index 0000000000..7a896582f5 --- /dev/null +++ b/test-suite/bugs/closed/4970.v @@ -0,0 +1,3 @@ +(* Check "{{" is not confused with "{" in notations *) +Reserved Notation "x {{ y }}" (at level 40). +Notation "x {{ y }}" := (x y) (only parsing). diff --git a/toplevel/metasyntax.ml b/toplevel/metasyntax.ml index 92208e3046..4f41043e87 100644 --- a/toplevel/metasyntax.ml +++ b/toplevel/metasyntax.ml @@ -1203,7 +1203,10 @@ let contract_notation ntn = let rec aux ntn i = if i <= String.length ntn - 5 then let ntn' = - if String.is_sub "{ _ }" ntn i then + if String.is_sub "{ _ }" ntn i && + (i = 0 || ntn.[i-1] = ' ') && + (i = String.length ntn - 5 || ntn.[i+5] = ' ') + then String.sub ntn 0 i ^ "_" ^ String.sub ntn (i+5) (String.length ntn -i-5) else ntn in -- cgit v1.2.3