return (double) SPEC_CVAL (val->etype).v_ulong;
}
+ if (SPEC_NOUN (val->etype) == V_VOID) {
+ return (double) SPEC_CVAL (val->etype).v_ulong;
+ }
+
// we are lost !
werror (E_INTERNAL_ERROR, __FILE__, __LINE__,
"floatFromVal: unknown value");
}
// -(unsigned 3) now really is signed
SPEC_USIGN(val->etype)=0;
+ // -(unsigned char)135 now really is an int
+ if (SPEC_NOUN(val->etype) == V_CHAR) {
+ if (SPEC_CVAL(val->etype).v_int < -128) {
+ SPEC_NOUN(val->etype) = V_INT;
+ }
+ }
return val;
}
else
SPEC_CVAL (val->etype).v_int = ~SPEC_CVAL (val->etype).v_int;
}
+ // ~(unsigned 3) now really is signed
+ SPEC_USIGN(val->etype)=0;
return val;
}
if (!ilist)
return 0;
- if (ilist->type == INIT_DEEP)
+ while (ilist->type == INIT_DEEP)
ilist = ilist->init.deep;
/* if type is a character array and there is only one
value *v = (iast->type == EX_VALUE ? iast->opval.val : NULL);
if (!v)
{
- werror (W_INIT_WRONG);
+ werror (E_CONST_EXPECTED);
return 0;
}