some more on the const, volatile and now also static issue
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 14 Mar 2003 16:23:16 +0000 (16:23 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 14 Mar 2003 16:23:16 +0000 (16:23 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2389 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCC.y
src/SDCCsymt.c

index c8515cd0a60587787e5ddc51fa9d6a61190006b5..44e903b60673c0f5920f46e411eb5ccf1f7879d4 100644 (file)
@@ -484,11 +484,11 @@ declaration_specifiers
        sym_link *lnk = $2 ;
        while (lnk && !IS_SPEC(lnk->next))
         lnk = lnk->next;
-       lnk->next = mergeSpec($1,lnk->next, yytext);
+       lnk->next = mergeSpec($1,lnk->next, "storage_class_specifier declaration_specifiers - skipped");
        $$ = $2 ;
      }
      else
-       $$ = mergeSpec($1,$2, yytext);
+       $$ = mergeSpec($1,$2, "storage_class_specifier declaration_specifiers");
    }
    | type_specifier                                { $$ = $1; }
    | type_specifier declaration_specifiers          { 
@@ -498,11 +498,11 @@ declaration_specifiers
        sym_link *lnk = $2 ;
        while (lnk && !IS_SPEC(lnk->next))
         lnk = lnk->next;
-       lnk->next = mergeSpec($1,lnk->next, yytext);
+       lnk->next = mergeSpec($1,lnk->next, "type_specifier declaration_specifiers - skipped");
        $$ = $2 ;
      }
      else
-       $$ = mergeSpec($1,$2, yytext);
+       $$ = mergeSpec($1,$2, "type_specifier declaration_specifiers");
    }
    ;
 
@@ -603,6 +603,9 @@ type_specifier2
    | CODE      {
                   $$ = newLink (SPECIFIER) ;
                   SPEC_SCLS($$) = S_CODE ;                 
+                 if (port->mem.code_ro) {
+                   SPEC_CONST($$) = 1;
+                 }
                }
    | EEPROM      {
                   $$ = newLink (SPECIFIER) ;
@@ -1008,11 +1011,11 @@ type_specifier_list
        sym_link *lnk = $2 ;
        while (lnk && !IS_SPEC(lnk->next))
         lnk = lnk->next;
-       lnk->next = mergeSpec($1,lnk->next, "type_specifier_list");
+       lnk->next = mergeSpec($1,lnk->next, "type_specifier_list type_specifier skipped");
        $$ = $2 ;
      }
      else
-       $$ = mergeSpec($1,$2, "type_specifier_list");
+       $$ = mergeSpec($1,$2, "type_specifier_list type_specifier");
    }
    ;
 
index a2c11a2aeb0635bd50685bab88e101ae311714a7..dfec56bbd932838ee549f88e55f33f8a13fcce9d 100644 (file)
@@ -373,9 +373,7 @@ pointerTypes (sym_link * ptr, sym_link * type)
          break;
        }
       /* the storage class of type ends here */
-      SPEC_SCLS (type) =
-       SPEC_CONST (type) =
-       SPEC_VOLATILE (type) = 0;
+      SPEC_SCLS (type) = 0;
     }
 
   /* now change all the remaining unknown pointers
@@ -558,8 +556,6 @@ void checkTypeSanity(sym_link *etype, char *name) {
 sym_link *
 mergeSpec (sym_link * dest, sym_link * src, char *name)
 {
-  sym_link *symlink=dest;
-
   if (!IS_SPEC(dest) || !IS_SPEC(src)) {
 #if 0
     werror (E_INTERNAL_ERROR, __FILE__, __LINE__, "cannot merge declarator");
@@ -643,7 +639,7 @@ mergeSpec (sym_link * dest, sym_link * src, char *name)
   FUNC_INTNO(dest) |= FUNC_INTNO(src);
   FUNC_REGBANK(dest) |= FUNC_REGBANK(src);
 
-  return symlink;
+  return dest;
 }
 
 /*------------------------------------------------------------------*/