- Add static pattern targets to the string cache.

- Use specific free_*() calls where appropriate.
This commit is contained in:
Paul Smith 2009-09-27 02:15:36 +00:00
parent 44ac2cdb4d
commit 8688ef20cf
4 changed files with 16 additions and 16 deletions

View file

@ -1,6 +1,12 @@
2009-09-26 Paul Smith <psmith@gnu.org>
* read.c (record_files): Use free_ns() to free struct nameseq.
(eval): Ditto.
* rule.c (freerule): Use free_dep_chain().
* read.c (record_files): Free FILENAMES chain for implicit rules.
(eval): Static pattern targets go into the string cache.
* function.c (string_glob): Free NAME in the nameseq chain.

3
dep.h
View file

@ -80,7 +80,8 @@ struct nameseq *ar_glob (const char *arname, const char *member_pattern, unsigne
#define dep_name(d) ((d)->name == 0 ? (d)->file->name : (d)->name)
#define alloc_dep() (xcalloc (sizeof (struct dep)))
#define free_dep(_d) free (_d)
#define free_ns(_n) free (_n)
#define free_dep(_d) free_ns (_d)
struct dep *copy_dep_chain (const struct dep *d);
void free_dep_chain (struct dep *d);

14
read.c
View file

@ -852,7 +852,7 @@ eval (struct ebuffer *ebuf, int set_default)
const char *name = files->name;
int r;
free (files);
free_ns (files);
files = next;
r = eval_makefile (name,
@ -1142,7 +1142,7 @@ eval (struct ebuffer *ebuf, int set_default)
{
struct nameseq *target;
target = PARSE_FILE_SEQ (&p2, struct nameseq, ':', NULL,
PARSEFS_NOGLOB|PARSEFS_NOCACHE);
PARSEFS_NOGLOB);
++p2;
if (target == 0)
fatal (fstart, _("missing target pattern"));
@ -1152,7 +1152,7 @@ eval (struct ebuffer *ebuf, int set_default)
pattern = target->name;
if (pattern_percent == 0)
fatal (fstart, _("target pattern contains no `%%'"));
free (target);
free_ns (target);
}
else
pattern = 0;
@ -1779,7 +1779,7 @@ record_target_var (struct nameseq *filenames, char *defn,
struct pattern_var *p;
nextf = filenames->next;
free (filenames);
free_ns (filenames);
/* If it's a pattern target, then add it to the pattern-specific
variable list. */
@ -1938,7 +1938,7 @@ record_files (struct nameseq *filenames, const char *pattern,
/* Count the targets to create an array of target names.
We already have the first one. */
nextf = filenames->next;
free (filenames);
free_ns (filenames);
filenames = nextf;
for (c = 1; nextf; ++c, nextf = nextf->next)
@ -1963,7 +1963,7 @@ record_files (struct nameseq *filenames, const char *pattern,
++c;
nextf = filenames->next;
free (filenames);
free_ns (filenames);
filenames = nextf;
}
@ -1981,7 +1981,7 @@ record_files (struct nameseq *filenames, const char *pattern,
struct file *f;
struct dep *this = 0;
free (filenames);
free_ns (filenames);
/* Check for special targets. Do it here instead of, say, snap_deps()
so that we can immediately use the value. */

9
rule.c
View file

@ -401,15 +401,8 @@ static void
freerule (struct rule *rule, struct rule *lastrule)
{
struct rule *next = rule->next;
struct dep *dep;
dep = rule->deps;
while (dep)
{
struct dep *t = dep->next;
free_dep (dep);
dep = t;
}
free_dep_chain (rule->deps);
free (rule->targets);
free (rule->suffixes);