make RAM big enough for tinibios
[fw/sdcc] / src / SDCC.y
index 4a7ac6cfc2e3ac0beb8062c66926002ba08a90db..adf00af5e642856e55aa64e2b5e90b53d4e38d96 100644 (file)
@@ -1015,6 +1015,7 @@ pointer
                 default:
                   // this could be just "constant" 
                   // werror(W_PTR_TYPE_INVALID);
+                    ;
                 }
             }
             else 
@@ -1146,6 +1147,12 @@ abstract_declarator2
      // $1 must be a pointer to a function
      sym_link *p=newLink();
      DCL_TYPE(p) = FUNCTION;
+     if (!$1) {
+       // ((void (code *) ()) 0) ()
+       $1=newLink();
+       DCL_TYPE($1)=CPOINTER;
+       $$ = $1;
+     }
      $1->next=p;
    }
    | abstract_declarator2 '(' parameter_type_list ')' {
@@ -1165,6 +1172,7 @@ abstract_declarator2
        $1->next=p;
      }
    }
+   ;
 
 initializer
    : assignment_expr                { $$ = newiList(INIT_NODE,$1); }
@@ -1306,6 +1314,7 @@ while : WHILE  {  /* create and push the continue , break & body labels */
                  sprintf (lbuff,"_whilebody_%d",Lblnum++);
                  $$ = newSymbol(lbuff,NestLevel);
                }
+   ;
 
 do : DO {  /* create and push the continue , break & body Labels */
            static int Lblnum = 0 ;
@@ -1320,6 +1329,8 @@ do : DO {  /* create and push the continue , break & body Labels */
           sprintf (lbuff,"_dobody_%d",Lblnum++);
           $$ = newSymbol (lbuff,NestLevel);       
         }
+   ;
+
 for : FOR { /* create & push continue, break & body labels */
             static int Lblnum = 0 ;
          
@@ -1336,6 +1347,7 @@ for : FOR { /* create & push continue, break & body labels */
            sprintf (lbuff,"_forcond_%d",Lblnum++);
            STACK_PUSH(forStack,newSymbol(lbuff,NestLevel));
           }
+   ;
 
 iteration_statement  
    : while '(' expr ')'  statement