[hackers] [scc] Replace struct type bitfield with enum-bitflags || FRIGN
commit cdc25f13748ccf9b0de99c6c7da518f76681ea57
Author: FRIGN <dev_AT_frign.de>
AuthorDate: Wed May 18 12:15:52 2016 +0200
Commit: FRIGN <dev_AT_frign.de>
CommitDate: Wed May 18 22:44:14 2016 +0200
Replace struct type bitfield with enum-bitflags
This simplifies the code in many places. Also update tests to
reflect prior changes.
"La noche es la mejor representación de la infinitud del universo. Nos
hace creer que nada tiene principio y nada, fin."
- Carlos Fuentes
diff --git a/cc1/arch/amd64-sysv/arch.c b/cc1/arch/amd64-sysv/arch.c
index 0ccb8be..552824b 100644
--- a/cc1/arch/amd64-sysv/arch.c
+++ b/cc1/arch/amd64-sysv/arch.c
_AT_@ -17,212 +17,155 @@ static Type types[] = {
{ /* 0 = voidtype */
.op = VOID,
.letter = L_VOID,
- .printed = 1
+ .prop = TPRINTED,
},
{ /* 1 = pvoidtype */
.op = PTR,
.letter = L_POINTER,
+ .prop = TPRINTED | TDEFINED,
.size = 2,
.align = 2,
- .printed = 1,
- .defined = 1,
},
{ /* 2 = booltype */
.op = INT,
.letter = L_BOOL,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_BOOL,
- .printed = 1
},
{ /* 3 = schartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SCHAR,
- .printed = 1
},
{ /* 4 = uchartype */
.op = INT,
.letter = L_UINT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UCHAR,
- .printed = 1
},
{ /* 5 = chartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_CHAR,
- .printed = 1
},
{ /* 6 = ushortype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
.n.rank = RANK_USHORT,
- .printed = 1
},
{ /* 7 = shortype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
- .sign = 1,
.n.rank = RANK_SHORT,
- .printed = 1
},
{ /* 8 = uinttype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 9 = inttype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_INT,
- .printed = 1
},
{ /* 10 = longtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
{ /* 11 = ulongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_ULONG,
- .printed = 1
},
{ /* 12 = ullongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_ULLONG,
- .printed = 1
},
{ /* 13 = llongtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LLONG,
- .printed = 1
},
{ /* 14 = floattype */
.op = FLOAT,
.letter = L_FLOAT,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 4,
- .arith = 1,
.align = 4,
.n.rank = RANK_FLOAT,
- .printed = 1
},
{ /* 15 = doubletype */
.op = FLOAT,
.letter = L_DOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 8,
- .arith = 1,
.align = 8,
.n.rank = RANK_DOUBLE,
- .printed = 1
},
{ /* 16 = ldoubletype */
.op = FLOAT,
.letter = L_LDOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 16,
- .arith = 1,
.align = 16,
.n.rank = RANK_LDOUBLE,
- .printed = 1
},
{ /* 17 = sizettype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 18 = ellipsis */
.op = ELLIPSIS,
.letter = L_ELLIPSIS,
- .defined = 1,
- .printed = 1
+ .prop = TDEFINED | TPRINTED,
},
{ /* 19 = pdifftype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
};
diff --git a/cc1/arch/i386-sysv/arch.c b/cc1/arch/i386-sysv/arch.c
index 780de06..6501f29 100644
--- a/cc1/arch/i386-sysv/arch.c
+++ b/cc1/arch/i386-sysv/arch.c
_AT_@ -17,212 +17,155 @@ static Type types[] = {
{ /* 0 = voidtype */
.op = VOID,
.letter = L_VOID,
- .printed = 1
+ .prop = TPRINTED,
},
{ /* 1 = pvoidtype */
.op = PTR,
.letter = L_POINTER,
+ .prop = TDEFINED | TPRINTED,
.size = 4,
.align = 4,
- .printed = 1,
- .defined = 1,
},
{ /* 2 = booltype */
.op = INT,
.letter = L_BOOL,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_BOOL,
- .printed = 1
},
{ /* 3 = schartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SCHAR,
- .printed = 1
},
{ /* 4 = uchartype */
.op = INT,
.letter = L_UINT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UCHAR,
- .printed = 1
},
{ /* 5 = chartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_CHAR,
- .printed = 1
},
{ /* 6 = ushortype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
.n.rank = RANK_USHORT,
- .printed = 1
},
{ /* 7 = shortype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
- .sign = 1,
.n.rank = RANK_SHORT,
- .printed = 1
},
{ /* 8 = uinttype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 9 = inttype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_INT,
- .printed = 1
},
{ /* 10 = longtype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
{ /* 11 = ulongtype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_ULONG,
- .printed = 1
},
{ /* 12 = ullongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_ULLONG,
- .printed = 1
},
{ /* 13 = llongtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_LLONG,
- .printed = 1
},
{ /* 14 = floattype */
.op = FLOAT,
.letter = L_FLOAT,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 4,
- .arith = 1,
.align = 4,
.n.rank = RANK_FLOAT,
- .printed = 1
},
{ /* 15 = doubletype */
.op = FLOAT,
.letter = L_DOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 8,
- .arith = 1,
.align = 4,
.n.rank = RANK_DOUBLE,
- .printed = 1
},
{ /* 16 = ldoubletype */
.op = FLOAT,
.letter = L_LDOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 12,
- .arith = 1,
.align = 4,
.n.rank = RANK_LDOUBLE,
- .printed = 1
},
{ /* 17 = sizettype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 18 = ellipsis */
.op = ELLIPSIS,
.letter = L_ELLIPSIS,
- .defined = 1,
- .printed = 1
+ .prop = TDEFINED | TPRINTED,
},
{ /* 19 = pdifftype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_INT,
- .printed = 1
},
};
diff --git a/cc1/arch/qbe/arch.c b/cc1/arch/qbe/arch.c
index 0ccb8be..09bbc1c 100644
--- a/cc1/arch/qbe/arch.c
+++ b/cc1/arch/qbe/arch.c
_AT_@ -17,212 +17,155 @@ static Type types[] = {
{ /* 0 = voidtype */
.op = VOID,
.letter = L_VOID,
- .printed = 1
+ .prop = TPRINTED,
},
{ /* 1 = pvoidtype */
.op = PTR,
.letter = L_POINTER,
+ .prop = TDEFINED | TPRINTED,
.size = 2,
.align = 2,
- .printed = 1,
- .defined = 1,
},
{ /* 2 = booltype */
.op = INT,
.letter = L_BOOL,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_BOOL,
- .printed = 1
},
{ /* 3 = schartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | SIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SCHAR,
- .printed = 1
},
{ /* 4 = uchartype */
.op = INT,
.letter = L_UINT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UCHAR,
- .printed = 1
},
{ /* 5 = chartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_CHAR,
- .printed = 1
},
{ /* 6 = ushortype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
.n.rank = RANK_USHORT,
- .printed = 1
},
{ /* 7 = shortype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 2,
- .sign = 1,
.n.rank = RANK_SHORT,
- .printed = 1
},
{ /* 8 = uinttype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 9 = inttype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 4,
- .sign = 1,
.n.rank = RANK_INT,
- .printed = 1
},
{ /* 10 = longtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
{ /* 11 = ulongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_ULONG,
- .printed = 1
},
{ /* 12 = ullongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_ULLONG,
- .printed = 1
},
{ /* 13 = llongtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LLONG,
- .printed = 1
},
{ /* 14 = floattype */
.op = FLOAT,
.letter = L_FLOAT,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 4,
- .arith = 1,
.align = 4,
.n.rank = RANK_FLOAT,
- .printed = 1
},
{ /* 15 = doubletype */
.op = FLOAT,
.letter = L_DOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 8,
- .arith = 1,
.align = 8,
.n.rank = RANK_DOUBLE,
- .printed = 1
},
{ /* 16 = ldoubletype */
.op = FLOAT,
.letter = L_LDOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 16,
- .arith = 1,
.align = 16,
.n.rank = RANK_LDOUBLE,
- .printed = 1
},
{ /* 17 = sizettype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 18 = ellipsis */
.op = ELLIPSIS,
.letter = L_ELLIPSIS,
- .defined = 1,
- .printed = 1
+ .prop = TDEFINED | TPRINTED,
},
{ /* 19 = pdifftype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 8,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
};
diff --git a/cc1/arch/z80/arch.c b/cc1/arch/z80/arch.c
index 7412bb0..2473717 100644
--- a/cc1/arch/z80/arch.c
+++ b/cc1/arch/z80/arch.c
_AT_@ -17,212 +17,155 @@ static Type types[] = {
{ /* 0 = voidtype */
.op = VOID,
.letter = L_VOID,
- .printed = 1
+ .prop = TPRINTED,
},
{ /* 1 = pvoidtype */
.op = PTR,
.letter = L_POINTER,
+ .prop = TDEFINED | TPRINTED,
.size = 2,
.align = 2,
- .printed = 1,
- .defined = 1,
},
{ /* 2 = booltype */
.op = INT,
.letter = L_BOOL,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_BOOL,
- .printed = 1
},
{ /* 3 = schartype */
.op = INT,
.letter = L_INT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SCHAR,
- .printed = 1
},
{ /* 4 = uchartype */
.op = INT,
.letter = L_UINT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UCHAR,
- .printed = 1
},
{ /* 5 = chartype */
.op = INT,
.letter = L_UINT8,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 1,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_CHAR,
- .printed = 1
},
{ /* 6 = ushortype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_USHORT,
- .printed = 1
},
{ /* 7 = shortype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SHORT,
- .printed = 1
},
{ /* 8 = uinttype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 9 = inttype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_INT,
- .printed = 1
},
{ /* 10 = longtype */
.op = INT,
.letter = L_INT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_LONG,
- .printed = 1
},
{ /* 11 = ulongtype */
.op = INT,
.letter = L_UINT32,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 4,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_ULONG,
- .printed = 1
},
{ /* 12 = ullongtype */
.op = INT,
.letter = L_UINT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_ULLONG,
- .printed = 1
},
{ /* 13 = llongtype */
.op = INT,
.letter = L_INT64,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 8,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_LLONG,
- .printed = 1
},
{ /* 14 = floattype */
.op = FLOAT,
.letter = L_FLOAT,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 4,
- .arith = 1,
.align = 1,
.n.rank = RANK_FLOAT,
- .printed = 1
},
{ /* 15 = doubletype */
.op = FLOAT,
.letter = L_DOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 8,
- .arith = 1,
.align = 1,
.n.rank = RANK_DOUBLE,
- .printed = 1
},
{ /* 16 = ldoubletype */
.op = FLOAT,
.letter = L_LDOUBLE,
- .defined = 1,
+ .prop = TDEFINED | TARITH | TPRINTED,
.size = 16,
- .arith = 1,
.align = 1,
.n.rank = RANK_LDOUBLE,
- .printed = 1
},
{ /* 17 = sizettype */
.op = INT,
.letter = L_UINT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
.n.rank = RANK_UINT,
- .printed = 1
},
{ /* 18 = ellipsis */
.op = ELLIPSIS,
.letter = L_ELLIPSIS,
- .defined = 1,
- .printed = 1
+ .prop = TDEFINED | TPRINTED,
},
{ /* 7 = pdifftype */
.op = INT,
.letter = L_INT16,
- .defined = 1,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED | TPRINTED,
.size = 2,
- .integer = 1,
- .arith = 1,
.align = 1,
- .sign = 1,
.n.rank = RANK_SHORT,
- .printed = 1
},
};
diff --git a/cc1/cc1.h b/cc1/cc1.h
index ac816a1..bff2d4a 100644
--- a/cc1/cc1.h
+++ b/cc1/cc1.h
_AT_@ -30,18 +30,22 @@ struct keyword {
unsigned char token, value;
};
+enum typeprops {
+ TDEFINED = 1 << 0, /* type defined */
+ TSIGNED = 1 << 1, /* signedness of the type */
+ TPRINTED = 1 << 2, /* the type was already printed */
+ TINTEGER = 1 << 3, /* the type is INT of enum */
+ TARITH = 1 << 4, /* the type is INT, ENUM or FLOAT */
+ TAGGREG = 1 << 5, /* the type is struct or union */
+ TK_R = 1 << 6, /* this is a K&R-function */
+};
+
struct type {
unsigned char op; /* type builder operator */
char ns; /* namespace for struct members */
short id; /* type id, used in dcls */
char letter; /* letter of the type */
- bool defined : 1; /* type defined */
- bool sign : 1; /* signess of the type */
- bool printed : 1; /* the type already was printed */
- bool integer : 1; /* this type is INT or enum */
- bool arith : 1; /* this type is INT, ENUM, FLOAT */
- bool aggreg : 1; /* this type is struct or union */
- bool k_r : 1; /* This is a k&r function */
+ enum typeprops prop; /* type properties */
TSIZE size; /* sizeof the type */
TSIZE align; /* align of the type */
Type *type; /* base type */
diff --git a/cc1/code.c b/cc1/code.c
index 017fb41..5859923 100644
--- a/cc1/code.c
+++ b/cc1/code.c
_AT_@ -194,7 +194,7 @@ emitconst(Node *np)
case PTR:
case INT:
case ENUM:
- u = (tp->sign) ? (TUINT) sym->u.i : sym->u.u;
+ u = (tp->prop & TSIGNED) ? (TUINT) sym->u.i : sym->u.u;
printf("#%c%llX",
np->type->letter,
(long long) sym->u.i & ones(tp->size));
_AT_@ -240,9 +240,9 @@ emittype(Type *tp)
Symbol **sp;
char *tag;
- if (tp->printed || !tp->defined)
+ if ((tp->prop & TPRINTED) || !(tp->prop & TDEFINED))
return;
- tp->printed = 1;
+ tp->prop |= TPRINTED;
switch (tp->op) {
case ARY:
diff --git a/cc1/decl.c b/cc1/decl.c
index 34738a0..ccf1342 100644
--- a/cc1/decl.c
+++ b/cc1/decl.c
_AT_@ -160,7 +160,7 @@ parameter(struct decl *dcl)
switch (tp->op) {
case VOID:
- if (n != 0 || funtp->k_r) {
+ if (n != 0 || (funtp->prop & TK_R)) {
errorp("incorrect void parameter");
return NULL;
}
_AT_@ -177,11 +177,11 @@ parameter(struct decl *dcl)
}
if (!empty(sym, tp)) {
Symbol *p = install(NS_IDEN, sym);
- if (!p && !funtp->k_r) {
+ if (!p && !(funtp->prop & TK_R)) {
errorp("redefinition of parameter '%s'", name);
return NULL;
}
- if (p && funtp->k_r) {
+ if (p && (funtp->prop & TK_R)) {
errorp("declaration for parameter ‘%s’ but no such parameter",
sym->name);
return NULL;
_AT_@ -287,7 +287,7 @@ fundcl(struct declarators *dp)
pushctx();
expect('(');
type.n.elem = 0;
- type.k_r = 0;
+ type.prop = 0;
k_r = (yytoken == ')' || yytoken == IDEN);
(*(k_r ? krfun : ansifun))(&type, types, syms, &ntypes, &nsyms);
_AT_@ -518,9 +518,9 @@ structdcl(void)
return tp;
}
- if (tp->defined)
+ if (tp->prop & TDEFINED)
error("redefinition of struct/union '%s'", sym->name);
- tp->defined = 1;
+ tp->prop |= TDEFINED;
if (nested == NR_STRUCT_LEVEL)
error("too many levels of nested structure or union definitions");
_AT_@ -551,9 +551,9 @@ enumdcl(void)
if (!accept('{'))
goto restore_name;
- if (tp->defined)
+ if (tp->prop & TDEFINED)
errorp("redefinition of enumeration '%s'", tagsym->name);
- tp->defined = 1;
+ tp->prop |= TDEFINED;
namespace = NS_IDEN;
/* TODO: check incorrect values in val */
_AT_@ -626,7 +626,7 @@ field(struct decl *dcl)
errorp("storage class in struct/union field");
err = 1;
}
- if (!tp->defined) {
+ if (!(tp->prop & TDEFINED)) {
error("field '%s' has incomplete type", name);
err = 1;
}
_AT_@ -729,7 +729,7 @@ identifier(struct decl *dcl)
return sym;
/* TODO: Add warning about ANSI limits */
- if (!tp->defined &&
+ if (!(tp->prop & TDEFINED) &&
sclass != EXTERN && sclass != TYPEDEF &&
!(tp->op == ARY && yytoken == '=')) {
errorp("declared variable '%s' of incomplete type", name);
_AT_@ -860,7 +860,7 @@ decl(void)
curfun = ocurfun;
return;
}
- if (sym->type->k_r) {
+ if (sym->type->prop & TK_R) {
while (yytoken != '{') {
par = dodcl(1, parameter, NS_IDEN, sym->type);
expect(';');
diff --git a/cc1/expr.c b/cc1/expr.c
index 99aed67..85902b8 100644
--- a/cc1/expr.c
+++ b/cc1/expr.c
_AT_@ -28,7 +28,7 @@ cmpnode(Node *np, TUINT val)
case PTR:
case INT:
mask = (val > 1) ? ones(np->type->size) : -1;
- nodeval = (tp->sign) ? sym->u.i : sym->u.u;
+ nodeval = (tp->prop & TSIGNED) ? sym->u.i : sym->u.u;
return (nodeval & mask) == (val & mask);
case FLOAT:
return sym->u.f == val;
_AT_@ -100,8 +100,13 @@ arithconv(Node **p1, Node **p2)
if (tp1 == tp2)
goto set_p1_p2;
- s1 = tp1->sign, r1 = tp1->n.rank, lp1 = getlimits(tp1);
- s2 = tp2->sign, r2 = tp2->n.rank, lp2 = getlimits(tp2);
+ s1 = (tp1->prop & TSIGNED) != 0;
+ r1 = tp1->n.rank;
+ lp1 = getlimits(tp1);
+
+ s2 = (tp2->prop & TSIGNED) != 0;
+ r2 = tp2->n.rank;
+ lp2 = getlimits(tp2);
if (s1 == s2 || tp1->op == FLOAT || tp2->op == FLOAT) {
to = r1 - r2;
_AT_@ -149,15 +154,15 @@ chkternary(Node *yes, Node *no)
*/
if (!eqtype(yes->type, no->type)) {
- if (yes->type->arith && no->type->arith) {
+ if ((yes->type->prop & TARITH) && (no->type->prop & TARITH)) {
arithconv(&yes, &no);
} else if (yes->type->op != PTR && no->type->op != PTR) {
goto wrong_type;
} else {
/* convert integer 0 to NULL */
- if (yes->type->integer && cmpnode(yes, 0))
+ if ((yes->type->prop & TINTEGER) && cmpnode(yes, 0))
yes = convert(yes, pvoidtype, 0);
- if (no->type->integer && cmpnode(no, 0))
+ if ((no->type->prop & TINTEGER) && cmpnode(no, 0))
no = convert(no, pvoidtype, 0);
/*
* At this point the type of both should be
_AT_@ -225,7 +230,7 @@ decay(Node *np)
static Node *
integerop(char op, Node *lp, Node *rp)
{
- if (!lp->type->integer || !rp->type->integer)
+ if (!(lp->type->prop & TINTEGER) || !(rp->type->prop & TINTEGER))
error("operator requires integer operands");
arithconv(&lp, &rp);
return simplify(op, lp->type, lp, rp);
_AT_@ -234,7 +239,7 @@ integerop(char op, Node *lp, Node *rp)
static Node *
integeruop(char op, Node *np)
{
- if (!np->type->integer)
+ if (!(np->type->prop & TINTEGER))
error("unary operator requires integer operand");
np = promote(np);
if (op == OCPL && np->op == OCPL)
_AT_@ -245,7 +250,7 @@ integeruop(char op, Node *np)
static Node *
numericaluop(char op, Node *np)
{
- if (!np->type->arith)
+ if (!(np->type->prop & TARITH))
error("unary operator requires numerical operand");
np = promote(np);
if (op == ONEG && np->op == ONEG)
_AT_@ -321,7 +326,7 @@ parithmetic(char op, Node *lp, Node *rp)
lp = node(OSUB, pdifftype, lp, rp);
return node(ODIV, inttype, lp, size);
}
- if (!rp->type->integer)
+ if (!(rp->type->prop & TINTEGER))
goto incorrect;
rp = convert(promote(rp), sizettype, 0);
_AT_@ -340,7 +345,7 @@ arithmetic(char op, Node *lp, Node *rp)
{
Type *ltp = lp->type, *rtp = rp->type;
- if (ltp->arith && rtp->arith) {
+ if ((ltp->prop & TARITH) && (rtp->prop & TARITH)) {
arithconv(&lp, &rp);
} else if ((ltp->op == PTR || rtp->op == PTR) &&
(op == OADD || op == OSUB)) {
_AT_@ -357,10 +362,10 @@ pcompare(char op, Node *lp, Node *rp)
Node *np;
int err = 0;
- if (lp->type->integer)
+ if (lp->type->prop & TINTEGER)
XCHG(lp, rp, np);
- if (rp->type->integer) {
+ if (rp->type->prop & TINTEGER) {
if (!cmpnode(rp, 0))
err = 1;
rp = convert(rp, pvoidtype, 1);
_AT_@ -388,7 +393,7 @@ compare(char op, Node *lp, Node *rp)
if (ltp->op == PTR || rtp->op == PTR) {
return pcompare(op, rp, lp);
- } else if (ltp->arith && rtp->arith) {
+ } else if ((ltp->prop & TARITH) && (rtp->prop & TARITH)) {
arithconv(&lp, &rp);
return simplify(op, inttype, lp, rp);
} else {
_AT_@ -426,7 +431,7 @@ static Node *
exp2cond(Node *np, char neg)
{
np = decay(np);
- if (np->type->aggreg) {
+ if (np->type->prop & TAGGREG) {
errorp("used struct/union type value where scalar is required");
np = constnode(zero);
}
_AT_@ -457,7 +462,7 @@ field(Node *np)
unexpected();
next();
- if (!np->type->aggreg) {
+ if (!(np->type->prop & TAGGREG)) {
errorp("request for member '%s' in something not a structure or union",
yylval.sym->name);
goto free_np;
_AT_@ -504,7 +509,7 @@ array(Node *lp, Node *rp)
Type *tp;
Node *np;
- if (!lp->type->integer && !rp->type->integer)
+ if (!(lp->type->prop & TINTEGER) && !(rp->type->prop & TINTEGER))
error("array subscript is not an integer");
np = arithmetic(OADD, decay(lp), decay(rp));
tp = np->type;
_AT_@ -533,10 +538,10 @@ incdec(Node *np, char op)
chklvalue(np);
np->flags |= NEFFECT;
- if (!tp->defined) {
+ if (!(tp->prop & TDEFINED)) {
errorp("invalid use of undefined type");
return np;
- } else if (tp->arith) {
+ } else if (tp->prop & TARITH) {
inc = constnode(one);
} else if (tp->op == PTR) {
inc = sizeofnode(tp->type);
_AT_@ -573,7 +578,7 @@ static Node *
negation(char op, Node *np)
{
np = decay(np);
- if (!np->type->arith && np->type->op != PTR) {
+ if (!(np->type->prop & TARITH) && np->type->op != PTR) {
errorp("invalid argument of unary '!'");
freetree(np);
return constnode(zero);
_AT_@ -795,7 +800,7 @@ unary(void)
case SIZEOF:
next();
tp = (yytoken == '(') ? sizeexp() : typeof(unary());
- if (!tp->defined)
+ if (!(tp->prop & TDEFINED))
errorp("sizeof applied to an incomplete type");
return sizeofnode(tp);
case INC:
diff --git a/cc1/fold.c b/cc1/fold.c
index 4fb68c3..637e5ba 100644
--- a/cc1/fold.c
+++ b/cc1/fold.c
_AT_@ -335,7 +335,7 @@ fold(int op, Type *tp, Node *lp, Node *rp)
switch (type = optype->op) {
case ENUM:
case INT:
- if (!optype->sign)
+ if (!(optype->prop & TSIGNED))
type = UNSIGNED;
case PTR:
case FLOAT:
_AT_@ -549,7 +549,7 @@ castcode(Node *np, Type *newtp)
case PTR:
case INT:
case ENUM:
- u = (oldtp->sign) ? osym->u.i : osym->u.u;
+ u = (oldtp->prop & TSIGNED) ? osym->u.i : osym->u.u;
break;
case FLOAT:
oldtp = newtp;
_AT_@ -559,7 +559,7 @@ castcode(Node *np, Type *newtp)
goto noconstant;
}
mask = ones(newtp->size);
- if (newtp->sign) {
+ if (newtp->prop & TSIGNED) {
negmask = ~mask;
if (u & (negmask >> 1) & mask)
u |= negmask;
_AT_@ -570,7 +570,7 @@ castcode(Node *np, Type *newtp)
break;
case FLOAT:
/* FIXME: The cast can be from another float type */
- aux.u.f = (oldtp->sign) ? osym->u.i : osym->u.u;
+ aux.u.f = (oldtp->prop & TSIGNED) ? osym->u.i : osym->u.u;
break;
default:
goto noconstant;
diff --git a/cc1/init.c b/cc1/init.c
index 533b980..fbdfc3e 100644
--- a/cc1/init.c
+++ b/cc1/init.c
_AT_@ -39,7 +39,7 @@ arydesig(Init *ip)
next();
np = iconstexpr();
npos = np->sym->u.i;
- if (npos < 0 || tp->defined && npos >= tp->n.elem) {
+ if (npos < 0 || (tp->prop & TDEFINED) && npos >= tp->n.elem) {
errorp("array index in initializer exceeds array bounds");
npos = 0;
}
_AT_@ -55,7 +55,7 @@ fielddesig(Init *ip)
Symbol *sym, **p;
Type *tp = ip->type;
- if (!tp->aggreg)
+ if (!(tp->prop & TAGGREG))
errorp("field name not in record or union initializer");
ons = namespace;
namespace = tp->ns;
_AT_@ -119,8 +119,8 @@ initialize(Type *tp)
goto return_zero;
}
len = sym->type->n.elem-1;
- if (!tp->defined) {
- tp->defined = 1;
+ if (!(tp->prop & TDEFINED)) {
+ tp->prop |= TDEFINED;
tp->n.elem = len+1;
} else if (tp->n.elem < len) {
warn("initializer-string for array of chars is too long");
_AT_@ -221,7 +221,7 @@ initlist(Type *tp)
switch (tp->op) {
case ARY:
newtp = tp->type;
- if (!tp->defined || in.pos < tp->n.elem)
+ if (!(tp->prop & TDEFINED) || in.pos < tp->n.elem)
break;
if (!toomany)
warn("excess elements in array initializer");
_AT_@ -271,9 +271,9 @@ initlist(Type *tp)
if (braces)
expect('}');
- if (tp->op == ARY && !tp->defined) {
+ if (tp->op == ARY && !(tp->prop & TDEFINED)) {
tp->n.elem = in.max;
- tp->defined = 1;
+ tp->prop |= TDEFINED;
}
if (tp->op == ARY || tp->op == STRUCT)
in.max = tp->n.elem;
diff --git a/cc1/lex.c b/cc1/lex.c
index 4fa3664..a2f5d18 100644
--- a/cc1/lex.c
+++ b/cc1/lex.c
_AT_@ -278,7 +278,7 @@ readint(char *s, int base, int sign, Symbol *sym)
repeat:
if (u <= max/base && u*base <= max - val)
continue;
- if (tp->sign) {
+ if (tp->prop & TSIGNED) {
if (tp == inttype)
tp = (base==10) ? longtype : uinttype;
else if (tp == longtype)
_AT_@ -299,7 +299,7 @@ readint(char *s, int base, int sign, Symbol *sym)
goto repeat;
}
- if (tp->sign)
+ if (tp->prop & TSIGNED)
sym->u.i = u;
else
sym->u.u = u;
diff --git a/cc1/symbol.c b/cc1/symbol.c
index 252b526..7d25b33 100644
--- a/cc1/symbol.c
+++ b/cc1/symbol.c
_AT_@ -86,7 +86,7 @@ killsym(Symbol *sym)
if (f & SSTRING)
free(sym->u.s);
if (sym->ns == NS_TAG)
- sym->type->defined = 0;
+ sym->type->prop &= ~TDEFINED;
unlinkhash(sym);
if ((name = sym->name) != NULL && sym->ns != NS_CPP) {
if ((f & (SUSED|SGLOBAL|SDECLARED)) == SDECLARED)
diff --git a/cc1/types.c b/cc1/types.c
index 68f4bbe..52e16f2 100644
--- a/cc1/types.c
+++ b/cc1/types.c
_AT_@ -81,7 +81,7 @@ getlimits(Type *tp)
switch (tp->op) {
case ENUM:
case INT:
- ntable = tp->sign;
+ ntable = ((tp->prop & TSIGNED) != 0);
switch (tp->size) {
case 1: ntype = 0; break;
case 2: ntype = 1; break;
_AT_@ -259,13 +259,7 @@ mktype(Type *tp, int op, TINT nelem, Type *pars[])
type.type = tp;
type.op = op;
- type.defined = 0;
- type.arith = 0;
- type.sign = 0;
- type.integer = 0;
- type.printed = 0;
- type.aggreg = 0;
- type.k_r = k_r;
+ type.prop = k_r ? TK_R : 0;
type.letter = c;
type.p.pars = pars;
type.n.elem = nelem;
_AT_@ -278,17 +272,15 @@ mktype(Type *tp, int op, TINT nelem, Type *pars[])
/* PASSTROUGH */
case FTN:
case PTR:
- type.defined = 1;
+ type.prop |= TDEFINED;
break;
case ENUM:
- type.printed = 1;
- type.integer = 1;
- type.arith = 1;
+ type.prop |= TPRINTED | TINTEGER | TARITH;
type.n.rank = RANK_INT;
break;
case STRUCT:
case UNION:
- type.aggreg = 1;
+ type.prop |= TAGGREG;
break;
}
Received on Wed May 18 2016 - 22:44:32 CEST
This archive was generated by hypermail 2.3.0
: Wed May 18 2016 - 22:48:19 CEST