Mercurial > hg > CbC > old > device
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); |