summary refs log tree commit diff stats
path: root/doc
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2021-08-24 21:50:40 -0700
committerGitHub <noreply@github.com>2021-08-25 06:50:40 +0200
commit3aa16c1de00c723d48e48fe3fdf07a276d1b4b6a (patch)
treed4547a8ab662981357d06334bf46f935f18e65d4 /doc
parent3d1bba04ab1092630983695734d6984ddff4688c (diff)
downloadNim-3aa16c1de00c723d48e48fe3fdf07a276d1b4b6a.tar.gz
fix RFC #341: dot-like operators are now parsed with same precedence as `.` (#18711)
* fix RFC #341: dot-like operators are now parsed with same precedence as `.`

* fixup

* [skip ci] address comment in changelog

* address comment

* update grammmar

* add manual entry

* fixup

* -d:nimPreviewDotLikeOps

* address comment to unblock PR: move nimPreviewDotLikeOps out of config/config.nims
Diffstat (limited to 'doc')
-rw-r--r--doc/grammar.txt2
-rw-r--r--doc/manual.rst9
2 files changed, 11 insertions, 0 deletions
diff --git a/doc/grammar.txt b/doc/grammar.txt
index d4f4a0515..f58621b97 100644
--- a/doc/grammar.txt
+++ b/doc/grammar.txt
@@ -29,6 +29,7 @@ exprList = expr ^+ comma
 exprColonEqExprList = exprColonEqExpr (comma exprColonEqExpr)* (comma)?
 dotExpr = expr '.' optInd (symbol | '[:' exprList ']')
 explicitGenericInstantiation = '[:' exprList ']' ( '(' exprColonEqExpr ')' )?
+dotLikeExpr = expr DOTLIKEOP optInd symbol
 qualifiedIdent = symbol ('.' optInd symbol)?
 setOrTableConstr = '{' ((exprColonEqExpr comma)* | ':' ) '}'
 castExpr = 'cast' ('[' optInd typeDesc optPar ']' '(' optInd expr optPar ')') /
@@ -56,6 +57,7 @@ tupleConstr = '(' optInd (exprColonEqExpr comma?)* optPar ')'
 arrayConstr = '[' optInd (exprColonEqExpr comma?)* optPar ']'
 primarySuffix = '(' (exprColonEqExpr comma?)* ')'
       | '.' optInd symbol generalizedLit?
+      | DOTLIKEOP optInd symbol generalizedLit?
       | '[' optInd exprColonEqExprList optPar ']'
       | '{' optInd exprColonEqExprList optPar '}'
       | &( '`'|IDENT|literal|'cast'|'addr'|'type') expr # command syntax
diff --git a/doc/manual.rst b/doc/manual.rst
index 9c7c219e9..72d50a901 100644
--- a/doc/manual.rst
+++ b/doc/manual.rst
@@ -748,6 +748,7 @@ has the second-lowest precedence.
 
 Otherwise, precedence is determined by the first character.
 
+
 ================  =======================================================  ==================  ===============
 Precedence level    Operators                                              First character     Terminal symbol
 ================  =======================================================  ==================  ===============
@@ -783,6 +784,14 @@ of a call or whether it is parsed as a tuple constructor:
 .. code-block:: nim
   echo (1, 2) # pass the tuple (1, 2) to echo
 
+Dot-like operators
+------------------
+
+Terminal symbol in the grammar: `DOTLIKEOP`.
+
+Dot-like operators are operators starting with `.`, but not with `..`, for e.g. `.?`;
+they have the same precedence as `.`, so that `a.?b.c` is parsed as `(a.?b).c` instead of `a.?(b.c)`.
+
 
 Grammar
 -------