put the new for loop macros under an experimental switch named 'forLoopMacros'
This commit is contained in:
parent
27e1fbe7db
commit
da41fc1801
4 changed files with 13 additions and 5 deletions
|
|
@ -111,14 +111,16 @@ type
|
||||||
ideNone, ideSug, ideCon, ideDef, ideUse, ideDus, ideChk, ideMod,
|
ideNone, ideSug, ideCon, ideDef, ideUse, ideDus, ideChk, ideMod,
|
||||||
ideHighlight, ideOutline, ideKnown, ideMsg
|
ideHighlight, ideOutline, ideKnown, ideMsg
|
||||||
|
|
||||||
Feature* = enum ## experimental features
|
Feature* = enum ## experimental features; DO NOT RENAME THESE!
|
||||||
implicitDeref,
|
implicitDeref,
|
||||||
dotOperators,
|
dotOperators,
|
||||||
callOperator,
|
callOperator,
|
||||||
parallel,
|
parallel,
|
||||||
destructor,
|
destructor,
|
||||||
notnil,
|
notnil,
|
||||||
dynamicBindSym
|
dynamicBindSym,
|
||||||
|
forLoopMacros
|
||||||
|
#caseStmtMacros
|
||||||
|
|
||||||
SymbolFilesOption* = enum
|
SymbolFilesOption* = enum
|
||||||
disabledSf, writeOnlySf, readOnlySf, v2Sf
|
disabledSf, writeOnlySf, readOnlySf, v2Sf
|
||||||
|
|
|
||||||
|
|
@ -720,8 +720,9 @@ proc handleForLoopMacro(c: PContext; n: PNode): PNode =
|
||||||
proc semFor(c: PContext, n: PNode): PNode =
|
proc semFor(c: PContext, n: PNode): PNode =
|
||||||
checkMinSonsLen(n, 3, c.config)
|
checkMinSonsLen(n, 3, c.config)
|
||||||
var length = sonsLen(n)
|
var length = sonsLen(n)
|
||||||
result = handleForLoopMacro(c, n)
|
if forLoopMacros in c.features:
|
||||||
if result != nil: return result
|
result = handleForLoopMacro(c, n)
|
||||||
|
if result != nil: return result
|
||||||
openScope(c)
|
openScope(c)
|
||||||
result = n
|
result = n
|
||||||
n.sons[length-2] = semExprNoDeref(c, n.sons[length-2], {efWantIterator})
|
n.sons[length-2] = semExprNoDeref(c, n.sons[length-2], {efWantIterator})
|
||||||
|
|
|
||||||
|
|
@ -5380,6 +5380,7 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
|
||||||
:test: "nim c $1"
|
:test: "nim c $1"
|
||||||
|
|
||||||
import macros
|
import macros
|
||||||
|
{.experimental: "forLoopMacros".}
|
||||||
|
|
||||||
macro enumerate(x: ForLoopStmt): untyped =
|
macro enumerate(x: ForLoopStmt): untyped =
|
||||||
expectKind x, nnkForStmt
|
expectKind x, nnkForStmt
|
||||||
|
|
@ -5406,6 +5407,10 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
|
||||||
echo a2, " ", b2
|
echo a2, " ", b2
|
||||||
|
|
||||||
|
|
||||||
|
Currently for loop macros must be enabled explicitly
|
||||||
|
via ``{.experimental: "forLoopMacros".}``.
|
||||||
|
|
||||||
|
|
||||||
Special Types
|
Special Types
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ discard """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import macros
|
import macros
|
||||||
|
{.experimental: "forLoopMacros".}
|
||||||
macro mymacro(): untyped =
|
macro mymacro(): untyped =
|
||||||
result = newLit([1, 2, 3])
|
result = newLit([1, 2, 3])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue