mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-25 13:56:13 +00:00
bugfix evals.nim
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user