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
+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
SPEC_EXTR($1->etype) = 1;
}
}
- addSymChain ($1);
+ addSymChain (&$1);
allocVariables ($1) ;
cleanUpLevel (SymbolTab,1);
}
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);
}
;
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;
}
: 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 ; }
}
/* save it */
- addSymChain (sym);
+ addSymChain (&sym);
sym->cdef = 1;
allocVariables (sym);
return sym;
}
/* save it */
- addSymChain (sym);
+ addSymChain (&sym);
sym->cdef = 1;
allocVariables (sym);
return sym;
if (noAlloc == 0)
{
/* allocate it */
- addSymChain (sym);
+ addSymChain (&sym);
allocVariables (sym);
}
sym->ival = NULL;
}
else
{
- addSymChain (name);
+ addSymChain (&name);
allocVariables (name);
}
name->lastLine = mylineno;
/* 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)
/* 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 */
SPEC_STAT (func->etype);
}
#endif
- addSymChain (val->sym);
+ addSymChain (&val->sym);
}
else /* symbol name given create synth name */
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);