scc

Simple C99 Compiler
Log | Files | Refs | README | LICENSE

commit 30a652a5b0a4e6c240fc897f2445d59947c1e789
parent 7ae2f8e3d575dd2e918c3b389779415e63902d8b
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Thu,  9 Feb 2012 11:24:13 +0100

Added fields for basic types

These new fields in the type structure allow know the properties of the basic
type without doing complex comparision

Diffstat:
types.c | 24++++++++++++++++--------
types.h | 8++++++--
2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/types.c b/types.c @@ -2,18 +2,26 @@ #include <assert.h> #include <stdlib.h> +#include "tokens.h" #include "types.h" -#define xcalloc calloc -struct type tschar, tuchar; /* signed char, unsigned char */ -struct type tshort, tushort; /* short, unsigned short */ -struct type tint, tuint; /* int, unsigned int */ -struct type tfloat, tdouble, tldouble; /* float, double, long double */ -struct type tlong, tulong; /* long, unsgined long */ -struct type tllong, tullong; /* long long, unsigned long long */ -struct type tvoid; /* void */ +#define xcalloc calloc +struct type tschar = {.btype = CHAR, .sign = 1}; +struct type tuchar = {.btype = CHAR, .sign = 0}; +struct type tshort = {.btype = SHORT, .sign = 1}; +struct type tushort = {.btype = SHORT, .sign = 0}; +struct type tint = {.btype = INT, .sign = 1}; +struct type tuint = {.btype = SHORT, .sign = 0}; +struct type tfloat = {.btype = FLOAT, .sign = 1}; +struct type tdouble = {.btype = DOUBLE, .sign = 1}; +struct type tldouble = {.btype = LDOUBLE, .sign = 1}; +struct type tlong = {.btype = LONG, .sign = 1}; +struct type tulong = {.btype = LONG, .sign = 0}; +struct type tllong = {.btype = LLONG, .sign = 1}; +struct type tullong = {.btype = LLONG, .sign = 0}; +struct type tvoid = {.btype = VOID, .sign = 0}; struct type *mktype(register struct type *base, unsigned char op) { diff --git a/types.h b/types.h @@ -9,8 +9,12 @@ struct type { struct type *ptr; /* pointer */ struct type *ftn; /* function */ union { - size_t nelem; - } u; + struct { + unsigned btype : 4; + unsigned sign : 1; + }; + size_t nelem; /* size of array */ + }; };