summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-07-24 08:11:18 (GMT)
committerSteven Knight <knight@baldmt.com>2003-07-24 08:11:18 (GMT)
commit7a3d5b8e06e44fee43fc78d7eb72b8d271022c18 (patch)
tree9644777ce4b886806bd13ce207e047da336a7b12 /src/engine/SCons/Node
parent5d238601a22fa009de4df38e0257c405f9b243db (diff)
downloadSCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.zip
SCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.tar.gz
SCons-7a3d5b8e06e44fee43fc78d7eb72b8d271022c18.tar.bz2
Add a QT tool. (Christoph Wiedemann)
Diffstat (limited to 'src/engine/SCons/Node')
-rw-r--r--src/engine/SCons/Node/NodeTests.py38
-rw-r--r--src/engine/SCons/Node/__init__.py13
2 files changed, 47 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index 2d6e0bc..f4d4845 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.py
@@ -630,6 +630,44 @@ class NodeTestCase(unittest.TestCase):
assert s.called
assert node.implicit == [d], node.implicit
+ # Check that scanning a node with some stored implicit
+ # dependencies resets internal attributes appropriately
+ # if the stored dependencies need recalculation.
+ class StoredNode(MyNode):
+ def get_stored_implicit(self):
+ return ['implicit1', 'implicit2']
+
+ class NotCurrent:
+ def current(self, node, sig):
+ return None
+ def bsig(self, node):
+ return 0
+
+ import SCons.Sig
+
+ save_default_calc = SCons.Sig.default_calc
+ save_implicit_cache = SCons.Node.implicit_cache
+ save_implicit_deps_changed = SCons.Node.implicit_deps_changed
+ save_implicit_deps_unchanged = SCons.Node.implicit_deps_unchanged
+ SCons.Sig.default_calc = NotCurrent()
+ SCons.Node.implicit_cache = 1
+ SCons.Node.implicit_deps_changed = None
+ SCons.Node.implicit_deps_unchanged = None
+ try:
+ sn = StoredNode("eee")
+ sn._children = ['fake']
+ sn.target_scanner = s
+
+ sn.scan()
+
+ assert sn.implicit == [], sn.implicit
+ assert not hasattr(sn, '_children'), "unexpected _children attribute"
+ finally:
+ SCons.Sig.default_calc = save_default_calc
+ SCons.Node.implicit_cache = save_implicit_cache
+ SCons.Node.implicit_deps_changed = save_implicit_deps_changed
+ SCons.Node.implicit_deps_unchanged = save_implicit_deps_unchanged
+
def test_scanner_key(self):
"""Test that a scanner_key() method exists"""
assert SCons.Node.Node().scanner_key() == None
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index 1a80d5a..66ffe64 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -360,6 +360,7 @@ class Node:
return
self.implicit = []
self.implicit_dict = {}
+ self._children_reset()
if not self.has_builder():
return
@@ -377,6 +378,7 @@ class Node:
# and the bsig:
self.implicit = []
self.implicit_dict = {}
+ self._children_reset()
self.del_bsig()
build_env = self.get_build_env()
@@ -594,16 +596,19 @@ class Node:
added = 1
c.parents[self] = 1
if added:
- try:
- delattr(self, '_children')
- except AttributeError:
- pass
+ self._children_reset()
def add_wkid(self, wkid):
"""Add a node to the list of kids waiting to be evaluated"""
if self.wkids != None:
self.wkids.append(wkid)
+ def _children_reset(self):
+ try:
+ delattr(self, '_children')
+ except AttributeError:
+ pass
+
def children(self, scan=1):
"""Return a list of the node's direct children, minus those
that are ignored by this node."""