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"