diff options
author | Steven Knight <knight@baldmt.com> | 2004-12-16 14:22:29 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2004-12-16 14:22:29 (GMT) |
commit | 64c24fdd205f1d3fe584990aaf6ae050bb46c431 (patch) | |
tree | 56224b472ce45750199e13b89473109b50ea3f9a /src/engine/SCons/Scanner/__init__.py | |
parent | 3869e426c19bd3b2e9bbb611b596220df9b34814 (diff) | |
download | SCons-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__.py | 24 |
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: |