Skip to content

Commit 00b52ba

Browse files
committed
ccgtypes: update type translation
1 parent fcd16ab commit 00b52ba

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

compiler/backend/ccgtypes.nim

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,6 @@ proc mapType(types: TypeEnv; desc: TypeHeader): TCTypeKind =
150150
of tkSeq: ctNimSeq
151151
of tkString: ctNimStr
152152
of tkClosure: ctStruct
153-
else:
154-
unreachable(desc.kind)
155153

156154
proc mapType(types: TypeEnv, typ: TypeId): TCTypeKind =
157155
mapType(types, types.headerFor(typ, Original))
@@ -527,8 +525,8 @@ proc genFieldDesc(m: BModule, id: FieldId, field: StructField, pos: int,
527525
field.isNoAlias)
528526
result.add ";\n"
529527

530-
proc getTaggedUnionDesc(m: BModule, desc: TypeHeader, result: var Rope,
531-
accessor: string)
528+
proc getTaggedUnionDesc(m: BModule, desc: TypeHeader, discr: StructField,
529+
result: var Rope, accessor: string)
532530

533531
proc genStructDesc(m: BModule, desc: TypeHeader, result: var Rope,
534532
accessor: string) =
@@ -541,24 +539,20 @@ proc genStructDesc(m: BModule, desc: TypeHeader, result: var Rope,
541539

542540
var pos = 0
543541
for (id, it) in m.types.fields(desc):
544-
if m.types.isEmbedded(it.typ):
542+
if it.isTagged:
545543
# embedded tagged union
546-
getTaggedUnionDesc(m, m.types.headerFor(it.typ, Lowered), result,
547-
accessor)
544+
getTaggedUnionDesc(m, m.types.headerFor(it.typ, Lowered),
545+
m.types[m.types.lookupTag(desc, id)],
546+
result, accessor)
548547
else:
549548
genFieldDesc(m, id, it, pos, result, accessor)
550549
inc pos
551550

552551
result.add "}"
553552

554-
proc getTaggedUnionDesc(m: BModule, desc: TypeHeader, result: var Rope,
555-
accessor: string) =
553+
proc getTaggedUnionDesc(m: BModule, desc: TypeHeader, discr: StructField,
554+
result: var Rope, accessor: string) =
556555
# the discriminator is directly embedded into the surrounding struct
557-
let
558-
id = desc.discr(m.types)
559-
discr = m.types[id]
560-
genFieldDesc(m, id, discr, 0, result, accessor)
561-
562556
let
563557
name = m.types.name(discr)
564558
# all ``struct`` union fields use the mangled discriminator field name
@@ -571,8 +565,8 @@ proc getTaggedUnionDesc(m: BModule, desc: TypeHeader, result: var Rope,
571565

572566
result.add "union {\n"
573567
var i = 1
574-
for (id, it) in m.types.fields(desc, 1):
575-
if m.types.isEmbedded(it.typ):
568+
for (id, it) in m.types.fields(desc):
569+
if it.isEmbedded:
576570
# embedded struct description. The accessor combined with the union
577571
# field name is passed along
578572
genStructDesc(m, m.types.headerFor(it.typ, Lowered), result,
@@ -614,9 +608,11 @@ proc genStructDesc(m: BModule, desc: TypeHeader, name: Rope, result: var Rope) =
614608

615609
var pos = 0
616610
for (id, it) in m.g.env.types.fields(desc):
617-
if m.types.isEmbedded(it.typ):
611+
if it.isTagged:
618612
# embedded tagged union
619-
getTaggedUnionDesc(m, m.types.headerFor(it.typ, Lowered), result, "")
613+
getTaggedUnionDesc(m, m.types.headerFor(it.typ, Lowered),
614+
m.types[m.types.lookupTag(desc, id)],
615+
result, "")
620616
else:
621617
genFieldDesc(m, id, it, pos, result, "")
622618
inc pos

0 commit comments

Comments
 (0)