Mercurial > hg > CbC > old > device
diff mc-parse.c @ 166:9e55cc5551fb
*** empty log message ***
author | kono |
---|---|
date | Mon, 24 Nov 2003 13:09:14 +0900 |
parents | 6409ff6bc219 |
children | b1297c82e926 |
line wrap: on
line diff
--- a/mc-parse.c Mon Nov 24 10:42:03 2003 +0900 +++ b/mc-parse.c Mon Nov 24 13:09:14 2003 +0900 @@ -475,11 +475,11 @@ t = UNSIGNED; if(getsym()==INT) getsym(); else if (sym==CHAR) { getsym(); t = UCHAR; } - else if (sym==SHORT) { getsym(); t = sym; } - else if (sym==LONGLONG) {getsym(); t = sym; } + else if (sym==SHORT) { getsym(); t = USHORT; } + else if (sym==LONGLONG) {getsym(); t = ULONGLONG; } break; case SHORT: - t=INT; + t=SHORT; if(getsym()==INT) getsym(); break; case LONG: @@ -705,15 +705,21 @@ int size(int t) { - if(t==CHAR) return 1; - if(t==VOID) return 0; - if(t==REGISTER) return size_of_int; - if(t==DREGISTER) return size_of_double; - if(t==FREGISTER) return size_of_float; - if(scalar(t)) return size_of_int; - if(t==FLOAT) return size_of_float; - if(t==DOUBLE) return size_of_double; - if(t==LONGLONG) return size_of_longlong; + if (t<0) { + if(t==CHAR) return 1; + if(t==UCHAR) return 1; + if(t==VOID) return 0; + if(t==SHORT) return size_of_short; + if(t==USHORT) return size_of_short; + if(t==REGISTER) return size_of_int; + if(t==DREGISTER) return size_of_double; + if(t==FREGISTER) return size_of_float; + if(scalar(t)) return size_of_int; + if(t==FLOAT) return size_of_float; + if(t==DOUBLE) return size_of_double; + if(t==LONGLONG) return size_of_longlong; + error(DCERR); + } if(car(t)==STRUCT||car(t)==UNION) { if(cadr(t)==-1) error(DCERR); return(cadr(t)); @@ -724,6 +730,8 @@ return size_of_int; else if(car(t)==FUNCTION) return size_of_int; + else if(car(t)==POINTER) + return size_of_int; else error(DCERR); return 0; @@ -1832,9 +1840,13 @@ if(t==VOID) error(TYERR); if(t==CHAR||t==UCHAR) { - e2=int_value(e2,type); + e2=(t==UCHAR)?unsigned_value(e2,type):int_value(e2,type); if (!integral(type)) error(TYERR); type= INT;return(list3(CASS,e1,e2)); + } else if(t==SHORT||t==USHORT) { + e2=(t==USHORT)?unsigned_value(e2,type):int_value(e2,type); + if (!integral(type)) error(TYERR); + type= t;return(list3(SASS,e1,e2)); } else if(t==DOUBLE) { e2=double_value(e2,type); type= t;return(list3(DASS,e1,e2));