bugfix evals.nim

This commit is contained in:
Araq
2013-04-07 14:12:08 +02:00
parent 0b1630b46c
commit f9d4e39a12
2 changed files with 7 additions and 4 deletions

View File

@@ -295,8 +295,9 @@ proc evalVar(c: PEvalContext, n: PNode): PNode =
# XXX var (x, y) = z support?
#assert(a.sons[0].kind == nkSym) can happen for transformed vars
if a.sons[2].kind != nkEmpty:
# XXX copyTree could be avoided in some cases
result = evalAux(c, a.sons[2], {}).copyTree
result = evalAux(c, a.sons[2], {})
if result.kind in {nkType..nkNilLit}:
result = result.copyNode
if isSpecial(result): return
else:
result = getNullValue(a.sons[0].typ, a.sons[0].info)

View File

@@ -333,9 +333,11 @@ proc nestList*(theProc: TNimrodIdent,
## ``[a, b, c]`` is transformed into ``theProc(a, theProc(c, d))``.
var L = x.len
result = newCall(theProc, x[L-2], x[L-1])
var a = result
for i in countdown(L-3, 0):
a = newCall(theProc, x[i], copyNimTree(a))
# XXX the 'copyNimTree' here is necessary due to a bug in the evaluation
# engine that would otherwise create an endless loop here. :-(
# This could easily user code and so should be fixed in evals.nim somehow.
result = newCall(theProc, x[i], copyNimTree(result))
proc treeRepr*(n: PNimrodNode): string {.compileTime.} =
## Convert the AST `n` to a human-readable tree-like string.