From 01fcde2146a190e889d200f363e8feb3feb38f2d Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 13 Jun 2019 14:37:17 -0300 Subject: [PATCH] [bugfix] document the norewrite pragma (#11453) * fixes #9454 * Peer review feedback, wording, move to experimental manual (cherry picked from commit 80320c72d3278bb29197dec6e49e4c46fe4fca92) --- doc/manual.rst | 1 - doc/manual_experimental.rst | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/doc/manual.rst b/doc/manual.rst index 0de96077e3..ac66c25501 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 2adfa01c19..a341f33dec 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 ==========