Fix performance degradation introduced by the second expansion feature.
commit8f488ed50e0ac42fdce0b7cc3f03b58910973cd7
authorpsmith <psmith>
Wed, 13 Apr 2005 03:16:33 +0000 (13 03:16 +0000)
committerpsmith <psmith>
Wed, 13 Apr 2005 03:16:33 +0000 (13 03:16 +0000)
tree8e1aa7a963b285f4872ff01f6a5ab04b796882d2
parent27702b4101eac7213375b6a70153f9bad7c4ecd4
Fix performance degradation introduced by the second expansion feature.
I did this by adding intelligence into the algorithm such that the
second expansion was only actually performed when the prerequisite list
contained at least one "$", so we knew it is actually needed.

Without this we were using up a LOT more memory, since every single
target (even ones never used by make) had their file variables
initialized.  This also used a lot more CPU, since we needed to create
and populate a new variable hash table for every target.

There is one issue remaining with this feature: it leaks memory.  In
pattern_search() we now initialize the file variables for every pattern
target, which allocates a hash table, etc.  However, sometimes we
recursively invoke pattern_search() (for intermediate files) with an
automatic variable (alloca() I believe) as the file.  When that function
returns, obviously, the file variable hash memory is lost.
ChangeLog
dep.h
file.c
implicit.c
main.c
read.c
rule.c