summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/CHANGES.txt3
-rw-r--r--src/engine/SCons/Node/Python.py9
-rw-r--r--src/engine/SCons/Node/PythonTests.py16
3 files changed, 23 insertions, 5 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 97934ff..fd9eba5 100755
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -19,10 +19,9 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
From Adam Gross:
- Added support for taking instances of the Value class as implicit
dependencies.
-
- From Adam Gross:
- Added new module SCons.Scanner.Python to allow scanning .py files.
+
From Mathew Robinson:
- Improve performance of Subst by preventing unnecessary frame
allocations by no longer defining the *Subber classes inside of their
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()