X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2FSDCC.y;h=3e084fcdabb4fa38fc326e721c33bab532d8faf9;hb=4db4740164fed3cb25145cfdaadb986fc0690507;hp=77182a48ce2a822077a23e66d38bf34aecf758f3;hpb=48ba82a9755eae5da6e24d1381ea3bcf72ebb9ef;p=fw%2Fsdcc diff --git a/src/SDCC.y b/src/SDCC.y index 77182a48..3e084fcd 100644 --- a/src/SDCC.y +++ b/src/SDCC.y @@ -87,8 +87,9 @@ bool uselessDecl = TRUE; %token MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN %token SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN %token XOR_ASSIGN OR_ASSIGN -%token TYPEDEF EXTERN STATIC AUTO REGISTER CODE EEPROM INTERRUPT SFR AT SBIT -%token REENTRANT USING XDATA DATA IDATA PDATA VAR_ARGS CRITICAL NONBANKED BANKED +%token TYPEDEF EXTERN STATIC AUTO REGISTER CODE EEPROM INTERRUPT SFR SFR16 SFR32 +%token AT SBIT REENTRANT USING XDATA DATA IDATA PDATA VAR_ARGS CRITICAL +%token NONBANKED BANKED SHADOWREGS WPARAM %token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT %token STRUCT UNION ENUM ELIPSIS RANGE FAR %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN @@ -98,7 +99,7 @@ bool uselessDecl = TRUE; %token BITWISEAND UNARYMINUS IPUSH IPOP PCALL ENDFUNCTION JUMPTABLE %token RRC RLC %token CAST CALL PARAM NULLOP BLOCK LABEL RECEIVE SEND ARRAYINIT -%token DUMMY_READ_VOLATILE ENDCRITICAL SWAP +%token DUMMY_READ_VOLATILE ENDCRITICAL SWAP INLINE RESTRICT %type Interrupt_storage %type identifier declarator declarator2 declarator3 enumerator_list enumerator @@ -159,7 +160,7 @@ external_definition SPEC_EXTR($1->etype) = 1; } } - addSymChain ($1); + addSymChain (&$1); allocVariables ($1) ; cleanUpLevel (SymbolTab,1); } @@ -210,6 +211,12 @@ function_attributes werror(W_BANKED_WITH_NONBANKED); } } + | SHADOWREGS {$$ = newLink (SPECIFIER); + FUNC_ISSHADOWREGS($$) = 1; + } + | WPARAM {$$ = newLink (SPECIFIER); + FUNC_ISWPARAM($$) = 1; + } | BANKED {$$ = newLink (SPECIFIER); FUNC_BANKED($$) = 1; if (FUNC_NONBANKED($$)) { @@ -401,7 +408,7 @@ conditional_expr assignment_expr : conditional_expr - | unary_expr assignment_operator assignment_expr + | cast_expr assignment_operator assignment_expr { switch ($2) { @@ -730,6 +737,29 @@ sfr_attributes } ; +sfr_attributes + : SFR16 { + $$ = newLink(SPECIFIER) ; + FUNC_REGBANK($$) = 0; + SPEC_NOUN($$) = V_INT; + SPEC_SCLS($$) = S_SFR; + SPEC_USIGN($$) = 1 ; + ignoreTypedefType = 1; + } + ; + +sfr_attributes + : SFR32 { + $$ = newLink(SPECIFIER) ; + FUNC_REGBANK($$) = 0; + SPEC_NOUN($$) = V_INT; + SPEC_SCLS($$) = S_SFR; + SPEC_LONG($$) = 1; + SPEC_USIGN($$) = 1; + ignoreTypedefType = 1; + } + ; + struct_or_union_specifier : struct_or_union opt_stag { @@ -976,7 +1006,7 @@ enumerator SPEC_ENUM($1->etype) = 1; $$ = $1 ; // do this now, so we can use it for the next enums in the list - addSymChain($1); + addSymChain(&$1); } ; @@ -1252,7 +1282,7 @@ parameter_declaration pointerTypes($2->type,$1); addDecl ($2,0,$1); for (loop=$2;loop;loop->_isparm=1,loop=loop->next); - addSymChain ($2); + addSymChain (&$2); $$ = symbolVal($2); ignoreTypedefType = 0; } @@ -1432,10 +1462,10 @@ compound_statement : start_block end_block { $$ = createBlock(NULL,NULL); } | start_block statement_list end_block { $$ = createBlock(NULL,$2) ; } | start_block - declaration_list { addSymChain($2); } + declaration_list { addSymChain(&$2); } end_block { $$ = createBlock($2,NULL) ; } | start_block - declaration_list { addSymChain ($2); } + declaration_list { addSymChain (&$2); } statement_list end_block {$$ = createBlock($2,$4) ; } | error ';' { $$ = NULL ; }