summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Scanner/__init__.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-12-16 14:22:29 (GMT)
committerSteven Knight <knight@baldmt.com>2004-12-16 14:22:29 (GMT)
commit64c24fdd205f1d3fe584990aaf6ae050bb46c431 (patch)
tree56224b472ce45750199e13b89473109b50ea3f9a /src/engine/SCons/Scanner/__init__.py
parent3869e426c19bd3b2e9bbb611b596220df9b34814 (diff)
downloadSCons-64c24fdd205f1d3fe584990aaf6ae050bb46c431.zip
SCons-64c24fdd205f1d3fe584990aaf6ae050bb46c431.tar.gz
SCons-64c24fdd205f1d3fe584990aaf6ae050bb46c431.tar.bz2
Cache get_suffix() and get_build_env(). (Kevin Quick)
Diffstat (limited to 'src/engine/SCons/Scanner/__init__.py')
-rw-r--r--src/engine/SCons/Scanner/__init__.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/engine/SCons/Scanner/__init__.py b/src/engine/SCons/Scanner/__init__.py
index e5ac2c6..cbab50c 100644
--- a/src/engine/SCons/Scanner/__init__.py
+++ b/src/engine/SCons/Scanner/__init__.py
@@ -296,8 +296,24 @@ class Classic(Current):
self.cre = re.compile(regex, re.M)
self.fs = fs
+ self._cached = {}
- kw['function'] = self.scan
+ def _scan(node, env, path=(), self=self):
+ node = node.rfile()
+
+ if not node.exists():
+ return []
+
+ key = str(id(node)) + '|' + string.join(map(str, path), ':')
+ try:
+ return self._cached[key]
+ except KeyError:
+ pass
+
+ self._cached[key] = scan_result = self.scan(node, path)
+ return scan_result
+
+ kw['function'] = _scan
kw['path_function'] = FindPathDirs(path_variable, fs)
kw['recursive'] = 1
kw['skeys'] = suffixes
@@ -314,11 +330,7 @@ class Classic(Current):
def sort_key(self, include):
return SCons.Node.FS._my_normcase(include)
- def scan(self, node, env, path=()):
- node = node.rfile()
-
- if not node.exists():
- return []
+ def scan(self, node, path=()):
# cache the includes list in node so we only scan it once:
if node.includes != None: