]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-96905: In IDLE code, stop redefining built-ins 'dict' and 'object' (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 18 Jan 2024 05:05:00 +0000 (06:05 +0100)
committerGitHub <noreply@github.com>
Thu, 18 Jan 2024 05:05:00 +0000 (00:05 -0500)
Prefix 'dict' with 'o', 'g', or 'l' for 'object', 'global', or 'local'.
Suffix 'object' with '_'.
(cherry picked from commit 6f4b242a03e521a55f0b9e440703b424ed18ce2f)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Lib/idlelib/News3.txt
Lib/idlelib/debugger.py
Lib/idlelib/debugger_r.py
Lib/idlelib/debugobj.py
Lib/idlelib/idle_test/test_calltip.py
Lib/idlelib/rpc.py
Lib/idlelib/stackviewer.py
Misc/NEWS.d/next/IDLE/2024-01-17-23-18-15.gh-issue-96905.UYaxoU.rst [new file with mode: 0644]

index 6e7ad60ff34fee13fb7611caab436531b3f714a3..2010da3caa56b2f4ba9f013b75823872420cfb49 100644 (file)
@@ -4,6 +4,8 @@ Released after 2022-10-24
 =========================
 
 
+gh-96905: In idlelib code, stop redefining built-ins 'dict' and 'object'.
+
 gh-72284: Improve the lists of features, editor key bindings,
 and shell key bingings in the IDLE doc.
 
index f487b4c4b16a601a8d548a865e2630e662f5bcda..d90dbcd11f9f61b23390df73240521295a5077eb 100644 (file)
@@ -508,11 +508,11 @@ class StackViewer(ScrolledList):
 class NamespaceViewer:
     "Global/local namespace viewer for debugger GUI."
 
-    def __init__(self, master, title, dict=None):
+    def __init__(self, master, title, odict=None):  # XXX odict never passed.
         width = 0
         height = 40
-        if dict:
-            height = 20*len(dict) # XXX 20 == observed height of Entry widget
+        if odict:
+            height = 20*len(odict) # XXX 20 == observed height of Entry widget
         self.master = master
         self.title = title
         import reprlib
@@ -533,24 +533,24 @@ class NamespaceViewer:
         canvas["yscrollcommand"] = vbar.set
         self.subframe = subframe = Frame(canvas)
         self.sfid = canvas.create_window(0, 0, window=subframe, anchor="nw")
-        self.load_dict(dict)
+        self.load_dict(odict)
 
-    dict = -1
+    prev_odict = -1  # Needed for initial comparison below.
 
-    def load_dict(self, dict, force=0, rpc_client=None):
-        if dict is self.dict and not force:
+    def load_dict(self, odict, force=0, rpc_client=None):
+        if odict is self.prev_odict and not force:
             return
         subframe = self.subframe
         frame = self.frame
         for c in list(subframe.children.values()):
             c.destroy()
-        self.dict = None
-        if not dict:
+        self.prev_odict = None
+        if not odict:
             l = Label(subframe, text="None")
             l.grid(row=0, column=0)
         else:
             #names = sorted(dict)
-            ###
+            #
             # Because of (temporary) limitations on the dict_keys type (not yet
             # public or pickleable), have the subprocess to send a list of
             # keys, not a dict_keys object.  sorted() will take a dict_keys
@@ -560,12 +560,12 @@ class NamespaceViewer:
             # interpreter gets into a loop requesting non-existing dict[0],
             # dict[1], dict[2], etc from the debugger_r.DictProxy.
             # TODO recheck above; see debugger_r 159ff, debugobj 60.
-            keys_list = dict.keys()
+            keys_list = odict.keys()
             names = sorted(keys_list)
-            ###
+
             row = 0
             for name in names:
-                value = dict[name]
+                value = odict[name]
                 svalue = self.repr.repr(value) # repr(value)
                 # Strip extra quotes caused by calling repr on the (already)
                 # repr'd value sent across the RPC interface:
@@ -577,7 +577,7 @@ class NamespaceViewer:
                 l.insert(0, svalue)
                 l.grid(row=row, column=1, sticky="nw")
                 row = row+1
-        self.dict = dict
+        self.prev_odict = odict
         # XXX Could we use a <Configure> callback for the following?
         subframe.update_idletasks() # Alas!
         width = subframe.winfo_reqwidth()
index 26204438858d8a4b8e3850c5e8276b7208448b2f..ad3355d9f82765a4e46347d0a1b3d846c8afac08 100644 (file)
@@ -125,16 +125,16 @@ class IdbAdapter:
 
     def frame_globals(self, fid):
         frame = frametable[fid]
-        dict = frame.f_globals
-        did = id(dict)
-        dicttable[did] = dict
+        gdict = frame.f_globals
+        did = id(gdict)
+        dicttable[did] = gdict
         return did
 
     def frame_locals(self, fid):
         frame = frametable[fid]
-        dict = frame.f_locals
-        did = id(dict)
-        dicttable[did] = dict
+        ldict = frame.f_locals
+        did = id(ldict)
+        dicttable[did] = ldict
         return did
 
     def frame_code(self, fid):
@@ -158,20 +158,17 @@ class IdbAdapter:
 
     def dict_keys(self, did):
         raise NotImplementedError("dict_keys not public or pickleable")
-##         dict = dicttable[did]
-##         return dict.keys()
+##         return dicttable[did].keys()
 
-    ### Needed until dict_keys is type is finished and pickealable.
+    ### Needed until dict_keys type is finished and pickleable.
+    # xxx finished. pickleable?
     ### Will probably need to extend rpc.py:SocketIO._proxify at that time.
     def dict_keys_list(self, did):
-        dict = dicttable[did]
-        return list(dict.keys())
+        return list(dicttable[did].keys())
 
     def dict_item(self, did, key):
-        dict = dicttable[did]
-        value = dict[key]
-        value = reprlib.repr(value) ### can't pickle module 'builtins'
-        return value
+        value = dicttable[did][key]
+        return reprlib.repr(value) # Can't pickle module 'builtins'.
 
 #----------end class IdbAdapter----------
 
index 156377f8ed26ac2ec2669860e89dd5c26ba61853..fb448ece2fa25e738cb41a10995ca9b2f6ab4556 100644 (file)
@@ -1,3 +1,5 @@
+"""Define tree items for debug stackviewer, which is only user.
+"""
 # XXX TO DO:
 # - popup menu
 # - support partial or total redisplay
@@ -17,9 +19,9 @@ myrepr.maxstring = 100
 myrepr.maxother = 100
 
 class ObjectTreeItem(TreeItem):
-    def __init__(self, labeltext, object, setfunction=None):
+    def __init__(self, labeltext, object_, setfunction=None):
         self.labeltext = labeltext
-        self.object = object
+        self.object = object_
         self.setfunction = setfunction
     def GetLabelText(self):
         return self.labeltext
@@ -51,8 +53,8 @@ class ObjectTreeItem(TreeItem):
             item = make_objecttreeitem(
                 str(key) + " =",
                 value,
-                lambda value, key=key, object=self.object:
-                    setattr(object, key, value))
+                lambda value, key=key, object_=self.object:
+                    setattr(object_, key, value))
             sublist.append(item)
         return sublist
 
