diff options
author | Adam Gross <grossag@vmware.com> | 2019-12-23 15:10:01 (GMT) |
---|---|---|
committer | Adam Gross <grossag@vmware.com> | 2019-12-23 15:10:01 (GMT) |
commit | 4f6fa862878fa4c14ea8895bec2476d394385d57 (patch) | |
tree | ee53c4b42d899ec15d72e8e3a0bcebe72c9291de | |
parent | 4463d8629c5945d8973818a32be55334617e0d6c (diff) | |
download | SCons-4f6fa862878fa4c14ea8895bec2476d394385d57.zip SCons-4f6fa862878fa4c14ea8895bec2476d394385d57.tar.gz SCons-4f6fa862878fa4c14ea8895bec2476d394385d57.tar.bz2 |
Exclude non-primitive values from memoization
-rw-r--r-- | src/engine/SCons/Node/Python.py | 5 | ||||
-rw-r--r-- | src/engine/SCons/Node/PythonTests.py | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/engine/SCons/Node/Python.py b/src/engine/SCons/Node/Python.py index 7b25edb..1fb2866 100644 --- a/src/engine/SCons/Node/Python.py +++ b/src/engine/SCons/Node/Python.py @@ -184,6 +184,11 @@ def ValueWithMemo(value, built_value=None): if built_value: return Value(value, built_value) + # No current support for memoizing non-primitive types in case they change + # after this call. + if not isinstance(value, (int, str, float, bool)): + return Value(value, built_value) + value_str = str(value) if value_str in _memoLookupMap: return _memoLookupMap[value_str] diff --git a/src/engine/SCons/Node/PythonTests.py b/src/engine/SCons/Node/PythonTests.py index e1aa58b..6af3e60 100644 --- a/src/engine/SCons/Node/PythonTests.py +++ b/src/engine/SCons/Node/PythonTests.py @@ -132,6 +132,18 @@ class ValueMemoTestCase(unittest.TestCase): v2 = SCons.Node.Python.Value('c', 'ca') assert v1 is not v2 + def test_non_primitive_values(self): + """Confirm that non-primitive values are not memoized.""" + d = {'a': 1} + v1 = SCons.Node.Python.Value(d) + v2 = SCons.Node.Python.Value(d) + assert v1 is not v2 + + l = [1] + v3 = SCons.Node.Python.Value(l) + v4 = SCons.Node.Python.Value(l) + assert v3 is not v4 + if __name__ == "__main__": unittest.main() |