fixes #14900, this time for real, maybe (#14934)

This commit is contained in:
Andreas Rumpf 2020-07-08 14:47:14 +02:00 • committed by GitHub
commit 06d776a582
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 17 deletions

View file

@ -134,7 +134,7 @@ proc toTree(c: var Con; s: var Scope; ret: PNode; flags: set[ToTreeFlag]): PNode
var r = PNode(nil) var r = PNode(nil)
if isExpr: if isExpr:
result = newNodeIT(nkStmtListExpr, ret.info, ret.typ) result = newNodeIT(nkStmtListExpr, ret.info, ret.typ)
if ret.kind == nkStmtListExpr: if ret.kind in nkCallKinds + {nkStmtListExpr}:
r = getTemp(c, s, ret.typ, ret.info) r = getTemp(c, s, ret.typ, ret.info)
else: else:
result = newNodeI(nkStmtList, ret.info) result = newNodeI(nkStmtList, ret.info)
@ -155,7 +155,13 @@ proc toTree(c: var Con; s: var Scope; ret: PNode; flags: set[ToTreeFlag]): PNode
result.add newTryFinally(ret, finSection) result.add newTryFinally(ret, finSection)
else: else:
if r != nil: if r != nil:
result.add newTree(nkFastAsgn, r, ret) if ret.kind == nkStmtListExpr:
# simplify it a bit further by merging the nkStmtListExprs
let last = ret.len - 1
for i in 0 ..< last: result.add ret[i]
result.add newTree(nkFastAsgn, r, ret[last])
else:
result.add newTree(nkFastAsgn, r, ret)
else: else:
result.add ret result.add ret
for m in s.wasMoved: result.add m for m in s.wasMoved: result.add m

View file

@ -105,20 +105,14 @@ proc escapeCheck =
escapeCheck() escapeCheck()
# bug #14900 # bug #14900
template sortedByIt(seq1): untyped =
var result = seq1
result
proc seqsEqual(seq1, seq2: seq[string]): bool = proc seqsEqual(a, b: string): bool =
# works as a normal proc (if we would assign result inside) if false:
# doesn't work as an expression false
result = if false: # needed else:
false (var result1 = a; result1) == (var result2 = b; result2)
else:
let a1 = seq1.sortedByIt()
let a2 = seq2.sortedByIt()
# echo a1 - works if you uncomment any of these
# echo a2
a1 == a2
echo seqsEqual(@["a", "b", "c"], @["a", "b", "c"]) # can be const or var too
let expected = "hello"
echo seqsEqual(expected, expected)