inpcom.c, use a list to store the `.func' lookup table
This commit is contained in:
parent
9093ec8fac
commit
b20c6e149c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue