summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Scanner
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-01-15 22:49:18 (GMT)
committerSteven Knight <knight@baldmt.com>2002-01-15 22:49:18 (GMT)
commit97a79ce0ff7031c09ccc3b4afc6edf765182ed5c (patch)
tree0a554f0e21c8edd0ea680765c0cb201da3a331a6 /src/engine/SCons/Scanner
parentacae06481e87492d8d5b26b5fc102b9e73e8a2f3 (diff)
downloadSCons-97a79ce0ff7031c09ccc3b4afc6edf765182ed5c.zip
SCons-97a79ce0ff7031c09ccc3b4afc6edf765182ed5c.tar.gz
SCons-97a79ce0ff7031c09ccc3b4afc6edf765182ed5c.tar.bz2
Significant performance optimizations (Charles Crain).
Diffstat (limited to 'src/engine/SCons/Scanner')
-rw-r--r--src/engine/SCons/Scanner/CTests.py18
-rw-r--r--src/engine/SCons/Scanner/__init__.py7
2 files changed, 13 insertions, 12 deletions
diff --git a/src/engine/SCons/Scanner/CTests.py b/src/engine/SCons/Scanner/CTests.py
index 70fc2b4..d838643 100644
--- a/src/engine/SCons/Scanner/CTests.py
+++ b/src/engine/SCons/Scanner/CTests.py
@@ -138,8 +138,8 @@ def deps_match(self, deps, headers):
expect.sort()
self.failUnless(scanned == expect, "expect %s != scanned %s" % (expect, scanned))
-def make_node(filename):
- return SCons.Node.FS.default_fs.File(test.workpath(filename))
+def make_node(filename, fs=SCons.Node.FS.default_fs):
+ return fs.File(test.workpath(filename))
# define some tests:
@@ -221,9 +221,9 @@ class CScannerTestCase8(unittest.TestCase):
fs = SCons.Node.FS.FS(test.workpath(''))
env = DummyEnvironment(["include"])
s = SCons.Scanner.C.CScan(fs = fs)
- deps1 = s.instance(env).scan(make_node('fa.cpp'), None)
+ deps1 = s.instance(env).scan(fs.File('fa.cpp'), None)
fs.chdir(fs.Dir('subdir'))
- deps2 = s.instance(env).scan(make_node('fa.cpp'), None)
+ deps2 = s.instance(env).scan(fs.File('#fa.cpp'), None)
headers1 = ['include/fa.h', 'include/fb.h']
headers2 = ['subdir/include/fa.h', 'subdir/include/fb.h']
deps_match(self, deps1, headers1)
@@ -231,12 +231,12 @@ class CScannerTestCase8(unittest.TestCase):
class CScannerTestCase9(unittest.TestCase):
def runTest(self):
+ test.write('fa.h','\n')
fs = SCons.Node.FS.FS(test.workpath(''))
s = SCons.Scanner.C.CScan(fs=fs)
env = DummyEnvironment([])
- test.write('fa.h','\n')
- deps = s.instance(env).scan(make_node('fa.cpp'), None)
- deps_match(self, deps, [ test.workpath('fa.h') ])
+ deps = s.instance(env).scan(fs.File('fa.cpp'), None)
+ deps_match(self, deps, [ 'fa.h' ])
test.unlink('fa.h')
class CScannerTestCase10(unittest.TestCase):
@@ -246,8 +246,8 @@ class CScannerTestCase10(unittest.TestCase):
s = SCons.Scanner.C.CScan(fs=fs)
env = DummyEnvironment([])
test.write('include/fa.cpp', test.read('fa.cpp'))
- deps = s.instance(env).scan(make_node('include/fa.cpp'), None)
- deps_match(self, deps, [ test.workpath('include/fa.h'), test.workpath('include/fb.h') ])
+ deps = s.instance(env).scan(fs.File('#include/fa.cpp'), None)
+ deps_match(self, deps, [ 'include/fa.h', 'include/fb.h' ])
test.unlink('include/fa.cpp')
def suite():
diff --git a/src/engine/SCons/Scanner/__init__.py b/src/engine/SCons/Scanner/__init__.py
index 52eae8e..671eba3 100644
--- a/src/engine/SCons/Scanner/__init__.py
+++ b/src/engine/SCons/Scanner/__init__.py
@@ -137,7 +137,7 @@ class Recursive(Base):
"""
nodes = [node]
- seen = [node]
+ seen = {node : 0}
deps = []
while nodes:
n = nodes.pop(0)
@@ -145,9 +145,10 @@ class Recursive(Base):
d = self.function(n, env, self.argument)
else:
d = self.function(n, env)
- d = filter(lambda x, seen=seen: x not in seen, d)
+ d = filter(lambda x, seen=seen: not seen.has_key(x), d)
if d:
deps.extend(d)
- seen.extend(d)
nodes.extend(d)
+ for n in d:
+ seen[n] = 0
return deps