diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 885ee34867..eed29ff4b5 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2818,10 +2818,11 @@ proc getNullValueAux(p: BProc; t: PType; obj, constOrNil: PNode, # designated initilization is the only way to init non first element of unions # branches are allowed to have no members (b.len == 0), in this case they don't need initializer if b.kind == nkRecList and b.len > 0: - result.add "._" & mangleRecFieldName(p.module, obj[0].sym) & "_" & $selectedBranch & " = {" + result.add "._i" & $selectedBranch & " = {" getNullValueAux(p, t, b, constOrNil, result, countB, isConst, info) result.add "}" elif b.kind == nkSym: + result.add "." & lastSon(obj[selectedBranch]).sym.loc.r & " = " getNullValueAux(p, t, b, constOrNil, result, countB, isConst, info) result.add "}" diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 905f8999e6..2bcaa5dc31 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -525,8 +525,7 @@ proc genRecordFieldsAux(m: BModule, n: PNode, of nkOfBranch, nkElse: let k = lastSon(n[i]) if k.kind != nkSym: - let structName = "_" & mangleRecFieldName(m, n[0].sym) & "_" & $i - let a = genRecordFieldsAux(m, k, rectype, check, unionPrefix & $structName & ".") + let a = genRecordFieldsAux(m, k, rectype, check, unionPrefix & "_i" & $i & ".") if a != nil: if tfPacked notin rectype.flags: unionBody.add("struct {") @@ -536,7 +535,7 @@ proc genRecordFieldsAux(m: BModule, n: PNode, else: unionBody.addf("#pragma pack(push, 1)$nstruct{", []) unionBody.add(a) - unionBody.addf("} $1;$n", [structName]) + unionBody.addf("} _i$1;$n", [rope($i)]) if tfPacked in rectype.flags and hasAttribute notin CC[m.config.cCompiler].props: unionBody.addf("#pragma pack(pop)$n", []) else: diff --git a/tests/destructor/tarc3.nim b/tests/destructor/tarc3.nim index 55d0ea42d7..d3b9639ad3 100644 --- a/tests/destructor/tarc3.nim +++ b/tests/destructor/tarc3.nim @@ -41,30 +41,6 @@ type of tkInt64, tkComma..tkString: ff: seq[float] else: str1*: string - Token4* = object - case kind*: TokenKind - of tkNumber: numVal*: float - of tkInt64, tkComma..tkString: ff: seq[float] - else: str1*: string - case kind2*: TokenKind - of tkNumber: - numVal2*: float - intSeqVal3*: seq[int] - of tkInt64, tkComma..tkString: - case kind3*: TokenKind - of tkNumber: numVal3*: float - of tkInt64, tkComma..tkString: - ff3: seq[float] - ff5: string - else: - str3*: string - mysrq: seq[int] - else: - case kind4*: TokenKind - of tkNumber: numVal4*: float - of tkInt64, tkComma..tkString: ff4: seq[float] - else: str4*: string - BaseLexer* = object of RootObj input*: string pos*: Natural @@ -82,7 +58,6 @@ type tok: Token tok2: Token2 tok3: Token3 - tok4: Token4 allowTrailingComma: bool allowIdentifierObjectKey: bool