summaryrefslogtreecommitdiff
path: root/symbol.c
diff options
context:
space:
mode:
Diffstat (limited to 'symbol.c')
-rw-r--r--symbol.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/symbol.c b/symbol.c
index e67f043..e10ee7a 100644
--- a/symbol.c
+++ b/symbol.c
@@ -11,10 +11,11 @@ Symtab *newsymtab(void);
void freesymtab(Symtab *);
Symbol *
-getsym(Rune *name)
+getsym(Rune *name, int fresh)
{
DfnFrame *dfn = currentdfn;
Symtab *tab;
+ int done = 0;
do{
if(dfn != nil)
tab = dfn->symtab;
@@ -26,7 +27,9 @@ getsym(Rune *name)
return tab->syms[i];
if(dfn)
dfn = dfn->prev;
- }while(dfn != nil);
+ else
+ done = 1;
+ }while(!done && !fresh);
tab->nsyms++;
tab->syms = realloc(tab->syms, sizeof(Symbol *) * tab->nsyms);