]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-141510: Add frozendict support to python-gdb.py (#145511)
authorVictor Stinner <vstinner@python.org>
Wed, 4 Mar 2026 23:57:54 +0000 (00:57 +0100)
committerGitHub <noreply@github.com>
Wed, 4 Mar 2026 23:57:54 +0000 (00:57 +0100)
Lib/test/test_gdb/test_pretty_print.py
Tools/gdb/libpython.py

index dfc77d65ab16a408af93b2353330e2f6c6f95543..db3064e3df54c24c7954826bc8e980e98ee47bc4 100644 (file)
@@ -82,7 +82,14 @@ class PrettyPrintTests(DebuggerTests):
         self.assertGdbRepr({})
         self.assertGdbRepr({'foo': 'bar'}, "{'foo': 'bar'}")
         # Python preserves insertion order since 3.6
-        self.assertGdbRepr({'foo': 'bar', 'douglas': 42}, "{'foo': 'bar', 'douglas': 42}")
+        self.assertGdbRepr({'foo': 'bar', 'douglas': 42},
+                           "{'foo': 'bar', 'douglas': 42}")
+
+        # frozendict
+        self.assertGdbRepr(frozendict(),
+                           "frozendict({})")
+        self.assertGdbRepr(frozendict({'foo': 'bar', 'douglas': 42}),
+                           "frozendict({'foo': 'bar', 'douglas': 42})")
 
     def test_lists(self):
         'Verify the pretty-printing of lists'
index a85195dcd1016a90f74ad362ac06a4179b7abf80..ba52ea2a30e0be1914a9847b9c493d635a34fc6d 100755 (executable)
@@ -352,6 +352,7 @@ class PyObjectPtr(object):
                     'frame': PyFrameObjectPtr,
                     'set' : PySetObjectPtr,
                     'frozenset' : PySetObjectPtr,
+                    'frozendict' : PyDictObjectPtr,
                     'builtin_function_or_method' : PyCFunctionObjectPtr,
                     'method-wrapper': wrapperobject,
                     }
@@ -815,12 +816,20 @@ class PyDictObjectPtr(PyObjectPtr):
         return result
 
     def write_repr(self, out, visited):
+        tp_name = self.safe_tp_name()
+        is_frozendict = (tp_name == "frozendict")
+
         # Guard against infinite loops:
         if self.as_address() in visited:
-            out.write('{...}')
+            if is_frozendict:
+                out.write(tp_name + '({...})')
+            else:
+                out.write('{...}')
             return
         visited.add(self.as_address())
 
+        if is_frozendict:
+            out.write(tp_name + '(')
         out.write('{')
         first = True
         for pyop_key, pyop_value in self.iteritems():
@@ -831,6 +840,8 @@ class PyDictObjectPtr(PyObjectPtr):
             out.write(': ')
             pyop_value.write_repr(out, visited)
         out.write('}')
+        if is_frozendict:
+            out.write(')')
 
     @staticmethod
     def _get_entries(keys):