aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/c_type.h
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2026-03-23 09:14:39 +0100
committerlemon <lsof@mailbox.org>2026-03-23 09:14:39 +0100
commit75c4a35e1884e64b6141df64a7df6293d38445b5 (patch)
treeea24a9ef610e7b30351d06c3e6e2fe6d0c8e5b43 /src/c_type.h
parent7c5dd45eca377a3b675b6f0d4a9331bc3f971ac9 (diff)
c: remove inline 'backing' type tag for enums
It was meant as a micro-optimization but actually keeping it in sync was annoying. This for example was broken: ``` extern enum foo { ... } g_foo; enum foo g_foo; ```
Diffstat (limited to 'src/c_type.h')
-rw-r--r--src/c_type.h10
1 files changed, 3 insertions, 7 deletions
diff --git a/src/c_type.h b/src/c_type.h
index ecca949..6f9a265 100644
--- a/src/c_type.h
+++ b/src/c_type.h
@@ -30,10 +30,7 @@ enum typeflagmask {
typedef union Type {
struct {
uchar t; /* type tag */
- union {
- uchar flag;
- uchar backing; /* type tag for enum backing int */
- };
+ uchar flag;
union {
struct {
uchar child; /* prim type tag */
@@ -141,11 +138,10 @@ Type cvtarith(Type a, Type b);
static inline Type
typechild(Type t)
{
- if (t.t == TYENUM) return mktype(t.backing ? t.backing : typedata[t.dat].backing);
+ if (t.t == TYENUM) return mktype(typedata[t.dat].backing);
if (t.flag & TFCHLDPRIM) return mktype(t.child);
if (t.flag & TFCHLDISDAT) {
Type chld = mktype(typedata[t.dat].t, .dat = t.dat);
- if (chld.t == TYENUM) chld.backing = typedata[t.dat].backing;
return chld;
}
return typedata[t.dat].child;
@@ -153,7 +149,7 @@ typechild(Type t)
static inline enum typetag
scalartypet(Type t)
{
- if (t.t == TYENUM) return t.backing ? t.backing : typedata[t.dat].backing;
+ if (t.t == TYENUM) return typedata[t.dat].backing;
if (isptrcvt(t)) return TYPTR;
assert(!iscomplex(t));
return t.t;