Fixed up z80 port so that it works again
[fw/sdcc] / src / SDCC.y
index 2a32289536b19ed64375f9e1f3d15028a86bb98f..44b19d5ffcbef959e58258443429802acb9fe562 100644 (file)
@@ -77,7 +77,7 @@ value *cenum = NULL  ;  /* current enumeration  type chain*/
 %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 
@@ -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;
-}
-