diff options
-rw-r--r-- | compiler/semstmts.nim | 2 | ||||
-rw-r--r-- | tests/parser/ttupleunpack.nim | 32 |
2 files changed, 22 insertions, 12 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 24c135767..c0c48782e 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -442,6 +442,8 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = var v = semIdentDef(c, a.sons[j], symkind) if sfGenSym notin v.flags and not isDiscardUnderscore(a.sons[j]): addInterfaceDecl(c, v) + if isDiscardUnderscore(a.sons[j]): + v.flags.incl(sfGenSym) when oKeepVariableNames: if c.inUnrolledContext > 0: v.flags.incl(sfShadowed) else: diff --git a/tests/parser/ttupleunpack.nim b/tests/parser/ttupleunpack.nim index 3a1b77ea1..581e6e940 100644 --- a/tests/parser/ttupleunpack.nim +++ b/tests/parser/ttupleunpack.nim @@ -3,19 +3,27 @@ discard """ output: "" exitcode: 0 """ -proc foo(): tuple[x, y, z: int] = - return (4, 2, 3) -var (x, _, y) = foo() -doAssert x == 4 -doAssert y == 3 +proc main() = -var (a, _, _) = foo() -doAssert a == 4 + proc foo(): tuple[x, y, z: int] = + return (4, 2, 3) -iterator bar(): tuple[x, y, z: int] = - yield (1,2,3) + var (x, _, y) = foo() + doAssert x == 4 + doAssert y == 3 -for x, y, _ in bar(): - doAssert x == 1 - doAssert y == 2 + var (a, _, _) = foo() + doAssert a == 4 + + var (a, _, _xx) = foo() + doAssert a == 4 + + iterator bar(): tuple[x, y, z: int] = + yield (1,2,3) + + for x, y, _ in bar(): + doAssert x == 1 + doAssert y == 2 + +main() |