transformed {.reorder: on.} into {.experimental: codeReordering.}, added tests
This commit is contained in:
parent
1d93991929
commit
e6a4213fae
5 changed files with 24 additions and 12 deletions
|
|
@ -120,7 +120,8 @@ type
|
||||||
notnil,
|
notnil,
|
||||||
dynamicBindSym,
|
dynamicBindSym,
|
||||||
forLoopMacros,
|
forLoopMacros,
|
||||||
caseStmtMacros
|
caseStmtMacros,
|
||||||
|
codeReordering,
|
||||||
|
|
||||||
SymbolFilesOption* = enum
|
SymbolFilesOption* = enum
|
||||||
disabledSf, writeOnlySf, readOnlySf, v2Sf
|
disabledSf, writeOnlySf, readOnlySf, v2Sf
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ const
|
||||||
wDeadCodeElimUnused, # deprecated, always on
|
wDeadCodeElimUnused, # deprecated, always on
|
||||||
wDeprecated,
|
wDeprecated,
|
||||||
wFloatchecks, wInfChecks, wNanChecks, wPragma, wEmit, wUnroll,
|
wFloatchecks, wInfChecks, wNanChecks, wPragma, wEmit, wUnroll,
|
||||||
wLinearScanEnd, wPatterns, wEffects, wNoForward, wReorder, wComputedGoto,
|
wLinearScanEnd, wPatterns, wEffects, wComputedGoto,
|
||||||
wInjectStmt, wDeprecated, wExperimental, wThis}
|
wInjectStmt, wDeprecated, wExperimental, wThis}
|
||||||
lambdaPragmas* = {FirstCallConv..LastCallConv, wImportc, wExportc, wNodecl,
|
lambdaPragmas* = {FirstCallConv..LastCallConv, wImportc, wExportc, wNodecl,
|
||||||
wNosideeffect, wSideeffect, wNoreturn, wDynlib, wHeader,
|
wNosideeffect, wSideeffect, wNoreturn, wDynlib, wHeader,
|
||||||
|
|
@ -227,10 +227,6 @@ proc onOff(c: PContext, n: PNode, op: TOptions, resOptions: var TOptions) =
|
||||||
if isTurnedOn(c, n): resOptions = resOptions + op
|
if isTurnedOn(c, n): resOptions = resOptions + op
|
||||||
else: resOptions = resOptions - op
|
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)
|
|
||||||
|
|
||||||
proc processCallConv(c: PContext, n: PNode) =
|
proc processCallConv(c: PContext, n: PNode) =
|
||||||
if n.kind in nkPragmaCallKinds and n.len == 2 and n.sons[1].kind == nkIdent:
|
if n.kind in nkPragmaCallKinds and n.len == 2 and n.sons[1].kind == nkIdent:
|
||||||
let sw = whichKeyword(n.sons[1].ident)
|
let sw = whichKeyword(n.sons[1].ident)
|
||||||
|
|
@ -724,7 +720,10 @@ proc processExperimental(c: PContext; n: PNode; s: PSym) =
|
||||||
case n[1].kind
|
case n[1].kind
|
||||||
of nkStrLit, nkRStrLit, nkTripleStrLit:
|
of nkStrLit, nkRStrLit, nkTripleStrLit:
|
||||||
try:
|
try:
|
||||||
c.features.incl parseEnum[Feature](n[1].strVal)
|
let feature = parseEnum[Feature](n[1].strVal)
|
||||||
|
c.features.incl feature
|
||||||
|
if feature == codeReordering:
|
||||||
|
c.module.flags.incl sfReorder
|
||||||
except ValueError:
|
except ValueError:
|
||||||
localError(c.config, n[1].info, "unknown experimental feature")
|
localError(c.config, n[1].info, "unknown experimental feature")
|
||||||
else:
|
else:
|
||||||
|
|
@ -815,8 +814,6 @@ proc singlePragma(c: PContext, sym: PSym, n: PNode, i: var int,
|
||||||
noVal(c, it)
|
noVal(c, it)
|
||||||
incl(sym.flags, {sfThread, sfGlobal})
|
incl(sym.flags, {sfThread, sfGlobal})
|
||||||
of wDeadCodeElimUnused: discard # deprecated, dead code elim always on
|
of wDeadCodeElimUnused: discard # deprecated, dead code elim always on
|
||||||
of wNoForward: pragmaNoForward(c, it)
|
|
||||||
of wReorder: pragmaNoForward(c, it, sfReorder)
|
|
||||||
of wMagic: processMagic(c, it, sym)
|
of wMagic: processMagic(c, it, sym)
|
||||||
of wCompileTime:
|
of wCompileTime:
|
||||||
noVal(c, it)
|
noVal(c, it)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@ discard """
|
||||||
disabled: true
|
disabled: true
|
||||||
"""
|
"""
|
||||||
|
|
||||||
{. noforward: on .}
|
# {. noforward: on .}
|
||||||
|
{.experimental: "codeReordering".}
|
||||||
|
|
||||||
proc foo(x: int) =
|
proc foo(x: int) =
|
||||||
bar x
|
bar x
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ output:'''0
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import macros
|
import macros
|
||||||
{.reorder: on .}
|
# {.reorder: on .}
|
||||||
|
{.experimental: "codeReordering".}
|
||||||
|
|
||||||
echo foo(-1)
|
echo foo(-1)
|
||||||
echo callWithFoo(0)
|
echo callWithFoo(0)
|
||||||
|
|
@ -71,4 +72,4 @@ macro make(arg: untyped): untyped =
|
||||||
proc first(i: int): void =
|
proc first(i: int): void =
|
||||||
make(second)
|
make(second)
|
||||||
|
|
||||||
var ss {.compileTime.}: string = ""
|
var ss {.compileTime.}: string = ""
|
||||||
|
|
|
||||||
12
tests/pragmas/treorderdeclared.nim
Normal file
12
tests/pragmas/treorderdeclared.nim
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
discard """
|
||||||
|
output:'''false'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
{.experimental: "codeReordering".}
|
||||||
|
|
||||||
|
proc x() =
|
||||||
|
echo(declared(foo))
|
||||||
|
|
||||||
|
var foo = 4
|
||||||
|
|
||||||
|
x() # "false", the same as it would be with code reordering OFF
|
||||||
Loading…
Add table
Add a link
Reference in a new issue