* src/SDCCast.c (funcOfType, funcOfTypeVarg, stringToSymbol,
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 26 May 2005 01:25:09 +0000 (01:25 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 26 May 2005 01:25:09 +0000 (01:25 +0000)
  createFunction),
* src/SDCC.y (external_definition, enumerator, parameter_declaration,
  compound_statement),
* src/SDCCsymt.h,
* src/SDCCsymt.c (addSymChain, processFuncArgs): fixed bug #1159134

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3771 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCC.y
src/SDCCast.c
src/SDCCsymt.c
src/SDCCsymt.h

index 5ec4b0411acc88e2f6af1f463f5c38e0be4a91c5..a7b3b35f5a6debc41a655da8b26f9b945f321b37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-05-26 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
+
+       * src/SDCCast.c (funcOfType, funcOfTypeVarg, stringToSymbol,
+         createFunction),
+       * src/SDCC.y (external_definition, enumerator, parameter_declaration,
+         compound_statement),
+       * src/SDCCsymt.h,
+       * src/SDCCsymt.c (addSymChain, processFuncArgs): fixed bug #1159134
+
 2005-05-24 Raphael Neider <rneider AT web.de>
 
        * src/pic16/glue.c (pic16_printGPointerType): fixed #1207796
index 0a4f6a8d6fff1765643f81e66215e144c56e2d5e..aa106b0dc86965a4ede976dfa90dc5324edcb859 100644 (file)
@@ -160,7 +160,7 @@ external_definition
                                        SPEC_EXTR($1->etype) = 1;
                                   }
                               }
-                               addSymChain ($1);
+                               addSymChain (&$1);
                                allocVariables ($1) ;
                               cleanUpLevel (SymbolTab,1);
                              }
@@ -983,7 +983,7 @@ enumerator
        SPEC_ENUM($1->etype) = 1;
        $$ = $1 ;
        // do this now, so we can use it for the next enums in the list
-       addSymChain($1);
+       addSymChain(&$1);
      }
    ;
 
@@ -1259,7 +1259,7 @@ parameter_declaration
                  pointerTypes($2->type,$1);
                   addDecl ($2,0,$1);             
                  for (loop=$2;loop;loop->_isparm=1,loop=loop->next);
-                 addSymChain ($2);
+                 addSymChain (&$2);
                  $$ = symbolVal($2);
                  ignoreTypedefType = 0;
                }
@@ -1439,10 +1439,10 @@ compound_statement
    : start_block end_block                    { $$ = createBlock(NULL,NULL); }
    | start_block statement_list end_block     { $$ = createBlock(NULL,$2) ;  }
    | start_block 
-          declaration_list                    { addSymChain($2); }
+          declaration_list                    { addSymChain(&$2); }
      end_block                                { $$ = createBlock($2,NULL) ;  }
    | start_block 
-          declaration_list                    {  addSymChain ($2); }
+          declaration_list                    {  addSymChain (&$2); }
           statement_list   
      end_block                                {$$ = createBlock($2,$4)   ;  }
    | error ';'                               { $$ = NULL ; }
index a00474c2868e274f29a57851b4170a6cafe414c6..17cf692e85c6e33b8c9493bc1f44dee23f3ec6ad 100644 (file)
@@ -573,7 +573,7 @@ funcOfType (char *name, sym_link * type, sym_link * argType,
     }
 
   /* save it */
-  addSymChain (sym);
+  addSymChain (&sym);
   sym->cdef = 1;
   allocVariables (sym);
   return sym;
@@ -613,7 +613,7 @@ funcOfTypeVarg (char *name, char * rtype, int nArgs , char **atypes)
     }
 
     /* save it */
-    addSymChain (sym);
+    addSymChain (&sym);
     sym->cdef = 1;
     allocVariables (sym);
     return sym;
@@ -1283,7 +1283,7 @@ stringToSymbol (value * val)
   if (noAlloc == 0)
     {
       /* allocate it */
-      addSymChain (sym);
+      addSymChain (&sym);
       allocVariables (sym);
     }
   sym->ival = NULL;
@@ -5341,7 +5341,7 @@ createFunction (symbol * name, ast * body)
     }
   else
     {
-      addSymChain (name);
+      addSymChain (&name);
       allocVariables (name);
     }
   name->lastLine = mylineno;
index dbcfd6630cdbf25ce093efed252442fc456aede3..1eff67706192a7f57ea258d767fc8a27c892d82f 100644 (file)
@@ -1005,10 +1005,11 @@ reverseLink (sym_link * type)
 /* addSymChain - adds a symbol chain to the symboltable             */
 /*------------------------------------------------------------------*/
 void 
-addSymChain (symbol * symHead)
+addSymChain (symbol ** symHead)
 {
-  symbol *sym = symHead;
+  symbol *sym = *symHead;
   symbol *csym = NULL;
+  symbol **symPtrPtr;
   int error = 0;
 
   for (; sym != NULL; sym = sym->next)
@@ -1086,6 +1087,13 @@ addSymChain (symbol * symHead)
         /* delete current entry */
         deleteSym (SymbolTab, csym, csym->name);
         deleteFromSeg(csym);
+        
+        symPtrPtr = symHead;
+        while (*symPtrPtr && *symPtrPtr != csym)
+          symPtrPtr = &(*symPtrPtr)->next;
+        if (*symPtrPtr == csym)
+          *symPtrPtr = csym->next;
+          
       }
       
       /* add new entry */
@@ -2567,7 +2575,7 @@ processFuncArgs (symbol * func)
               SPEC_STAT (func->etype);
           }
           #endif
-          addSymChain (val->sym);
+          addSymChain (&val->sym);
 
         }
       else                      /* symbol name given create synth name */
index 37ab88cffdb655f692e78221dc2bdb475bb2fdfe..dac7cbdfba39be81f41fd7b87583df8fe50bd505 100644 (file)
@@ -559,7 +559,7 @@ int checkFunction (symbol *, symbol *);
 void cleanUpLevel (bucket **, int);
 void cleanUpBlock (bucket **, int);
 int funcInChain (sym_link *);
-void addSymChain (symbol *);
+void addSymChain (symbol **);
 sym_link *structElemType (sym_link *, value *);
 symbol *getStructElement (structdef *, symbol *);
 sym_link *computeType (sym_link *, sym_link *, RESULT_TYPE, int);