diff options
-rw-r--r-- | compiler/ccgexprs.nim | 11 | ||||
-rw-r--r-- | compiler/ccgtypes.nim | 4 | ||||
-rw-r--r-- | tests/destructor/tgcdestructors.nim | 11 |
3 files changed, 16 insertions, 10 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 5cf6df847..d459f6cbf 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2614,20 +2614,15 @@ proc genConstSeqV2(p: BProc, n: PNode, t: PType): Rope = data.add genConstExpr(p, n.sons[i]) data.add("}") - result = getTempName(p.module) let payload = getTempName(p.module) let base = t.skipTypes(abstractInst).sons[0] appcg(p.module, cfsData, "static const struct {$n" & " NI cap; void* allocator; $1 data[$2];$n" & - "} $3 = {$2, NIM_NIL, $4};$n" & - "static NIM_CONST struct {$n" & - " NI len;$n" & - " $6 p;$n" & - "} $5 = {$2, ($6)&$3};$n", [ - getTypeDesc(p.module, base), rope(len(n)), payload, data, - result, getTypeDesc(p.module, t)]) + "} $3 = {$2, NIM_NIL, $4};$n", [ + getTypeDesc(p.module, base), rope(len(n)), payload, data]) + result = "{$1, ($2*)&$3}" % [rope(len(n)), getSeqPayloadType(p.module, t), payload] proc genConstExpr(p: BProc, n: PNode): Rope = case n.kind diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index c557123ac..37d0827de 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -279,6 +279,7 @@ proc getSimpleTypeDesc(m: BModule, typ: PType): Rope = of tyString: case detectStrVersion(m) of 2: + discard cgsym(m, "NimStrPayload") discard cgsym(m, "NimStringV2") result = typeNameOrLiteral(m, typ, "NimStringV2") else: @@ -545,7 +546,8 @@ proc getRecordDesc(m: BModule, typ: PType, name: Rope, let popExSym = magicsys.getCompilerProc(m.g.graph, "popCurrentExceptionEx") if lfDynamicLib in popExSym.loc.flags and sfImportc in popExSym.flags: # echo popExSym.flags, " ma flags ", popExSym.loc.flags - result = "extern " & getTypeDescAux(m, popExSym.typ, check) & " " & mangleName(m, popExSym) & ";\L" & result + result = "extern " & getTypeDescAux(m, popExSym.typ, check) & " " & + mangleName(m, popExSym) & ";\L" & result else: result = genProcHeader(m, popExSym) & ";\L" & result hasField = true diff --git a/tests/destructor/tgcdestructors.nim b/tests/destructor/tgcdestructors.nim index 60d7fc14f..1ae2b2549 100644 --- a/tests/destructor/tgcdestructors.nim +++ b/tests/destructor/tgcdestructors.nim @@ -1,6 +1,9 @@ discard """ cmd: '''nim c --gc:destructors $file''' - output: '''1 1''' + output: '''hi +ho +ha +1 1''' """ import allocators @@ -12,6 +15,12 @@ proc main = main() +const + test = @["hi", "ho", "ha"] + +for t in test: + echo t + #echo s let (a, d) = allocCounters() cprintf("%ld %ld\n", a, d) |