From: epetrich Date: Thu, 26 May 2005 01:25:09 +0000 (+0000) Subject: * src/SDCCast.c (funcOfType, funcOfTypeVarg, stringToSymbol, X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=edea3eff95b328cf2e9e45e1ff56d13cf43bf010;p=fw%2Fsdcc * 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 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3771 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index 5ec4b041..a7b3b35f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-05-26 Erik Petrich + + * 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 * src/pic16/glue.c (pic16_printGPointerType): fixed #1207796 diff --git a/src/SDCC.y b/src/SDCC.y index 0a4f6a8d..aa106b0d 100644 --- a/src/SDCC.y +++ b/src/SDCC.y @@ -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 ; } diff --git a/src/SDCCast.c b/src/SDCCast.c index a00474c2..17cf692e 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -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; diff --git a/src/SDCCsymt.c b/src/SDCCsymt.c index dbcfd663..1eff6770 100644 --- a/src/SDCCsymt.c +++ b/src/SDCCsymt.c @@ -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 */ diff --git a/src/SDCCsymt.h b/src/SDCCsymt.h index 37ab88cf..dac7cbdf 100644 --- a/src/SDCCsymt.h +++ b/src/SDCCsymt.h @@ -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);