summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJuan Carlos <juancarlospaco@gmail.com>2019-06-13 14:37:17 -0300
committerAndreas Rumpf <rumpf_a@web.de>2019-06-13 19:37:17 +0200
commit80320c72d3278bb29197dec6e49e4c46fe4fca92 (patch)
tree84a39954f6254054bdd7ef694947048becc2fd38
parentbda9fd149c4d766bf3aa41810f94882eef5d245b (diff)
downloadNim-80320c72d3278bb29197dec6e49e4c46fe4fca92.tar.gz
[bugfix] document the norewrite pragma (#11453)
* fixes #9454
* Peer review feedback, wording, move to experimental manual
-rw-r--r--doc/manual.rst1
-rw-r--r--doc/manual_experimental.rst20
2 files changed, 20 insertions, 1 deletions
diff --git a/doc/manual.rst b/doc/manual.rst
index 0de96077e..ac66c2550 100644
--- a/doc/manual.rst
+++ b/doc/manual.rst
@@ -6020,7 +6020,6 @@ In the example a new pragma named ``rtl`` is introduced that either imports
 a symbol from a dynamic library or exports the symbol for dynamic library
 generation.
 
-
 Disabling certain messages
 --------------------------
 Nim generates some warnings and hints ("line too long") that may annoy the
diff --git a/doc/manual_experimental.rst b/doc/manual_experimental.rst
index 2adfa01c1..a341f33de 100644
--- a/doc/manual_experimental.rst
+++ b/doc/manual_experimental.rst
@@ -1589,6 +1589,26 @@ having unknown lock level as well:
       g.memberProc()
 
 
+noRewrite pragma
+----------------
+
+Term rewriting macros and templates are currently greedy and
+they will rewrite as long as there is a match.
+There was no way to ensure some rewrite happens only once,
+eg. when rewriting term to same term plus extra content.
+
+``noRewrite`` pragma can actually prevent further rewriting on marked code,
+e.g. with given example ``echo("ab")`` will be rewritten just once:
+
+.. code-block:: nim
+  template pwnEcho{echo(x)}(x: expr) =
+    {.noRewrite.}: echo("pwned!")
+
+  echo "ab"
+
+``noRewrite`` pragma can be useful to control term-rewriting macros recursion.
+
+
 Taint mode
 ==========