From f9f0789e58be01b7169712d64af9443a35392fbf Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 25 Jan 2026 12:58:22 +0100 Subject: c: support at least parsing C99 _Complex types --- type.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'type.h') diff --git a/type.h b/type.h index 6647e70..ad8e1b1 100644 --- a/type.h +++ b/type.h @@ -11,14 +11,14 @@ enum typetag { /* ordering is important here! */ TYXXX, TYENUM, TYBOOL, TYCHAR, TYSCHAR, TYUCHAR, TYSHORT, TYUSHORT, TYINT, TYUINT, TYLONG, TYULONG, TYVLONG, TYUVLONG, - TYFLOAT, TYDOUBLE, TYLDOUBLE, + TYFLOAT, TYDOUBLE, TYLDOUBLE, TYCOMPLEXF, TYCOMPLEX, TYCOMPLEXL, TYVOID, TYPTR, TYARRAY, TYFUNC, TYSTRUCT, TYUNION, NTYPETAG, TYSIGNEDSET_ = 1<> (t) & 1) #define isunsignedt(t) ((TYUNSIGNEDSET_ | !targ_charsigned << TYCHAR) >> (t) & 1) #define isfltt(t) in_range((t), TYFLOAT, TYLDOUBLE) -#define isaritht(t) in_range((t), TYENUM, TYLDOUBLE) +#define isaritht(t) in_range((t), TYENUM, TYCOMPLEXL) #define isscalart(t) (TYSCALARSET_ >> (t) & 1) #define isptrcvtt(t) in_range((t), TYPTR, TYFUNC) #define isaggt(t) in_range((t), TYSTRUCT, TYUNION) @@ -64,6 +64,8 @@ static_assert(sizeof(union type) == 4); #define isscalar(ty) isscalart((ty).t) #define isptrcvt(ty) isptrcvtt((ty).t) #define isagg(ty) isaggt((ty).t) +#define iscomplext(t) in_range((t), TYCOMPLEXF, TYCOMPLEXL) +#define iscomplex(ty) iscomplext((ty).t) #define mktype(...) ((union type) {{ __VA_ARGS__ }}) struct enumvar { @@ -151,6 +153,7 @@ scalartypet(union type t) { if (t.t == TYENUM) return t.backing ? t.backing : typedata[t.dat].backing; if (isptrcvt(t)) return TYPTR; + assert(!iscomplex(t)); return t.t; } static inline uint -- cgit v1.2.3