Added generator of default names.
This commit is contained in:
parent
906b0170a4
commit
8450be97d6
2 changed files with 20 additions and 0 deletions
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue