Fix semfold handling of {.str/int/bool-define.} (#13964)

This commit is contained in:
Oscar Nihlgård 2020-04-13 14:22:33 +02:00 • committed by GitHub
commit 255698deee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 0 deletions

View file

@ -549,9 +549,13 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode =
localError(g.config, s.info, localError(g.config, s.info,
"{.intdefine.} const was set to an invalid integer: '" & "{.intdefine.} const was set to an invalid integer: '" &
g.config.symbols[s.name.s] & "'") g.config.symbols[s.name.s] & "'")
else:
result = copyTree(s.ast)
of mStrDefine: of mStrDefine:
if isDefined(g.config, s.name.s): if isDefined(g.config, s.name.s):
result = newStrNodeT(g.config.symbols[s.name.s], n, g) result = newStrNodeT(g.config.symbols[s.name.s], n, g)
else:
result = copyTree(s.ast)
of mBoolDefine: of mBoolDefine:
if isDefined(g.config, s.name.s): if isDefined(g.config, s.name.s):
try: try:
@ -562,6 +566,8 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode =
g.config.symbols[s.name.s] & "'") g.config.symbols[s.name.s] & "'")
else: else:
result = copyTree(s.ast) result = copyTree(s.ast)
else:
result = copyTree(s.ast)
of skProc, skFunc, skMethod: of skProc, skFunc, skMethod:
result = n result = n
of skParam: of skParam:

View file

@ -16,3 +16,15 @@ doAssert booldef
doAssert not booldef2 doAssert not booldef2
doAssert intdef == 2 doAssert intdef == 2
doAssert strdef == "foobar" doAssert strdef == "foobar"
# Intentionally not defined from command line
const booldef3 {.booldefine.} = true
const intdef2 {.intdefine.} = 1
const strdef2 {.strdefine.} = "abc"
type T = object
when booldef3:
field1: int
when intdef2 == 1:
field2: int
when strdef2 == "abc":
field3: int