Skip to content

Commit

Permalink
fixes #13195 (#13198)
Browse files Browse the repository at this point in the history
* fixes #13195

* extra fix

* fix typo
  • Loading branch information
cooldome authored and Araq committed Jan 20, 2020
1 parent 41555ca commit da1bddb
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 4 deletions.
4 changes: 2 additions & 2 deletions compiler/ccgexprs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -2818,11 +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 "._i" & $selectedBranch & " = {"
result.add "._" & mangleRecFieldName(p.module, obj[0].sym) & "_" & $selectedBranch & " = {"
getNullValueAux(p, t, b, constOrNil, result, countB, isConst, info)
result.add "}"
elif b.kind == nkSym:
result.add "." & lastSon(obj[selectedBranch]).sym.loc.r & " = "
result.add "." & mangleRecFieldName(p.module, b.sym) & " = "
getNullValueAux(p, t, b, constOrNil, result, countB, isConst, info)
result.add "}"

Expand Down
5 changes: 3 additions & 2 deletions compiler/ccgtypes.nim
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,8 @@ proc genRecordFieldsAux(m: BModule, n: PNode,
of nkOfBranch, nkElse:
let k = lastSon(n[i])
if k.kind != nkSym:
let a = genRecordFieldsAux(m, k, rectype, check, unionPrefix & "_i" & $i & ".")
let structName = "_" & mangleRecFieldName(m, n[0].sym) & "_" & $i
let a = genRecordFieldsAux(m, k, rectype, check, unionPrefix & $structName & ".")
if a != nil:
if tfPacked notin rectype.flags:
unionBody.add("struct {")
Expand All @@ -535,7 +536,7 @@ proc genRecordFieldsAux(m: BModule, n: PNode,
else:
unionBody.addf("#pragma pack(push, 1)$nstruct{", [])
unionBody.add(a)
unionBody.addf("} _i$1;$n", [rope($i)])
unionBody.addf("} $1;$n", [structName])
if tfPacked in rectype.flags and hasAttribute notin CC[m.config.cCompiler].props:
unionBody.addf("#pragma pack(pop)$n", [])
else:
Expand Down
25 changes: 25 additions & 0 deletions tests/destructor/tarc3.nim
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,30 @@ 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
Expand All @@ -58,6 +82,7 @@ type
tok: Token
tok2: Token2
tok3: Token3
tok4: Token4
allowTrailingComma: bool
allowIdentifierObjectKey: bool

Expand Down

0 comments on commit da1bddb

Please sign in to comment.