X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCC.y;h=a5a0f32994af2952e10d8afc223b5baf109d6383;hb=a5cb802aeb90f8a7ed4b754945ffa0a44c852016;hp=17dacb5dcf983d4f9dcac95417b504b1497d0c16;hpb=71dcb0a63246246d95e0752e6d468ec3a7c31074;p=fw%2Fsdcc diff --git a/src/SDCC.y b/src/SDCC.y index 17dacb5d..a5a0f329 100644 --- a/src/SDCC.y +++ b/src/SDCC.y @@ -95,7 +95,7 @@ bool uselessDecl = TRUE; %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN %token NAKED JAVANATIVE OVERLAY %token INLINEASM -%token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT +%token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT GETABIT GETBYTE GETWORD %token BITWISEAND UNARYMINUS IPUSH IPOP PCALL ENDFUNCTION JUMPTABLE %token RRC RLC %token CAST CALL PARAM NULLOP BLOCK LABEL RECEIVE SEND ARRAYINIT @@ -597,64 +597,64 @@ type_specifier /* add this to the storage class specifier */ SPEC_ABSA($1) = 1; /* set the absolute addr flag */ /* now get the abs addr from value */ - SPEC_ADDR($1) = (int) floatFromVal(constExprValue($3,TRUE)) ; + SPEC_ADDR($1) = (unsigned) floatFromVal(constExprValue($3,TRUE)) ; } ; type_specifier2 - : CHAR { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_CHAR ; - ignoreTypedefType = 1; - } - | SHORT { - $$=newLink(SPECIFIER); - $$->select.s._short = 1 ; - ignoreTypedefType = 1; - } - | INT { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_INT ; - ignoreTypedefType = 1; - } - | LONG { - $$=newLink(SPECIFIER); - SPEC_LONG($$) = 1 ; - ignoreTypedefType = 1; - } - | SIGNED { - $$=newLink(SPECIFIER); - $$->select.s._signed = 1; - ignoreTypedefType = 1; - } + : CHAR { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_CHAR ; + ignoreTypedefType = 1; + } + | SHORT { + $$=newLink(SPECIFIER); + SPEC_SHORT($$) = 1 ; + ignoreTypedefType = 1; + } + | INT { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_INT ; + ignoreTypedefType = 1; + } + | LONG { + $$=newLink(SPECIFIER); + SPEC_LONG($$) = 1 ; + ignoreTypedefType = 1; + } + | SIGNED { + $$=newLink(SPECIFIER); + $$->select.s.b_signed = 1; + ignoreTypedefType = 1; + } | UNSIGNED { - $$=newLink(SPECIFIER); - SPEC_USIGN($$) = 1 ; - ignoreTypedefType = 1; - } - | VOID { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_VOID ; - ignoreTypedefType = 1; - } - | CONST { - $$=newLink(SPECIFIER); - SPEC_CONST($$) = 1; - } + $$=newLink(SPECIFIER); + SPEC_USIGN($$) = 1 ; + ignoreTypedefType = 1; + } + | VOID { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_VOID ; + ignoreTypedefType = 1; + } + | CONST { + $$=newLink(SPECIFIER); + SPEC_CONST($$) = 1; + } | VOLATILE { - $$=newLink(SPECIFIER); - SPEC_VOLATILE($$) = 1 ; - } - | FLOAT { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_FLOAT; - ignoreTypedefType = 1; - } - | FIXED16X16 { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_FIXED16X16; - ignoreTypedefType = 1; - } + $$=newLink(SPECIFIER); + SPEC_VOLATILE($$) = 1 ; + } + | FLOAT { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_FLOAT; + ignoreTypedefType = 1; + } + | FIXED16X16 { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_FIXED16X16; + ignoreTypedefType = 1; + } | XDATA { $$ = newLink (SPECIFIER); SPEC_SCLS($$) = S_XDATA ; @@ -663,7 +663,7 @@ type_specifier2 $$ = newLink (SPECIFIER) ; SPEC_SCLS($$) = S_CODE ; } - | EEPROM { + | EEPROM { $$ = newLink (SPECIFIER) ; SPEC_SCLS($$) = S_EEPROM ; } @@ -679,19 +679,19 @@ type_specifier2 $$ = newLink (SPECIFIER); SPEC_SCLS($$) = S_PDATA ; } - | BIT { - $$=newLink(SPECIFIER); - SPEC_NOUN($$) = V_BIT ; - SPEC_SCLS($$) = S_BIT ; - SPEC_BLEN($$) = 1; - SPEC_BSTR($$) = 0; - ignoreTypedefType = 1; - } + | BIT { + $$=newLink(SPECIFIER); + SPEC_NOUN($$) = V_BIT ; + SPEC_SCLS($$) = S_BIT ; + SPEC_BLEN($$) = 1; + SPEC_BSTR($$) = 0; + ignoreTypedefType = 1; + } | struct_or_union_specifier { uselessDecl = FALSE; $$ = $1 ; - ignoreTypedefType = 1; + ignoreTypedefType = 1; } | enum_specifier { cenum = NULL ; @@ -705,7 +705,7 @@ type_specifier2 sym_link *p ; sym = findSym(TypedefTab,NULL,$1) ; $$ = p = copyLinkChain(sym->type); - SPEC_TYPEDEF(getSpec(p)) = 0; + SPEC_TYPEDEF(getSpec(p)) = 0; ignoreTypedefType = 1; } | sfr_reg_bit @@ -716,9 +716,9 @@ sfr_reg_bit $$ = newLink(SPECIFIER) ; SPEC_NOUN($$) = V_SBIT; SPEC_SCLS($$) = S_SBIT; - SPEC_BLEN($$) = 1; - SPEC_BSTR($$) = 0; - ignoreTypedefType = 1; + SPEC_BLEN($$) = 1; + SPEC_BSTR($$) = 0; + ignoreTypedefType = 1; } | sfr_attributes ; @@ -730,7 +730,7 @@ sfr_attributes SPEC_NOUN($$) = V_CHAR; SPEC_SCLS($$) = S_SFR ; SPEC_USIGN($$) = 1 ; - ignoreTypedefType = 1; + ignoreTypedefType = 1; } | SFR BANKED { $$ = newLink(SPECIFIER) ; @@ -738,7 +738,7 @@ sfr_attributes SPEC_NOUN($$) = V_CHAR; SPEC_SCLS($$) = S_SFR ; SPEC_USIGN($$) = 1 ; - ignoreTypedefType = 1; + ignoreTypedefType = 1; } ; @@ -1373,12 +1373,17 @@ abstract_declarator2 FUNC_HASVARARGS(p) = IS_VARG($4); FUNC_ARGS(p) = reverseVal($4); - + /* nest level was incremented to take care of the parms */ NestLevel-- ; currBlockno--; - p->next = $1; - $$ = p; + if (!$1) { + /* ((void (code *) (void)) 0) () */ + $1=newLink(DECLARATOR); + DCL_TYPE($1)=CPOINTER; + $$ = $1; + } + $1->next=p; // remove the symbol args (if any) cleanUpLevel(SymbolTab,NestLevel+1);