comparison mc-parse.c @ 166:9e55cc5551fb

*** empty log message ***
author kono
date Mon, 24 Nov 2003 13:09:14 +0900
parents 6409ff6bc219
children b1297c82e926
comparison
equal deleted inserted replaced
165:6409ff6bc219 166:9e55cc5551fb
473 break; 473 break;
474 case UNSIGNED: 474 case UNSIGNED:
475 t = UNSIGNED; 475 t = UNSIGNED;
476 if(getsym()==INT) getsym(); 476 if(getsym()==INT) getsym();
477 else if (sym==CHAR) { getsym(); t = UCHAR; } 477 else if (sym==CHAR) { getsym(); t = UCHAR; }
478 else if (sym==SHORT) { getsym(); t = sym; } 478 else if (sym==SHORT) { getsym(); t = USHORT; }
479 else if (sym==LONGLONG) {getsym(); t = sym; } 479 else if (sym==LONGLONG) {getsym(); t = ULONGLONG; }
480 break; 480 break;
481 case SHORT: 481 case SHORT:
482 t=INT; 482 t=SHORT;
483 if(getsym()==INT) getsym(); 483 if(getsym()==INT) getsym();
484 break; 484 break;
485 case LONG: 485 case LONG:
486 t=INT; 486 t=INT;
487 getsym(); 487 getsym();
703 } 703 }
704 704
705 int 705 int
706 size(int t) 706 size(int t)
707 { 707 {
708 if(t==CHAR) return 1; 708 if (t<0) {
709 if(t==VOID) return 0; 709 if(t==CHAR) return 1;
710 if(t==REGISTER) return size_of_int; 710 if(t==UCHAR) return 1;
711 if(t==DREGISTER) return size_of_double; 711 if(t==VOID) return 0;
712 if(t==FREGISTER) return size_of_float; 712 if(t==SHORT) return size_of_short;
713 if(scalar(t)) return size_of_int; 713 if(t==USHORT) return size_of_short;
714 if(t==FLOAT) return size_of_float; 714 if(t==REGISTER) return size_of_int;
715 if(t==DOUBLE) return size_of_double; 715 if(t==DREGISTER) return size_of_double;
716 if(t==LONGLONG) return size_of_longlong; 716 if(t==FREGISTER) return size_of_float;
717 if(scalar(t)) return size_of_int;
718 if(t==FLOAT) return size_of_float;
719 if(t==DOUBLE) return size_of_double;
720 if(t==LONGLONG) return size_of_longlong;
721 error(DCERR);
722 }
717 if(car(t)==STRUCT||car(t)==UNION) { 723 if(car(t)==STRUCT||car(t)==UNION) {
718 if(cadr(t)==-1) error(DCERR); 724 if(cadr(t)==-1) error(DCERR);
719 return(cadr(t)); 725 return(cadr(t));
720 } 726 }
721 if(car(t)==ARRAY) 727 if(car(t)==ARRAY)
722 return(size(cadr(t))*caddr(t)); 728 return(size(cadr(t))*caddr(t));
723 else if(car(t)==CODE) 729 else if(car(t)==CODE)
724 return size_of_int; 730 return size_of_int;
725 else if(car(t)==FUNCTION) 731 else if(car(t)==FUNCTION)
732 return size_of_int;
733 else if(car(t)==POINTER)
726 return size_of_int; 734 return size_of_int;
727 else 735 else
728 error(DCERR); 736 error(DCERR);
729 return 0; 737 return 0;
730 } 738 }
1830 int 1838 int
1831 assign_expr(int e1,int e2,int t,int type) { 1839 assign_expr(int e1,int e2,int t,int type) {
1832 if(t==VOID) 1840 if(t==VOID)
1833 error(TYERR); 1841 error(TYERR);
1834 if(t==CHAR||t==UCHAR) { 1842 if(t==CHAR||t==UCHAR) {
1835 e2=int_value(e2,type); 1843 e2=(t==UCHAR)?unsigned_value(e2,type):int_value(e2,type);
1836 if (!integral(type)) error(TYERR); 1844 if (!integral(type)) error(TYERR);
1837 type= INT;return(list3(CASS,e1,e2)); 1845 type= INT;return(list3(CASS,e1,e2));
1846 } else if(t==SHORT||t==USHORT) {
1847 e2=(t==USHORT)?unsigned_value(e2,type):int_value(e2,type);
1848 if (!integral(type)) error(TYERR);
1849 type= t;return(list3(SASS,e1,e2));
1838 } else if(t==DOUBLE) { 1850 } else if(t==DOUBLE) {
1839 e2=double_value(e2,type); 1851 e2=double_value(e2,type);
1840 type= t;return(list3(DASS,e1,e2)); 1852 type= t;return(list3(DASS,e1,e2));
1841 } else if(t==FLOAT) { 1853 } else if(t==FLOAT) {
1842 e2=float_value(e2,type); 1854 e2=float_value(e2,type);