diff --git a/src/macro.c b/src/macro.c index 41260c6e..56288401 100644 --- a/src/macro.c +++ b/src/macro.c @@ -24,9 +24,15 @@ new_uniq_sym(pic_state *pic, pic_sym base) str = (char *)pic_alloc(pic, strlen(pic_symbol_name(pic, base)) + (int)log10(s) + 3); sprintf(str, "%s@%d", pic_symbol_name(pic, base), s); - uniq = pic_intern_cstr(pic, str); - pic_free(pic, str); + /* don't put the symbol to ic->sym_tbl to keep it uninterned */ + if (pic->slen >= pic->scapa) { + pic->scapa *= 2; + pic->sym_pool = pic_realloc(pic, pic->sym_pool, sizeof(const char *) * pic->scapa); + } + uniq = pic->slen++; + pic->sym_pool[uniq] = str; + return uniq; }