aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Pit-Claudel2019-10-28 12:53:31 -0400
committerClément Pit-Claudel2019-10-28 12:53:31 -0400
commit6c5de19692ba7c7b00c650ed02f3b4136cbf81fc (patch)
treede44fba242c42d1c6f35d2b9559e896314d1b64d
parent073b259e8ffb898257f16fc3412caf24f271d7a1 (diff)
parent74c6d69a08b50b77c001ca758d25f1a969bf2c73 (diff)
Merge PR #10963: Possible simplification of parsing rules.
Reviewed-by: ppedrot
-rw-r--r--doc/changelog/03-notations/10963-simplify-parser.rst6
-rw-r--r--parsing/g_constr.mlg16
2 files changed, 10 insertions, 12 deletions
diff --git a/doc/changelog/03-notations/10963-simplify-parser.rst b/doc/changelog/03-notations/10963-simplify-parser.rst
new file mode 100644
index 0000000000..327a39bdb6
--- /dev/null
+++ b/doc/changelog/03-notations/10963-simplify-parser.rst
@@ -0,0 +1,6 @@
+- A simplification of parsing rules could cause a slight change of
+ parsing precedences for the very rare users who defined notations
+ with `constr` at level strictly between 100 and 200 and used these
+ notations on the right-hand side of a cast operator (`:`, `:>`,
+ `:>>`) (`#10963 <https://github.com/coq/coq/pull/10963>`_, by Théo
+ Zimmermann, simplification initially noticed by Jim Fehrle).
diff --git a/parsing/g_constr.mlg b/parsing/g_constr.mlg
index ea44e748c9..87b9a8eea3 100644
--- a/parsing/g_constr.mlg
+++ b/parsing/g_constr.mlg
@@ -196,17 +196,11 @@ GRAMMAR EXTEND Gram
[ "200" RIGHTA
[ c = binder_constr -> { c } ]
| "100" RIGHTA
- [ c1 = operconstr; "<:"; c2 = binder_constr ->
+ [ c1 = operconstr; "<:"; c2 = operconstr LEVEL "200" ->
{ CAst.make ~loc @@ CCast(c1, CastVM c2) }
- | c1 = operconstr; "<:"; c2 = SELF ->
- { CAst.make ~loc @@ CCast(c1, CastVM c2) }
- | c1 = operconstr; "<<:"; c2 = binder_constr ->
- { CAst.make ~loc @@ CCast(c1, CastNative c2) }
- | c1 = operconstr; "<<:"; c2 = SELF ->
+ | c1 = operconstr; "<<:"; c2 = operconstr LEVEL "200" ->
{ CAst.make ~loc @@ CCast(c1, CastNative c2) }
- | c1 = operconstr; ":";c2 = binder_constr ->
- { CAst.make ~loc @@ CCast(c1, CastConv c2) }
- | c1 = operconstr; ":"; c2 = SELF ->
+ | c1 = operconstr; ":"; c2 = operconstr LEVEL "200" ->
{ CAst.make ~loc @@ CCast(c1, CastConv c2) }
| c1 = operconstr; ":>" ->
{ CAst.make ~loc @@ CCast(c1, CastCoerce) } ]
@@ -407,9 +401,7 @@ GRAMMAR EXTEND Gram
pattern:
[ "200" RIGHTA [ ]
| "100" RIGHTA
- [ p = pattern; ":"; ty = binder_constr ->
- {CAst.make ~loc @@ CPatCast (p, ty) }
- | p = pattern; ":"; ty = operconstr LEVEL "100" ->
+ [ p = pattern; ":"; ty = operconstr LEVEL "200" ->
{CAst.make ~loc @@ CPatCast (p, ty) } ]
| "99" RIGHTA [ ]
| "90" RIGHTA [ ]