Skip to content

Commit

Permalink
fix #12740 (#12774)
Browse files Browse the repository at this point in the history
* fix #12740

* A different kind of a hack

* proper fix

* fix typo
  • Loading branch information
krux02 authored and cooldome committed Dec 4, 2019
1 parent 3383985 commit b0c06aa
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 7 deletions.
23 changes: 16 additions & 7 deletions compiler/renderer.nim
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,11 @@ proc lsub(g: TSrcGen; n: PNode): int =
result = lcomma(g, n, 0, - 3)
if n[^2].kind != nkEmpty: result = result + lsub(g, n[^2]) + 2
if n[^1].kind != nkEmpty: result = result + lsub(g, n[^1]) + 3
of nkVarTuple: result = lcomma(g, n, 0, - 3) + len("() = ") + lsub(g, lastSon(n))
of nkVarTuple:
if n[^1].kind == nkEmpty:
result = lcomma(g, n, 0, - 2) + len("()")
else:
result = lcomma(g, n, 0, - 3) + len("() = ") + lsub(g, lastSon(n))
of nkChckRangeF: result = len("chckRangeF") + 2 + lcomma(g, n)
of nkChckRange64: result = len("chckRange64") + 2 + lcomma(g, n)
of nkChckRange: result = len("chckRange") + 2 + lcomma(g, n)
Expand Down Expand Up @@ -1119,12 +1123,17 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) =
putWithSpace(g, tkEquals, "=")
gsub(g, n[^1], c)
of nkVarTuple:
put(g, tkParLe, "(")
gcomma(g, n, 0, -3)
put(g, tkParRi, ")")
put(g, tkSpaces, Space)
putWithSpace(g, tkEquals, "=")
gsub(g, lastSon(n), c)
if n[^1].kind == nkEmpty:
put(g, tkParLe, "(")
gcomma(g, n, 0, -2)
put(g, tkParRi, ")")
else:
put(g, tkParLe, "(")
gcomma(g, n, 0, -3)
put(g, tkParRi, ")")
put(g, tkSpaces, Space)
putWithSpace(g, tkEquals, "=")
gsub(g, lastSon(n), c)
of nkExprColonExpr:
gsub(g, n, 0)
putWithSpace(g, tkColon, ":")
Expand Down
43 changes: 43 additions & 0 deletions tests/macros/tastrepr.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
discard """
output: '''
var data = @[(1, "one"), (2, "two")]
for (i, d) in pairs(data):
discard
for i, d in pairs(data):
discard
for i, (x, y) in pairs(data):
discard
var (a, b) = (1, 2)
var data = @[(1, "one"), (2, "two")]
for (i, d) in pairs(data):
discard
for i, d in pairs(data):
discard
for i, (x, y) in pairs(data):
discard
var (a, b) = (1, 2)
'''
"""

import macros

macro echoTypedRepr(arg: typed) =
result = newCall(ident"echo", newLit(arg.repr))

macro echoUntypedRepr(arg: untyped) =
result = newCall(ident"echo", newLit(arg.repr))

template echoTypedAndUntypedRepr(arg: untyped) =
echoTypedRepr(arg)
echoUntypedRepr(arg)

echoTypedAndUntypedRepr:
var data = @[(1,"one"), (2,"two")]
for (i, d) in pairs(data):
discard
for i, d in pairs(data):
discard
for i, (x,y) in pairs(data):
discard
var (a,b) = (1,2)

0 comments on commit b0c06aa

Please sign in to comment.