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);
 	}
     }