X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCC.y;h=44b19d5ffcbef959e58258443429802acb9fe562;hb=c9e40278469aa9b26090f1c3f03422d19161b669;hp=2a32289536b19ed64375f9e1f3d15028a86bb98f;hpb=ceb51fdca1654e42f6c9c085afc976381f206644;p=fw%2Fsdcc diff --git a/src/SDCC.y b/src/SDCC.y index 2a322895..44b19d5f 100644 --- a/src/SDCC.y +++ b/src/SDCC.y @@ -77,7 +77,7 @@ value *cenum = NULL ; /* current enumeration type chain*/ %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 +%token REENTRANT USING XDATA DATA IDATA PDATA VAR_ARGS CRITICAL NONBANKED BANKED %token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT %token STRUCT UNION ENUM ELIPSIS RANGE FAR _XDATA _CODE _GENERIC _NEAR _PDATA _IDATA _EEPROM %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN @@ -168,6 +168,19 @@ using_reentrant_interrupt | NONBANKED {$$ = newLink (); $$->class = SPECIFIER ; SPEC_NONBANKED($$) = 1; + if (SPEC_BANKED($$)) { + werror(W_BANKED_WITH_NONBANKED); + } + } + | BANKED {$$ = newLink (); + $$->class = SPECIFIER ; + SPEC_BANKED($$) = 1; + if (SPEC_NONBANKED($$)) { + werror(W_BANKED_WITH_NONBANKED); + } + if (SPEC_STAT($$)) { + werror(W_BANKED_WITH_STATIC); + } } | Interrupt_storage { @@ -363,6 +376,9 @@ assignment_expr case DIV_ASSIGN: $$ = newNode('=',$1,newNode('/',copyAst($1),$3)); break; + case MOD_ASSIGN: + $$ = newNode('=',$1,newNode('%',copyAst($1),$3)); + break; case ADD_ASSIGN: $$ = newNode('=',$1,newNode('+',copyAst($1),$3)); break; @@ -1318,20 +1334,3 @@ identifier ; %% -extern unsigned char *yytext; -extern int column; -extern char *filename; -extern int fatalError; - -int yyerror(char *s) -{ - fflush(stdout); - - if ( yylineno ) - fprintf(stderr,"\n%s(%d) %s: token -> '%s' ; column %d\n", - filename,yylineno, - s,yytext,column); - fatalError++; - return 0; -} -