diff options
author | William Deegan <bill@baddogconsulting.com> | 2020-01-16 02:06:57 (GMT) |
---|---|---|
committer | William Deegan <bill@baddogconsulting.com> | 2020-01-16 02:06:57 (GMT) |
commit | e5c71f8a819fba93047d17966bfb85835637ea6a (patch) | |
tree | 328e62794916986325507c18d60bae3b9df3bd29 /src/engine/SCons | |
parent | 4ef2198638c96621a0794424c887f5cd8cc106a2 (diff) | |
download | SCons-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.py | 9 | ||||
-rw-r--r-- | src/engine/SCons/Node/PythonTests.py | 16 |
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() |