SPEC_CVAL (val->etype).v_uint = ~SPEC_CVAL (val->etype).v_uint;
else
SPEC_CVAL (val->etype).v_int = ~SPEC_CVAL (val->etype).v_int;
+ if (SPEC_NOUN(val->etype) == V_CHAR)
+ if ( SPEC_CVAL(val->etype).v_int < -128
+ || SPEC_CVAL(val->etype).v_int > 127)
+ SPEC_NOUN(val->etype) = V_INT;
}
// ~(unsigned 3) now really is signed
SPEC_USIGN(val->etype)=0;
return NULL;
val = newValue ();
- val->etype = getSpec (val->type = copyLinkChain (dtype));
+ if (dtype)
+ val->etype = getSpec (val->type = copyLinkChain (dtype));
+ else
+ {
+ val->etype = val->type = newLink (SPECIFIER);
+ SPEC_NOUN (val->etype) = V_VOID;
+ }
SPEC_SCLS (val->etype) = S_LITERAL;
/* if it is not a specifier then we can assume that */
SPEC_CVAL (val->etype).v_float = fval;
else if (SPEC_NOUN (val->etype) == V_BIT ||
SPEC_NOUN (val->etype) == V_SBIT)
- SPEC_CVAL (val->etype).v_uint = l & 1;
+ SPEC_CVAL (val->etype).v_uint = l ? 1 : 0;
else if (SPEC_NOUN (val->etype) == V_BITFIELD)
SPEC_CVAL (val->etype).v_uint = l &
(0xffffu >> (16 - SPEC_BLEN (val->etype)));
DCL_TYPE (val->type) = EEPPOINTER;
else
DCL_TYPE (val->type) = POINTER;
- val->type->next = arrExpr->left->ftype;
+ val->type->next = arrExpr->left->ftype->next;
val->etype = getSpec (val->type);
return val;
}