Mercurial > hg > CbC > old > device
changeset 546:9cdd602cc050
SFDINIT will not define local symbol
author | kono |
---|---|
date | Mon, 02 Jan 2006 17:37:15 +0900 |
parents | 2f577690bcfb |
children | 9defd9459016 |
files | Changes mc-parse.c |
diffstat | 2 files changed, 13 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/Changes Mon Jan 02 14:38:51 2006 +0900 +++ b/Changes Mon Jan 02 17:37:15 2006 +0900 @@ -7754,7 +7754,7 @@ decl_data のINTの場合にcorret_typeするとsigned/byteの情報が 失われてしまう。 -local struct init の場合に式を使うことができない。 +local struct init の場合に式を使うことができない。やっぱり、まずいか。 local struct static を切ればいいんだけど。式があったら、 代入するようにすれば良いんだが。(ま、いいか?) @@ -7770,9 +7770,10 @@ adpt_ps2/ot.c: ot_Init_node(); adpt_ps2/ot.h:inline char ot_Init_node( void ); -あぁ、ひどい。inline っていう嘘」をつくことが可能なのか。しかも、 +あぁ、ひどい。inline っていう嘘をつくことが可能なのか。しかも、 Warning さえ出ないのか。でも、動いてはいるのか。 n->sc にFUNCTIONが入るのは間違い? - +linux が通らなくなってるね。struct field のネストね。通したはずなんだが。 +
--- a/mc-parse.c Mon Jan 02 14:38:51 2006 +0900 +++ b/mc-parse.c Mon Jan 02 17:37:15 2006 +0900 @@ -694,8 +694,8 @@ error(DCERR); break; case REGISTER: - if(mode!=LDECL) - error(DCERR); + //if(mode!=LDECL) + // error(DCERR); stmode=REGISTER; getsym(0); conv->register_(); @@ -769,7 +769,7 @@ error(DCERR); return; } } - while (sym==ATTRIBUTE) { getsym(0); attributes(); } + while (sym==ATTRIBUTE||sym==ASM) { getsym(0); attributes(); } if(sym==LC || ( sym!=SM && sym!=COMMA && sym!=ASS)) { /* function body */ if (mode!=GDECL) error(DCERR); @@ -1325,7 +1325,7 @@ a[] = {,,,,}; */ -#define LOCAL_STRUCT_INIT_STATIC 1 +#define LOCAL_STRUCT_INIT_STATIC 0 static void decl_data_field(int type,NMTBL *n,int offset) @@ -1489,7 +1489,7 @@ offset = assign_data(e,t,n,offset); type=t; return offset; - } else if (t1==STRUCT) { + } else if (t1==STRUCT||t1==UNION) { if (sym==LC) lc=1; conv->lc_(); conv->decl_data_begin_(); mode = mode_save; @@ -4085,9 +4085,10 @@ sym = IDENT; gnptr=nptr=nptr0; - if (mode==ADECL && nptr0->sc ==TYPE) return sym; - if (mode==GDECL || mode==GSDECL || mode==GUDECL || - mode==GTDECL || mode==TOP || mode==GEDECL) { + switch(mode) { + case ADECL: if (nptr0->sc ==TYPE) return sym; break; + case GDECL: case GSDECL: case GUDECL: + case GTDECL: case TOP: case GEDECL: case SFDINIT: return sym; } if (nptr->sc == TYPE) return sym;