diff options
author | Steven Knight <knight@baldmt.com> | 2002-01-15 22:49:18 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-01-15 22:49:18 (GMT) |
commit | 97a79ce0ff7031c09ccc3b4afc6edf765182ed5c (patch) | |
tree | 0a554f0e21c8edd0ea680765c0cb201da3a331a6 /src/engine/SCons/Scanner | |
parent | acae06481e87492d8d5b26b5fc102b9e73e8a2f3 (diff) | |
download | SCons-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.py | 18 | ||||
-rw-r--r-- | src/engine/SCons/Scanner/__init__.py | 7 |
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 |