Skip to content

Commit

Permalink
fixes #10805 (#10806)
Browse files Browse the repository at this point in the history
  • Loading branch information
cooldome authored and Araq committed Mar 13, 2019
1 parent ab872be commit d8c3df2
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
11 changes: 9 additions & 2 deletions compiler/renderer.nim
Expand Up @@ -500,7 +500,11 @@ proc lsub(g: TSrcGen; n: PNode): int =
of nkUsingStmt:
if sonsLen(n) > 1: result = MaxLineLen + 1
else: result = lsons(g, n) + len("using_")
of nkReturnStmt: result = lsub(g, n.sons[0]) + len("return_")
of nkReturnStmt:
if n.len > 0 and n[0].kind == nkAsgn:
result = len("return_") + lsub(g, n[0][1])
else:
result = len("return_") + lsub(g, n[0])
of nkRaiseStmt: result = lsub(g, n.sons[0]) + len("raise_")
of nkYieldStmt: result = lsub(g, n.sons[0]) + len("yield_")
of nkDiscardStmt: result = lsub(g, n.sons[0]) + len("discard_")
Expand Down Expand Up @@ -1335,7 +1339,10 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) =
gsub(g, n.sons[0])
of nkReturnStmt:
putWithSpace(g, tkReturn, "return")
gsub(g, n, 0)
if n.len > 0 and n[0].kind == nkAsgn:
gsub(g, n[0], 1)
else:
gsub(g, n, 0)
of nkRaiseStmt:
putWithSpace(g, tkRaise, "raise")
gsub(g, n, 0)
Expand Down
5 changes: 5 additions & 0 deletions tests/macros/tmacrostmt.nim
Expand Up @@ -92,6 +92,9 @@ proc fn2(x, y: float): float =
proc fn3(x, y: int): bool =
(((x and 3) div 4) or (x mod (y xor -1))) == 0 or y notin [1,2]

proc fn4(x: int): int =
if x mod 2 == 0: return x + 2
else: return 0

#------------------------------------
# bug #10807
Expand All @@ -103,11 +106,13 @@ static:
let fn1s = "proc fn1(x, y: int): int =\n result = 2 * (x + y)\n"
let fn2s = "proc fn2(x, y: float): float =\n result = (y + 2 * x) / (x - y)\n"
let fn3s = "proc fn3(x, y: int): bool =\n result = ((x and 3) div 4 or x mod (y xor -1)) == 0 or not contains([1, 2], y)\n"
let fn4s = "proc fn4(x: int): int =\n if x mod 2 == 0:\n return x + 2\n else:\n return 0\n"
let fnAddr = "proc fn_unsafeaddr(x: int): int =\n result = cast[int](unsafeAddr(x))\n"

doAssert fn1.repr_to_string == fn1s
doAssert fn2.repr_to_string == fn2s
doAssert fn3.repr_to_string == fn3s
doAssert fn4.repr_to_string == fn4s
doAssert fn_unsafeaddr.repr_to_string == fnAddr

#------------------------------------
Expand Down

0 comments on commit d8c3df2

Please sign in to comment.