commit ce5987c76383c42c0648dc3e9ed33211ff1efaed
parent 57a6e101bb5483dd7d2dabe99b284dac5d7e9113
Author: m21c <ho*******@gmail.com>
Date: Wed, 2 Feb 2022 18:32:33 +0100
re-organized type kind enums into tables
Diffstat:
| M | compiler.c | | | 172 | ++++++++++++++++++++++++++++++++++++------------------------------------------- |
1 file changed, 78 insertions(+), 94 deletions(-)
diff --git a/compiler.c b/compiler.c
@@ -195,6 +195,72 @@ struct Env Env;
+/* - type kind table - */
+
+#define TYPETAB \
+ /* tag , size , align*/ \
+ entry(TNONE , 0 , 0) \
+ entry(TERRTYPE , 0 , 0) \
+ entry(TUNDEFINED , 0 , 0) \
+ entry(TVOID , 0 , 0) \
+ entry(TBOOL , 1 , 1) \
+ entry(TINFER , 4 , 4) \
+ entry(TUINFER , 4 , 4) \
+ entry(TS8 , 1 , 1) \
+ entry(TU8 , 1 , 1) \
+ entry(TS16 , 2 , 2) \
+ entry(TU16 , 2 , 2) \
+ entry(TS32 , 4 , 4) \
+ entry(TU32 , 4 , 4) \
+ entry(TS64 , 8 , 8) \
+ entry(TU64 , 8 , 8) \
+ entry(TF32 , 4 , 4) \
+ entry(TF64 , 8 , 8) \
+ entry(TPTR , 8 , 8) \
+ entry(TARRAY , 0 , 0) \
+ entry(TTUPLE , 0 , 0) \
+ entry(TFUNCTION , 0 , 0) \
+ entry(TSTRUCT , 0 , 0) \
+ entry(TUNION , 0 , 0) \
+ /* endof TYPETAB */
+
+#define TCHAR TS8
+#define TUCHAR TU8
+#define TSHORT TS16
+#define TUSHORT TU16
+#define TINT TS32
+#define TUINT TU32
+#define TLONG TS64
+#define TULONG TU64
+#define TLLONG TS64
+#define TULLONG TU64
+
+#define TFLOAT TF32
+#define TDOUBLE TF64
+#define TLDOUBLE TF64
+
+#define TSSIZE TS64
+#define TUSIZE TU64
+/* TODO(m21c): maybe add long double type ? */
+
+#define TYPEKEWORDYTAB \
+ entry(VOID) entry(BOOL) \
+ entry(S8) entry(U8) \
+ entry(S16) entry(U16) \
+ entry(S32) entry(U32) \
+ entry(S64) entry(U64) \
+ entry(F32) entry(F64) \
+ entry(CHAR) entry(UCHAR) \
+ entry(SHORT) entry(USHORT) \
+ entry(INT) entry(UINT) \
+ entry(LONG) entry(ULONG) \
+ entry(LLONG) entry(ULLONG) \
+ entry(FLOAT) entry(DOUBLE) entry(LDOUBLE) \
+ entry(SSIZE) entry(USIZE) \
+ /* endof TYPEKEYWORDTAB */
+
+
+
/* - enumerations & constants - */
typedef
@@ -245,43 +311,14 @@ isatomnode(Kind kind)
typedef
enum TypeKind {
- TERRTYPE = 1, TUNDEFINED,
-
- TVOID, TBOOL, TINFER, TUINFER,
-
- TS8, TU8, TS16, TU16, TS32, TU32, TS64, TU64,
-
- TF32, TF64,
-
- TPTR, TARRAY,
-
- TTUPLE,
-
- TFUNCTION,
-
- TSTRUCT, TUNION,
+ #define entry(tag, size, align) \
+ tag,
+ TYPETAB
+ #undef entry
TMAX
} TypeKind;
-#define TCHAR TS8
-#define TUCHAR TU8
-#define TSHORT TS16
-#define TUSHORT TU16
-#define TINT TS32
-#define TUINT TU32
-#define TLONG TS64
-#define TULONG TU64
-#define TLLONG TS64
-#define TULLONG TU64
-
-#define TFLOAT TF32
-#define TDOUBLE TF64
-#define TLDOUBLE TF64
-
-#define TSSIZE TS64
-#define TUSIZE TU64
-/* TODO(m21c): maybe add long double type ? */
typedef
enum DeclKind {
@@ -474,72 +511,19 @@ Source testsource;
#define defaultloc {0, 1, "<builtin>"}
Type prim[] = {
- [TERRTYPE] = {TERRTYPE, defaultloc, NULL, 0, 0, {0}, NULL},
- [TUNDEFINED] = {TUNDEFINED, defaultloc, NULL, 0, 0, {0}, NULL},
-
- [TVOID] = {TVOID, defaultloc, NULL, 0, 0, {0}, NULL},
- [TBOOL] = {TBOOL, defaultloc, NULL, 1, 1, {0}, NULL},
-
- [TINFER] = {TINFER, defaultloc, NULL, 4, 4, {0}, NULL},
- [TUINFER] = {TUINFER, defaultloc, NULL, 4, 4, {0}, NULL},
-
- [TS8] = {TS8, defaultloc, NULL, 1, 1, {0}, NULL},
- [TU8] = {TU8, defaultloc, NULL, 1, 1, {0}, NULL},
- [TS16] = {TS16, defaultloc, NULL, 2, 2, {0}, NULL},
- [TU16] = {TU16, defaultloc, NULL, 2, 2, {0}, NULL},
- [TS32] = {TS32, defaultloc, NULL, 4, 4, {0}, NULL},
- [TU32] = {TU32, defaultloc, NULL, 4, 4, {0}, NULL},
- [TS64] = {TS64, defaultloc, NULL, 8, 8, {0}, NULL},
- [TU64] = {TU64, defaultloc, NULL, 8, 8, {0}, NULL},
- [TF32] = {TF32, defaultloc, NULL, 4, 4, {0}, NULL},
- [TF64] = {TF64, defaultloc, NULL, 8, 8, {0}, NULL},
-
- [TPTR] = {TPTR, defaultloc, NULL, 8, 8, {0}, NULL},
-
- [TARRAY] = {TARRAY, defaultloc, NULL, 0, 0, {0}, NULL},
- [TTUPLE] = {TTUPLE, defaultloc, NULL, 0, 0, {0}, NULL},
-
- [TFUNCTION] = {TFUNCTION, defaultloc, NULL, 0, 0, {0}, NULL},
-
- [TSTRUCT] = {TSTRUCT, defaultloc, NULL, 0, 0, {0}, NULL},
- [TUNION] = {TUNION, defaultloc, NULL, 0, 0, {0}, NULL},
+ #define entry(tag, size, align) \
+ {tag, defaultloc, NULL, size, align, {0}, NULL},
+ TYPETAB
+ #undef entry
};
int keywordlengths[OSTART - KSTART];
const int keywordtypeids[] = {
- [KVOID] = TVOID,
- [KBOOL] = TBOOL,
-
- [KU8] = TU8,
- [KS8] = TS8,
- [KU16] = TU16,
- [KS16] = TS16,
- [KU32] = TU32,
- [KS32] = TS32,
- [KU64] = TU64,
- [KS64] = TS64,
-
- [KF32] = TF32,
- [KF64] = TF64,
-
- [KUCHAR] = TUCHAR,
- [KCHAR] = TCHAR,
- [KUSHORT] = TUSHORT,
- [KSHORT] = TSHORT,
- [KUINT] = TUINT,
- [KINT] = TINT,
- [KULONG] = TULONG,
- [KLONG] = TLONG,
- [KULLONG] = TULLONG,
- [KLLONG] = TLLONG,
-
- [KFLOAT] = TFLOAT,
- [KDOUBLE] = TDOUBLE,
- [KLDOUBLE] = TLDOUBLE,
-
- [KUSIZE] = TUSIZE,
- [KSSIZE] = TSSIZE,
+ #define entry(tag) \
+ [K##tag] = T##tag,
+ TYPEKEWORDYTAB
+ #undef entry
[OSTART] = 0
};