diff options
| author | Hugo Herbelin | 2020-08-30 06:49:22 +0200 |
|---|---|---|
| committer | Hugo Herbelin | 2020-09-02 18:48:21 +0200 |
| commit | dffe222e9d84c423a3e3c1e9b36d36a37727dc7b (patch) | |
| tree | 8947c76acf2ef89adeb4fe0484da246b8af752a1 /interp/notation.ml | |
| parent | 0d30f79268fea18ef99c040a859956f61c3d978a (diff) | |
Fixes part 1 of #12908 (collision involving a lonely notation).
Strangely, this was not yet noticed. Hiding of a scoped notation by a
lonely notation should be checked at printing time.
Diffstat (limited to 'interp/notation.ml')
| -rw-r--r-- | interp/notation.ml | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/interp/notation.ml b/interp/notation.ml index 17ae045187..7e90e15b72 100644 --- a/interp/notation.ml +++ b/interp/notation.ml @@ -1198,10 +1198,25 @@ let rec find_without_delimiters find (ntn_scope,ntn) = function find_without_delimiters find (ntn_scope,ntn) scopes end | LonelyNotationItem ntn' :: scopes -> - begin match ntn_scope, ntn with - | LastLonelyNotation, Some ntn when notation_eq ntn ntn' -> - Some (None, None) + begin match ntn with + | Some ntn'' when notation_eq ntn' ntn'' -> + begin match ntn_scope with + | LastLonelyNotation -> + (* If the first notation with same string in the visibility stack + is the one we want to print, then it can be used without + risking a collision *) + Some (None, None) + | NotationInScope _ -> + (* A lonely notation is liable to hide the scoped notation + to print, we check if the lonely notation is active to + know if the delimiter of the scoped notationis needed *) + if find default_scope then + find_with_delimiters ntn_scope + else + find_without_delimiters find (ntn_scope,ntn) scopes + end | _ -> + (* A lonely notation which does not interfere with the notation to use *) find_without_delimiters find (ntn_scope,ntn) scopes end | [] -> |
