put the new for loop macros under an experimental switch named 'forLoopMacros'

This commit is contained in:
Andreas Rumpf
2018-08-15 17:45:57 +02:00
parent 27e1fbe7db
commit da41fc1801
4 changed files with 13 additions and 5 deletions

View File

@@ -111,14 +111,16 @@ type
ideNone, ideSug, ideCon, ideDef, ideUse, ideDus, ideChk, ideMod,
ideHighlight, ideOutline, ideKnown, ideMsg
Feature* = enum ## experimental features
Feature* = enum ## experimental features; DO NOT RENAME THESE!
implicitDeref,
dotOperators,
callOperator,
parallel,
destructor,
notnil,
dynamicBindSym
dynamicBindSym,
forLoopMacros
#caseStmtMacros
SymbolFilesOption* = enum
disabledSf, writeOnlySf, readOnlySf, v2Sf

View File

@@ -720,8 +720,9 @@ proc handleForLoopMacro(c: PContext; n: PNode): PNode =
proc semFor(c: PContext, n: PNode): PNode =
checkMinSonsLen(n, 3, c.config)
var length = sonsLen(n)
result = handleForLoopMacro(c, n)
if result != nil: return result
if forLoopMacros in c.features:
result = handleForLoopMacro(c, n)
if result != nil: return result
openScope(c)
result = n
n.sons[length-2] = semExprNoDeref(c, n.sons[length-2], {efWantIterator})

View File

@@ -5380,6 +5380,7 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
:test: "nim c $1"
import macros
{.experimental: "forLoopMacros".}
macro enumerate(x: ForLoopStmt): untyped =
expectKind x, nnkForStmt
@@ -5406,6 +5407,10 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
echo a2, " ", b2
Currently for loop macros must be enabled explicitly
via ``{.experimental: "forLoopMacros".}``.
Special Types
=============

View File

@@ -12,7 +12,7 @@ discard """
"""
import macros
{.experimental: "forLoopMacros".}
macro mymacro(): untyped =
result = newLit([1, 2, 3])