%token <yyint> SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
%token <yyint> 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
| 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
{
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;
;
%%
-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;
-}
-