@@ -1000,9 +1000,14 @@ pub fn (mut g Gen) write_typeof_functions() {
1000
1000
tidx := g.table.find_type_idx (sym.name)
1001
1001
g.writeln ('\t switch(sidx) {' )
1002
1002
g.writeln ('\t\t case ${tidx} : return "${util.strip_main_name(sym.name)} ";' )
1003
+ mut idxs := []int {}
1003
1004
for v in sum_info.variants {
1005
+ if v in idxs {
1006
+ continue
1007
+ }
1004
1008
subtype := g.table.sym (v)
1005
1009
g.writeln ('\t\t case ${int(v)} : return "${util.strip_main_name(subtype.name)} ";' )
1010
+ idxs << v
1006
1011
}
1007
1012
g.writeln ('\t\t default: return "unknown ${util.strip_main_name(sym.name)} ";' )
1008
1013
g.writeln ('\t }' )
@@ -1021,8 +1026,13 @@ pub fn (mut g Gen) write_typeof_functions() {
1021
1026
tidx := g.table.find_type_idx (sym.name)
1022
1027
g.writeln ('\t switch(sidx) {' )
1023
1028
g.writeln ('\t\t case ${tidx} : return ${int(ityp)} ;' )
1029
+ mut idxs := []int {}
1024
1030
for v in sum_info.variants {
1031
+ if v in idxs {
1032
+ continue
1033
+ }
1025
1034
g.writeln ('\t\t case ${int(v)} : return ${int(v)} ;' )
1035
+ idxs << v
1026
1036
}
1027
1037
g.writeln ('\t\t default: return ${int(ityp)} ;' )
1028
1038
g.writeln ('\t }' )
@@ -6678,12 +6688,22 @@ fn (mut g Gen) write_types(symbols []&ast.TypeSymbol) {
6678
6688
g.typedefs.writeln ('typedef struct ${name} ${name} ;' )
6679
6689
g.type_definitions.writeln ('' )
6680
6690
g.type_definitions.writeln ('// Union sum type ${name} = ' )
6691
+ mut idxs := []int {}
6681
6692
for variant in sym.info.variants {
6693
+ if variant in idxs {
6694
+ continue
6695
+ }
6682
6696
g.type_definitions.writeln ('// | ${variant:4d} = ${g.typ(variant.idx()):-20s} ' )
6697
+ idxs << variant
6683
6698
}
6699
+ idxs.clear ()
6684
6700
g.type_definitions.writeln ('struct ${name} {' )
6685
6701
g.type_definitions.writeln ('\t union {' )
6686
6702
for variant in sym.info.variants {
6703
+ if variant in idxs {
6704
+ continue
6705
+ }
6706
+ idxs << variant
6687
6707
variant_sym := g.table.sym (variant)
6688
6708
mut var := if variant.has_flag (.option) { variant } else { variant.ref () }
6689
6709
variant_name := g.get_sumtype_variant_name (variant, variant_sym)
0 commit comments