inpcom.c, use a list to store the `.func' lookup table

This commit is contained in:
rlar 2013-05-24 22:31:22 +02:00
parent 9093ec8fac
commit b20c6e149c
1 changed files with 20 additions and 21 deletions

View File

@ -38,7 +38,6 @@ Author: 1985 Wayne A. Christopher
/* globals -- wanted to avoid complicating inp_readall interface */
#define N_LIBRARIES 1000
#define N_SECTIONS 1000
#define N_FUNCTIONS 1000
#define N_PARAMS 1000
#define N_SUBCKT_W_PARAMS 4000
@ -56,9 +55,8 @@ struct function_env
{
struct function_env *up;
int num_functions;
struct function {
struct function *next;
char *name;
char *macro;
char *params[N_PARAMS];
@ -2765,24 +2763,24 @@ inp_fix_inst_calls_for_numparam(struct line *deck)
static struct function *
new_function(struct function_env *env)
{
if (env->num_functions >= N_FUNCTIONS) {
fprintf(stderr, "ERROR, N_FUNCTIONS overflow\n");
controlled_exit(EXIT_FAILURE);
}
struct function *f = TMALLOC(struct function, 1);
return & env->functions[env->num_functions++];
f -> next = env->functions;
env -> functions = f;
return f;
}
static struct function *
find_function(struct function_env *env, char *name)
{
int i;
struct function *f;
for (; env; env = env->up)
for (i = env->num_functions; --i >= 0; i++)
if (strcmp(env->functions[i].name, name) == 0)
return & env->functions[i];
for (f = env->functions; f; f = f->next)
if (strcmp(f->name, name) == 0)
return f;
return NULL;
}
@ -3088,10 +3086,10 @@ inp_expand_macro_in_str(struct function_env *env, char *str)
static void
inp_expand_macros_in_func(struct function_env *env)
{
int i;
struct function *f;
for (i = 0; i < env->num_functions; i++)
env->functions[i].macro = inp_expand_macro_in_str(env, env->functions[i].macro);
for (f = env->functions; f ; f = f->next)
f->macro = inp_expand_macro_in_str(env, f->macro);
}
@ -3101,8 +3099,7 @@ new_function_env(struct function_env *up)
struct function_env *env = TMALLOC(struct function_env, 1);
env -> up = up;
env -> num_functions = 0;
env -> functions = TMALLOC(struct function, N_FUNCTIONS);
env -> functions = NULL;
return env;
}
@ -3111,12 +3108,14 @@ new_function_env(struct function_env *up)
static struct function_env *
delete_function_env(struct function_env *env)
{
int i;
struct function_env *up = env -> up;
struct function *f;
for (i = 0; i < env -> num_functions; i++)
free_function(& env -> functions[i]);
for (f = env -> functions; f; ) {
struct function *here = f;
f = f -> next;
free_function(here);
}
tfree(env -> functions);
tfree(env);