fix for passing tuples as static params to macros (#11423); fixes #10751 [bugfix]

* add vm value preparation proc

* small optimization
This commit is contained in:
Arne Döring 2019-06-07 14:34:59 +02:00 • committed by Andreas Rumpf
commit 99a4fed96b
2 changed files with 32 additions and 3 deletions

View file

@ -2031,12 +2031,29 @@ proc evalStaticStmt*(module: PSym; g: ModuleGraph; e: PNode, prc: PSym) =
proc setupCompileTimeVar*(module: PSym; g: ModuleGraph; n: PNode) =
discard evalConstExprAux(module, g, nil, n, emStaticStmt)
proc prepareVMValue(arg: PNode): PNode =
## strip nkExprColonExpr from tuple values recurively. That is how
## they are expected to be stored in the VM.
# Early abort without copy. No transformation takes place.
if arg.kind in nkLiterals:
return arg
result = copyNode(arg)
if arg.kind == nkTupleConstr:
for child in arg:
if child.kind == nkExprColonExpr:
result.add prepareVMValue(child[1])
else:
result.add prepareVMValue(child)
else:
for child in arg:
result.add prepareVMValue(child)
proc setupMacroParam(x: PNode, typ: PType): TFullReg =
case typ.kind
of tyStatic:
putIntoReg(result, x)
#of tyTypeDesc:
# putIntoReg(result, x)
putIntoReg(result, prepareVMValue(x))
else:
result.kind = rkNode
var n = x