]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-141510: support frozendict's in the C decimal module (gh-145165)
authorSergey B Kirpichev <skirpichev@gmail.com>
Thu, 26 Feb 2026 22:02:39 +0000 (01:02 +0300)
committerGitHub <noreply@github.com>
Thu, 26 Feb 2026 22:02:39 +0000 (07:02 +0900)
Lib/test/test_decimal.py
Modules/_decimal/_decimal.c

index b520b062ebc6858d63b4be4e81dd5f5e1eef5f6f..fe8c8ce12da0bfa42f5df59b34f9bb3a9a2b9164 100644 (file)
@@ -3963,15 +3963,21 @@ class ContextFlags:
         d.update(c.flags)
         self.assertEqual(d, c.flags)
         self.assertEqual(c.flags, d)
+        self.assertEqual(frozendict(d), c.flags)
+        self.assertEqual(c.flags, frozendict(d))
 
         d[Inexact] = True
         self.assertNotEqual(d, c.flags)
         self.assertNotEqual(c.flags, d)
+        self.assertNotEqual(frozendict(d), c.flags)
+        self.assertNotEqual(c.flags, frozendict(d))
 
         # Invalid SignalDict
         d = {Inexact:False}
         self.assertNotEqual(d, c.flags)
         self.assertNotEqual(c.flags, d)
+        self.assertNotEqual(frozendict(d), c.flags)
+        self.assertNotEqual(c.flags, frozendict(d))
 
         d = ["xyz"]
         self.assertNotEqual(d, c.flags)
index dcea4da8f24268fae7b36a70990a579c76c895f6..c42757e042e7ef47ae0c720a3eef703f960e7d12 100644 (file)
@@ -552,7 +552,7 @@ dict_as_flags(decimal_state *state, PyObject *val)
     uint32_t flags = 0;
     int x;
 
-    if (!PyDict_Check(val)) {
+    if (!PyAnyDict_Check(val)) {
         PyErr_SetString(PyExc_TypeError,
             "argument must be a signal dict");
         return DEC_INVALID_SIGNALS;
@@ -802,7 +802,7 @@ signaldict_richcompare(PyObject *v, PyObject *w, int op)
         if (PyDecSignalDict_Check(state, w)) {
             res = (SdFlags(v)==SdFlags(w)) ^ (op==Py_NE) ? Py_True : Py_False;
         }
-        else if (PyDict_Check(w)) {
+        else if (PyAnyDict_Check(w)) {
             uint32_t flags = dict_as_flags(state, w);
             if (flags & DEC_ERRORS) {
                 if (flags & DEC_INVALID_SIGNALS) {