alternative to #22183; nimscript shares the same compileTime sym with VM (#22184)

This commit is contained in:
ringabout
2023-06-29 17:21:22 +08:00
committed by GitHub
parent d139d99946
commit 41ec894cb0
3 changed files with 21 additions and 1 deletions

View File

@@ -1911,6 +1911,8 @@ proc genVarSection(c: PCtx; n: PNode) =
let s = a[0].sym
checkCanEval(c, a[0])
if s.isGlobal:
let runtimeAccessToCompileTime = c.mode == emRepl and
sfCompileTime in s.flags and s.position > 0
if s.position == 0:
if importcCond(c, s): c.importcSym(a.info, s)
else:
@@ -1920,7 +1922,9 @@ proc genVarSection(c: PCtx; n: PNode) =
assert sa.kind != nkCall
c.globals.add(sa)
s.position = c.globals.len
if a[2].kind != nkEmpty:
if runtimeAccessToCompileTime:
discard
elif a[2].kind != nkEmpty:
let tmp = c.genx(a[0], {gfNodeAddr})
let val = c.genx(a[2])
c.genAdditionalCopy(a[2], opcWrDeref, tmp, 0, val)

View File

@@ -0,0 +1,7 @@
# bug.nim
var bar* {.compileTime.} = 1
proc dummy = discard
static:
inc bar

View File

@@ -0,0 +1,9 @@
discard """
cmd: "nim e $file"
"""
import mscriptcompiletime
macro foo =
doAssert bar == 2
foo()