Merge pull request #8875 from awr1/experimentalize-reorder

Experimentalize reorder (Changes {.reorder: on.} to {.experimental: "codeReordering".})
This commit is contained in:
Andreas Rumpf
2018-09-15 00:36:57 +02:00
committed by GitHub
5 changed files with 27 additions and 10 deletions

View File

@@ -121,7 +121,8 @@ type
notnil,
dynamicBindSym,
forLoopMacros,
caseStmtMacros
caseStmtMacros,
codeReordering,
SymbolFilesOption* = enum
disabledSf, writeOnlySf, readOnlySf, v2Sf

View File

@@ -231,8 +231,17 @@ proc onOff(c: PContext, n: PNode, op: TOptions, resOptions: var TOptions) =
else: resOptions = resOptions - op
proc pragmaNoForward(c: PContext, n: PNode; flag=sfNoForward) =
if isTurnedOn(c, n): incl(c.module.flags, flag)
else: excl(c.module.flags, flag)
if isTurnedOn(c, n):
incl(c.module.flags, flag)
c.features.incl codeReordering
else:
excl(c.module.flags, flag)
# c.features.excl codeReordering
# deprecated as of 0.18.1
message(c.config, n.info, warnDeprecated,
"use {.experimental: \"codeReordering.\".} instead; " &
(if flag == sfNoForward: "{.noForward.}" else: "{.reorder.}"))
proc processCallConv(c: PContext, n: PNode) =
if n.kind in nkPragmaCallKinds and n.len == 2 and n.sons[1].kind == nkIdent:
@@ -351,7 +360,13 @@ proc processExperimental(c: PContext; n: PNode) =
case n[1].kind
of nkStrLit, nkRStrLit, nkTripleStrLit:
try:
c.features.incl parseEnum[Feature](n[1].strVal)
let feature = parseEnum[Feature](n[1].strVal)
c.features.incl feature
if feature == codeReordering:
if not isTopLevel(c):
localError(c.config, n.info,
"Code reordering experimental pragma only valid at toplevel")
c.module.flags.incl sfReorder
except ValueError:
localError(c.config, n[1].info, "unknown experimental feature")
else:
@@ -817,7 +832,7 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int,
incl(sym.flags, {sfThread, sfGlobal})
of wDeadCodeElimUnused: discard # deprecated, dead code elim always on
of wNoForward: pragmaNoForward(c, it)
of wReorder: pragmaNoForward(c, it, sfReorder)
of wReorder: pragmaNoForward(c, it, flag = sfReorder)
of wMagic: processMagic(c, it, sym)
of wCompileTime:
noVal(c, it)

View File

@@ -2,7 +2,8 @@ discard """
disabled: true
"""
{. noforward: on .}
# {. noforward: on .}
{.experimental: "codeReordering".}
proc foo(x: int) =
bar x

View File

@@ -6,8 +6,7 @@ defined
3'''
"""
{.reorder: on.}
{.experimental.}
{.experimental: "codeReordering".}
proc bar(x: T)

View File

@@ -6,7 +6,8 @@ output:'''0
"""
import macros
{.reorder: on .}
# {.reorder: on .}
{.experimental: "codeReordering".}
echo foo(-1)
echo callWithFoo(0)
@@ -71,4 +72,4 @@ macro make(arg: untyped): untyped =
proc first(i: int): void =
make(second)
var ss {.compileTime.}: string = ""
var ss {.compileTime.}: string = ""