From 8a6b416c28d635365b2718021e0c4b34e9ec8a00 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Wed, 1 May 2019 22:18:45 -0700 Subject: [PATCH] const named tuple unpacking --- compiler/semfold.nim | 2 +- tests/tuples/ttuples_various.nim | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/compiler/semfold.nim b/compiler/semfold.nim index 5fb2fcd65..3034ef9cc 100644 --- a/compiler/semfold.nim +++ b/compiler/semfold.nim @@ -701,7 +701,7 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode = for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i].sons[1], g) if a == nil: return nil - result.sons[i].sons[1] = a + result.sons[i] = a else: for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i], g) diff --git a/tests/tuples/ttuples_various.nim b/tests/tuples/ttuples_various.nim index 94a2f3ff0..dc060da1e 100644 --- a/tests/tuples/ttuples_various.nim +++ b/tests/tuples/ttuples_various.nim @@ -81,6 +81,27 @@ block unpack_const: doAssert z == 6 +# bug #10724 +block unpack_const_named: + const (a, ) = (x: 1, ) + doAssert a == 1 + + const (b, c) = (x: 2, y: 3) + doAssert b == 2 + doAssert c == 3 + + const (d, e, f) = (x: 4, y: 5, z: 6) + doAssert d == 4 + doAssert e == 5 + doAssert f == 6 + +block const_named: + const x = block: + (a: 1, b: 2, c: 3) + doAssert x.a == 1 + doAssert x.b == 2 + doAssert x.c == 3 + block tuple_subscript: proc`[]` (t: tuple, key: string): string =