From eecf12c4b5fa8a011b1fc1991b554a31ca9a4a27 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Wed, 17 May 2023 06:20:40 +0800 Subject: [PATCH] fixes #21708; skip colons for tuples in VM (#21850) * fixes #21708; skip colon for tuples in VM * skip nimnodes * fixes types --- compiler/vm.nim | 8 +++++++- tests/vm/tvmmisc.nim | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/compiler/vm.nim b/compiler/vm.nim index ba3677cf1b..4a505c9209 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -20,7 +20,7 @@ import when defined(nimPreviewSlimSystem): import std/formatfloat - +import astalgo import ast except getstr from semfold import leValueConv, ordinalValToString from evaltempl import evalTemplate @@ -844,6 +844,12 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = of nkObjConstr: let n = src[rc + 1].skipColon regs[ra].node = n + of nkTupleConstr: + let n = if src.typ != nil and tfTriggersCompileTime in src.typ.flags: + src[rc] + else: + src[rc].skipColon + regs[ra].node = n else: let n = src[rc] regs[ra].node = n diff --git a/tests/vm/tvmmisc.nim b/tests/vm/tvmmisc.nim index f41a918f95..9e32c92493 100644 --- a/tests/vm/tvmmisc.nim +++ b/tests/vm/tvmmisc.nim @@ -688,3 +688,13 @@ block: # bug #7590 # const c=(foo:(bar1: 0.0)) const c=(foo:(bar1:"foo1")) fun2(c) + +block: # bug #21708 + type + Tup = tuple[name: string] + + const X: array[2, Tup] = [(name: "foo",), (name: "bar",)] + + static: + let s = X[0] + doAssert s[0] == "foo"