@@ -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
156154proc 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
533531proc 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