diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2023-07-06 06:38:25 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2023-07-06 06:54:23 +0200 |
commit | be9a3e693e019ab4797ea093bedde3ca39398e6e (patch) | |
tree | 86f93a5271d936cbecab25e7f031216663902bb9 /tools/lxdrgen.awk | |
parent | 53197b51e5edbb1b195070523dbfd8d9ba05d847 (diff) | |
download | liberty-be9a3e693e019ab4797ea093bedde3ca39398e6e.tar.gz liberty-be9a3e693e019ab4797ea093bedde3ca39398e6e.tar.xz liberty-be9a3e693e019ab4797ea093bedde3ca39398e6e.zip |
lxdrgen-swift: fix warnings with exhaustive unions
Diffstat (limited to 'tools/lxdrgen.awk')
-rw-r--r-- | tools/lxdrgen.awk | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/tools/lxdrgen.awk b/tools/lxdrgen.awk index f77f19f..e5259b7 100644 --- a/tools/lxdrgen.awk +++ b/tools/lxdrgen.awk @@ -217,7 +217,8 @@ function defstruct( name, d, cg) { return name } -function defunion( name, tag, tagtype, tagvalue, cg, scg, d, a, i, unseen) { +function defunion( name, tag, tagtype, tagvalue, cg, scg, d, a, i, + unseen, exhaustive) { delete cg[0] delete scg[0] delete d[0] @@ -258,9 +259,14 @@ function defunion( name, tag, tagtype, tagvalue, cg, scg, d, a, i, unseen) { if (tagvalue) codegen_union_struct(name, tagvalue, cg, scg) - # What remains non-zero in unseen[2..] is simply not recognized/allowed. + # Unseen cases are simply not recognized/allowed. + exhaustive = 1 + for (i in unseen) + if (i && unseen[i]) + exhaustive = 0 + Types[name] = "union" - codegen_union(name, cg) + codegen_union(name, cg, exhaustive) return name } |