summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2020-01-16 02:06:57 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2020-01-16 02:06:57 (GMT)
commite5c71f8a819fba93047d17966bfb85835637ea6a (patch)
tree328e62794916986325507c18d60bae3b9df3bd29 /src/engine/SCons
parent4ef2198638c96621a0794424c887f5cd8cc106a2 (diff)
downloadSCons-e5c71f8a819fba93047d17966bfb85835637ea6a.zip
SCons-e5c71f8a819fba93047d17966bfb85835637ea6a.tar.gz
SCons-e5c71f8a819fba93047d17966bfb85835637ea6a.tar.bz2
Change ValueWithMemo() to take into account any name passed when memoizing Value()'s
Diffstat (limited to 'src/engine/SCons')
-rw-r--r--src/engine/SCons/Node/Python.py9
-rw-r--r--src/engine/SCons/Node/PythonTests.py16
2 files changed, 22 insertions, 3 deletions
diff --git a/src/engine/SCons/Node/Python.py b/src/engine/SCons/Node/Python.py
index d26c185..68c6ee8 100644
--- a/src/engine/SCons/Node/Python.py
+++ b/src/engine/SCons/Node/Python.py
@@ -185,17 +185,20 @@ class Value(SCons.Node.Node):
def ValueWithMemo(value, built_value=None, name=None):
+ """
+ Memoized Value() node factory.
+ """
global _memo_lookup_map
# No current support for memoizing a value that needs to be built.
if built_value:
- return Value(value, built_value)
+ return Value(value, built_value, name=name)
try:
- memo_lookup_key = hash(value)
+ memo_lookup_key = hash((value, name))
except TypeError:
# Non-primitive types will hit this codepath.
- return Value(value)
+ return Value(value, name=name)
try:
return _memo_lookup_map[memo_lookup_key]
diff --git a/src/engine/SCons/Node/PythonTests.py b/src/engine/SCons/Node/PythonTests.py
index 6db07ab..51a49c0 100644
--- a/src/engine/SCons/Node/PythonTests.py
+++ b/src/engine/SCons/Node/PythonTests.py
@@ -104,6 +104,9 @@ class ValueTestCase(unittest.TestCase):
assert csig == 'None', csig
+
+
+
class ValueNodeInfoTestCase(unittest.TestCase):
def test___init__(self):
"""Test ValueNodeInfo initialization"""
@@ -162,6 +165,19 @@ class ValueMemoTestCase(unittest.TestCase):
v4 = SCons.Node.Python.ValueWithMemo(a)
assert v3 is not v4
+ def test_value_set_name(self):
+ """ Confirm setting name and caching takes the name into account """
+
+ v1 = SCons.Node.Python.ValueWithMemo(b'\x00\x0F', name='name')
+ v2 = SCons.Node.Python.ValueWithMemo(b'\x00\x0F', name='name2')
+ v3 = SCons.Node.Python.ValueWithMemo('Jibberish')
+
+ self.assertEqual(v1.name,'name', msg=v1.name)
+ self.assertEqual(v2.name,'name2', msg=v2.name)
+ self.assertEqual(v3.name,'Jibberish', msg=v3.name)
+ self.assertTrue(v1 is not v2, msg="v1 and v2 should be different as they have different names but same values")
+
+
if __name__ == "__main__":
unittest.main()