Rewrote '?' for constants

The condition is now cast to _Bool and it now works with return
types bigger than 32 bit.
This commit is contained in:
Daniel Glöckner 2008-11-20 11:39:28 +01:00 committed by grischka
parent 1b599ea7f8
commit deb410710c

17
tcc.c
View File

@ -7980,23 +7980,26 @@ static void expr_eq(void)
CType type, type1, type2;
if (const_wanted) {
int c1, c;
expr_lor_const();
if (tok == '?') {
CType boolean;
int c;
boolean.t = VT_BOOL;
vdup();
gen_cast(&boolean);
c = vtop->c.i;
vpop();
next();
if (tok == ':' && gnu_ext) {
c1 = c;
} else {
gexpr();
c1 = vtop->c.i;
if (tok != ':' || !gnu_ext) {
vpop();
gexpr();
}
if (!c)
vpop();
skip(':');
expr_eq();
if (c)
vtop->c.i = c1;
vpop();
}
} else {
expr_lor();