Added generator of default names.

This commit is contained in:
Martin Mares 1998-11-27 21:07:02 +00:00
parent 906b0170a4
commit 8450be97d6
2 changed files with 20 additions and 0 deletions

View file

@ -32,6 +32,7 @@ static struct keyword *kw_hash[KW_HASH_SIZE];
static struct symbol **sym_hash; static struct symbol **sym_hash;
static int allow_new_symbols; static int allow_new_symbols;
static int cf_lino; static int cf_lino;
static int default_counter;
static int cf_hash(byte *c); static int cf_hash(byte *c);
static struct symbol *cf_find_sym(byte *c, unsigned int h0); static struct symbol *cf_find_sym(byte *c, unsigned int h0);
@ -180,12 +181,29 @@ cf_find_sym(byte *c, unsigned int h0)
return s; return s;
} }
struct symbol *
cf_default_name(char *prefix)
{
char buf[32];
struct symbol *s;
do
{
sprintf(buf, "%s%d", prefix, default_counter++);
s = cf_find_sym(buf, cf_hash(buf));
if (!s) cf_error("Unable to generate default name");
}
while (s->class != SYM_VOID);
return s;
}
void void
cf_lex_init(int flag) cf_lex_init(int flag)
{ {
if (allow_new_symbols = flag) if (allow_new_symbols = flag)
sym_hash = mp_allocz(cfg_mem, SYM_HASH_SIZE * sizeof(struct keyword *)); sym_hash = mp_allocz(cfg_mem, SYM_HASH_SIZE * sizeof(struct keyword *));
cf_lino = 1; cf_lino = 1;
default_counter = 1;
} }
void void

View file

@ -26,12 +26,14 @@ struct symbol {
}; };
#define SYM_VOID 0 #define SYM_VOID 0
#define SYM_PROTO 1
void cf_lex_init_tables(void); void cf_lex_init_tables(void);
int cf_lex(void); int cf_lex(void);
void cf_lex_init(int flag); void cf_lex_init(int flag);
void cf_error(char *msg) NORET; void cf_error(char *msg) NORET;
void cf_allocate(void); void cf_allocate(void);
struct symbol *cf_default_name(char *prefix);
/* Parser */ /* Parser */