diff options
author | Juan Carlos <juancarlospaco@gmail.com> | 2019-06-13 14:37:17 -0300 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-06-13 19:37:17 +0200 |
commit | 80320c72d3278bb29197dec6e49e4c46fe4fca92 (patch) | |
tree | 84a39954f6254054bdd7ef694947048becc2fd38 | |
parent | bda9fd149c4d766bf3aa41810f94882eef5d245b (diff) | |
download | Nim-80320c72d3278bb29197dec6e49e4c46fe4fca92.tar.gz |
[bugfix] document the norewrite pragma (#11453)
* fixes #9454 * Peer review feedback, wording, move to experimental manual
-rw-r--r-- | doc/manual.rst | 1 | ||||
-rw-r--r-- | doc/manual_experimental.rst | 20 |
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 ========== |