diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2018-09-15 00:36:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-15 00:36:57 +0200 |
commit | 5fa4fa185bc9c00ada9c3892921abc919481d349 (patch) | |
tree | 36ad7afc4df07bf018a6470ecdeeae8e8aae08d3 /compiler/pragmas.nim | |
parent | 0c04b80651ff591beadb873c8814168e66e6b722 (diff) | |
parent | e3d7056902550f85cee68ee0cddfe4d944b4e815 (diff) | |
download | Nim-5fa4fa185bc9c00ada9c3892921abc919481d349.tar.gz |
Merge pull request #8875 from awr1/experimentalize-reorder
Experimentalize reorder (Changes {.reorder: on.} to {.experimental: "codeReordering".})
Diffstat (limited to 'compiler/pragmas.nim')
-rw-r--r-- | compiler/pragmas.nim | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim index e6e4eff38..b8dae8123 100644 --- a/compiler/pragmas.nim +++ b/compiler/pragmas.nim @@ -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) |