@@ -85,8 +87,8 @@ class SequenceTreeItem(ObjectTreeItem):
                 value = self.object[key]
             except KeyError:
                 continue
-            def setfunction(value, key=key, object=self.object):
-                object[key] = value
+            def setfunction(value, key=key, object_=self.object):
+                object_[key] = value
             item = make_objecttreeitem(f"{key!r}:", value, setfunction)
             sublist.append(item)
         return sublist
@@ -111,13 +113,13 @@ dispatch = {
     type: ClassTreeItem,
 }
 
-def make_objecttreeitem(labeltext, object, setfunction=None):
-    t = type(object)
+def make_objecttreeitem(labeltext, object_, setfunction=None):
+    t = type(object_)
     if t in dispatch:
         c = dispatch[t]
     else:
         c = ObjectTreeItem
-    return c(labeltext, object, setfunction)
+    return c(labeltext, object_, setfunction)
 
 
 def _debug_object_browser(parent):  # htest #
index 15e1ff3f3cf7175e20808077a2c0ddbac07dc65c..28c196a42672fcd2b025753341a7aac656926a6a 100644 (file)
@@ -79,6 +79,7 @@ class Get_argspecTest(unittest.TestCase):
         tiptest(list.append, '(self, object, /)' + append_doc)
         tiptest(List.append, '(self, object, /)' + append_doc)
         tiptest([].append, '(object, /)' + append_doc)
+        # The use of 'object' above matches the signature text.
 
         tiptest(types.MethodType,
               '(function, instance, /)\n'
index b08b80c90045511c8f9f974f3d35be0cecdb481f..3f0b2230dd185d7323698e0e7c12a58fa2ce3884 100644 (file)
@@ -158,8 +158,8 @@ class SocketIO:
             s = s + " " + str(a)
         print(s, file=sys.__stderr__)
 
-    def register(self, oid, object):
-        self.objtable[oid] = object
+    def register(self, oid, object_):
+        self.objtable[oid] = object_
 
     def unregister(self, oid):
         try:
index 977c56ef15f2ae4903844d4403f8489f24fc3c70..95042d4debdc03b77cdeff58a84819db6403b0e9 100644 (file)
@@ -106,8 +106,8 @@ class VariablesTreeItem(ObjectTreeItem):
                 value = self.object[key]
             except KeyError:
                 continue
-            def setfunction(value, key=key, object=self.object):
-                object[key] = value
+            def setfunction(value, key=key, object_=self.object):
+                object_[key] = value
             item = make_objecttreeitem(key + " =", value, setfunction)
             sublist.append(item)
         return sublist
diff --git a/Misc/NEWS.d/next/IDLE/2024-01-17-23-18-15.gh-issue-96905.UYaxoU.rst b/Misc/NEWS.d/next/IDLE/2024-01-17-23-18-15.gh-issue-96905.UYaxoU.rst
new file mode 100644 (file)
index 0000000..fe7dde6
--- /dev/null
@@ -0,0 +1 @@
+In idlelib code, stop redefining built-ins 'dict' and 'object'.