Improve enumerate macro (#8819)

* fix case macro manual entry to produce code block

Previously line breaks were so weird that the code blocks were not created.

* improve `enumerate` for loop macro by wrapping in block
This commit is contained in:
Vindaar 2018-08-31 01:16:44 +02:00 • committed by Andreas Rumpf
commit 47c7fd037e

View file

@ -5459,12 +5459,17 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
newFor.add x[^2][1] newFor.add x[^2][1]
newFor.add body newFor.add body
result.add newFor result.add newFor
# now wrap the whole macro in a block to create a new scope
result = quote do:
block: `result`
for a, b in enumerate(items([1, 2, 3])): for a, b in enumerate(items([1, 2, 3])):
echo a, " ", b echo a, " ", b
for a2, b2 in enumerate([1, 2, 3, 5]): # without wrapping the macro in a block, we'd need to choose different
echo a2, " ", b2 # names for `a` and `b` here to avoid redefinition errors
for a, b in enumerate([1, 2, 3, 5]):
echo a, " ", b
Currently for loop macros must be enabled explicitly Currently for loop macros must be enabled explicitly
@ -5474,12 +5479,11 @@ via ``{.experimental: "forLoopMacros".}``.
Case statement macros Case statement macros
--------------------- ---------------------
A macro that needs to be called `match`:idx: can be used to A macro that needs to be called `match`:idx: can be used to rewrite
rewrite ``case`` statements in order to ``case`` statements in order to implement `pattern matching`:idx: for
implement `pattern matching`:idx: for certain types. The following certain types. The following example implements a simplistic form of
example implements a simplistic form of pattern matching for tuples, pattern matching for tuples, leveraging the existing equality operator
leveraging the existing equality operator for tuples (as provided in for tuples (as provided in ``system.==``):
``system.==``):
.. code-block:: nim .. code-block:: nim
:test: "nim c $1" :test: "nim c $1"