Mercurial > hg > CbC > old > device
diff mc-parse.c @ 165:6409ff6bc219 short-support-first
short
author | kono |
---|---|
date | Mon, 24 Nov 2003 10:42:03 +0900 |
parents | 1c2a9232ea93 |
children | 9e55cc5551fb |
line wrap: on
line diff
--- a/mc-parse.c Mon Nov 24 09:29:06 2003 +0900 +++ b/mc-parse.c Mon Nov 24 10:42:03 2003 +0900 @@ -1328,7 +1328,7 @@ int integral(int t) { - return(t==INT||t==CHAR||t==UNSIGNED); + return(t==INT||t==CHAR||t==UNSIGNED||t==UCHAR||t==SHORT||t==USHORT); } static void @@ -1831,7 +1831,7 @@ assign_expr(int e1,int e2,int t,int type) { if(t==VOID) error(TYERR); - if(t==CHAR) { + if(t==CHAR||t==UCHAR) { e2=int_value(e2,type); if (!integral(type)) error(TYERR); type= INT;return(list3(CASS,e1,e2)); @@ -2464,61 +2464,42 @@ static int rvalue(int e) { - int t; - if(type==CHAR) { - type= INT; + int t,op; + if(type==CHAR||type==SHORT||type==LONGLONG) { + op = (type==SHORT?SOP:type==LONGLONG?LOP:0); + if(type!=LONGLONG) type= INT; switch(car(e)) { case GVAR: - return(list2(CRGVAR,cadr(e))); + return(list2(CRGVAR+op,cadr(e))); case LVAR: - return(list2(CRLVAR,cadr(e))); + return(list2(CRLVAR+op,cadr(e))); case INDIRECT: - return(list2(CRINDIRECT,cadr(e))); - default:return(e); - } - } - if(type==UCHAR) { - type= UNSIGNED; - switch(car(e)) { - case GVAR: - return(list2(CURGVAR,cadr(e))); - case LVAR: - return(list2(CURLVAR,cadr(e))); - case INDIRECT: - return(list2(CURINDIRECT,cadr(e))); + return(list2(CRINDIRECT+op,cadr(e))); default:return(e); } } - if(type==FLOAT) { + if(type==UCHAR||type==USHORT||type==ULONGLONG) { + op = (type==USHORT?SOP:type==ULONGLONG?LOP:0); + if(type!=LONGLONG) type= UNSIGNED; switch(car(e)) { case GVAR: - return(list2(FRGVAR,cadr(e))); + return(list2(CURGVAR+op,cadr(e))); case LVAR: - return(list2(FRLVAR,cadr(e))); + return(list2(CURLVAR+op,cadr(e))); case INDIRECT: - return(list2(FRINDIRECT,cadr(e))); + return(list2(CURINDIRECT+op,cadr(e))); default:return(e); } } - if(type==DOUBLE) { + if(type==FLOAT||type==DOUBLE) { + op = type==FLOAT?FOP:type==DOUBLE?DOP:0; switch(car(e)) { case GVAR: - return(list2(DRGVAR,cadr(e))); + return(list2(RGVAR+op,cadr(e))); case LVAR: - return(list2(DRLVAR,cadr(e))); + return(list2(RLVAR+op,cadr(e))); case INDIRECT: - return(list2(DRINDIRECT,cadr(e))); - default:return(e); - } - } - if(type==LONGLONG) { - switch(car(e)) { - case GVAR: - return(list2(LRGVAR,cadr(e))); - case LVAR: - return(list2(LRLVAR,cadr(e))); - case INDIRECT: - return(list2(LRINDIRECT,cadr(e))); + return(list2(RINDIRECT+op,cadr(e))); default:return(e); } }