mirror of
https://github.com/mirror/make.git
synced 2025-01-06 10:21:00 +08:00
Formerly variable.c.~9~
This commit is contained in:
parent
8aff0091fc
commit
b95e47d401
77
variable.c
77
variable.c
@ -558,7 +558,8 @@ try_variable_definition (line, origin)
|
|||||||
p = next_token (p);
|
p = next_token (p);
|
||||||
|
|
||||||
return define_variable (beg, end - beg,
|
return define_variable (beg, end - beg,
|
||||||
recursive ? p : variable_expand (p),
|
/* !!! compile frob */
|
||||||
|
(recursive && !compiling) ? p : variable_expand (p),
|
||||||
origin, recursive);
|
origin, recursive);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -695,3 +696,77 @@ print_file_variables (file)
|
|||||||
if (file->variables != 0)
|
if (file->variables != 0)
|
||||||
print_variable_set (file->variables->set, "# ");
|
print_variable_set (file->variables->set, "# ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* !!!! compile frobbing: frobbed try_variable_definition. */
|
||||||
|
|
||||||
|
void
|
||||||
|
enter_variable (struct variable *variable)
|
||||||
|
{
|
||||||
|
struct variable_set *set = &global_variable_set;
|
||||||
|
register unsigned int hashval;
|
||||||
|
register char *p;
|
||||||
|
register struct variable *v;
|
||||||
|
|
||||||
|
hashval = 0;
|
||||||
|
for (p = variable->name; *p != '\0'; ++p)
|
||||||
|
HASH (hashval, *p);
|
||||||
|
hashval %= set->buckets;
|
||||||
|
|
||||||
|
for (v = set->table[hashval]; v != 0; v = v->next)
|
||||||
|
if (streq (v->name, variable->name))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (v == 0)
|
||||||
|
{
|
||||||
|
variable->next = set->table[hashval];
|
||||||
|
set->table[hashval] = variable;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (env_overrides && v->origin == o_env)
|
||||||
|
/* V came from in the environment. Since it was defined
|
||||||
|
before the switches were parsed, it wasn't affected by -e. */
|
||||||
|
v->origin = o_env_override;
|
||||||
|
|
||||||
|
/* A variable of this name is already defined.
|
||||||
|
If the old definition is from a stronger source
|
||||||
|
than this one, don't redefine it. */
|
||||||
|
if ((int) variable->origin >= (int) v->origin)
|
||||||
|
{
|
||||||
|
v->value = variable->value;
|
||||||
|
v->origin = variable->origin;
|
||||||
|
v->recursive = variable->recursive;
|
||||||
|
if (v->export == v_default || variable->export != v_default)
|
||||||
|
v->export = variable->export;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct variable *
|
||||||
|
variable_global_linear_list ()
|
||||||
|
{
|
||||||
|
struct variable_set *set = &global_variable_set;
|
||||||
|
register unsigned int bucket;
|
||||||
|
register struct variable *v, *nextv;
|
||||||
|
struct variable *chain = NULL;
|
||||||
|
|
||||||
|
for (bucket = 0; bucket < set->buckets; ++bucket)
|
||||||
|
for (v = set->table[bucket]; v != NULL; v = nextv)
|
||||||
|
{
|
||||||
|
nextv = v->next;
|
||||||
|
switch (v->origin)
|
||||||
|
{
|
||||||
|
case o_file:
|
||||||
|
case o_command:
|
||||||
|
case o_override:
|
||||||
|
v->next = chain;
|
||||||
|
chain = v;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return chain;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user