Aria

A low-level systems programming language
git clone git://git.m21c.me/Aria.git
Log | Files | Refs | LICENSE

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:
Mcompiler.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 };