summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-03-21 07:16:35 (GMT)
committerSteven Knight <knight@baldmt.com>2002-03-21 07:16:35 (GMT)
commitbb8376994ade0355161d82068d420dee2ff4bec3 (patch)
tree52483cef02bf7c5e55947bf1cb6ae60dfb51b875 /src
parenta9272652019c6d0cad2f20737e210f820ec9394d (diff)
downloadSCons-bb8376994ade0355161d82068d420dee2ff4bec3.zip
SCons-bb8376994ade0355161d82068d420dee2ff4bec3.tar.gz
SCons-bb8376994ade0355161d82068d420dee2ff4bec3.tar.bz2
Speed up SCons.Sig.Calculator.bsig() (second most time-consuming function) by 6%-12% by using the new Walker eval_func argument.
Diffstat (limited to 'src')
-rw-r--r--src/engine/SCons/Sig/__init__.py15
-rw-r--r--src/engine/SCons/Taskmaster.py8
2 files changed, 12 insertions, 11 deletions
diff --git a/src/engine/SCons/Sig/__init__.py b/src/engine/SCons/Sig/__init__.py
index 7e93123..3770adf 100644
--- a/src/engine/SCons/Sig/__init__.py
+++ b/src/engine/SCons/Sig/__init__.py
@@ -204,18 +204,19 @@ class Calculator:
# derived files, because calling get_signature() on the
# derived nodes will in turn call bsig() again and do that
# for us. Hence:
- def walk_non_derived(n, parent, myself=node):
+ sigs = []
+ def non_derived(n, parent, myself=node):
if not n.builder or n is myself:
return filter(lambda x, i=myself.ignore: x not in i,
n.all_children(None))
return []
- walker = SCons.Node.Walker(node, walk_non_derived)
- sigs = []
- while 1:
+ def get_sig(n, parent, self=self, myself=node, sigs=sigs):
+ if not n is myself:
+ sigs.append(self.get_signature(n))
+ walker = SCons.Node.Walker(node, non_derived, eval_func=get_sig)
+ child = walker.next()
+ while child:
child = walker.next()
- if child is None: break
- if child is node: continue # skip the node itself
- sigs.append(self.get_signature(child))
if node.builder:
sigs.append(self.module.signature(node.builder_sig_adapter()))
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py
index 404355e..c97d28c 100644
--- a/src/engine/SCons/Taskmaster.py
+++ b/src/engine/SCons/Taskmaster.py
@@ -117,11 +117,11 @@ class Task:
nodes = {}
for t in self.targets:
def get_parents(node, parent): return node.get_parents()
- walker = SCons.Node.Walker(t, get_parents)
- while 1:
+ def set_nodes(node, parent, nodes=nodes): nodes[node] = 1
+ walker = SCons.Node.Walker(t, get_parents, eval_func=set_nodes)
+ n = walker.next()
+ while n:
n = walker.next()
- if n == None: break
- nodes[n] = 1
pending = filter(lambda x: x.get_state() == SCons.Node.pending,
nodes.keys())
tasks = {}