[Python-checkins] gdb libpython.py: Remove compatibility code (#105739)
vstinner
webhook-mailer at python.org
Wed Jun 14 06:30:29 EDT 2023
https://github.com/python/cpython/commit/03160630319ca26dcbbad65225da4248e54c45ec
commit: 03160630319ca26dcbbad65225da4248e54c45ec
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2023-06-14T12:30:22+02:00
summary:
gdb libpython.py: Remove compatibility code (#105739)
Remove compatibility code for Python 2 and early Python 3 versions.
* Remove os_fsencode() reimplementation: use os.fsencode() directly.
os.fsencode() was added to Python 3.2.
* Remove references to Python 2 and "Python 3": just say "Python".
* Remove outdated u'' string format: use '' instead.
files:
M Tools/gdb/libpython.py
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index 79b8c7527c230..6225d315281f0 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -111,26 +111,6 @@ def safe_range(val):
# threshold in case the data was corrupted
return range(safety_limit(int(val)))
-try:
- os_fsencode = os.fsencode
-except AttributeError:
- def os_fsencode(filename):
- if not isinstance(filename, unicode):
- return filename
- encoding = sys.getfilesystemencoding()
- if encoding == 'mbcs':
- # mbcs doesn't support surrogateescape
- return filename.encode(encoding)
- encoded = []
- for char in filename:
- # surrogateescape error handler
- if 0xDC80 <= ord(char) <= 0xDCFF:
- byte = chr(ord(char) - 0xDC00)
- else:
- byte = char.encode(encoding)
- encoded.append(byte)
- return ''.join(encoded)
-
class StringTruncated(RuntimeError):
pass
@@ -174,16 +154,12 @@ def __init__(self, gdbval, cast_to=None):
def field(self, name):
'''
- Get the gdb.Value for the given field within the PyObject, coping with
- some python 2 versus python 3 differences.
+ Get the gdb.Value for the given field within the PyObject.
Various libpython types are defined using the "PyObject_HEAD" and
"PyObject_VAR_HEAD" macros.
- In Python 2, this these are defined so that "ob_type" and (for a var
- object) "ob_size" are fields of the type in question.
-
- In Python 3, this is defined as an embedded PyVarObject type thus:
+ In Python, this is defined as an embedded PyVarObject type thus:
PyVarObject ob_base;
so that the "ob_size" field is located insize the "ob_base" field, and
the "ob_type" is most easily accessed by casting back to a (PyObject*).
@@ -204,8 +180,7 @@ def field(self, name):
def pyop_field(self, name):
'''
- Get a PyObjectPtr for the given PyObject* field within this PyObject,
- coping with some python 2 versus python 3 differences.
+ Get a PyObjectPtr for the given PyObject* field within this PyObject.
'''
return PyObjectPtr.from_pyobject_ptr(self.field(name))
@@ -924,7 +899,7 @@ def proxyval(self, visited):
return result
def write_repr(self, out, visited):
- # Write this out as a Python 3 int literal, i.e. without the "L" suffix
+ # Write this out as a Python int literal
proxy = self.proxyval(visited)
out.write("%s" % proxy)
@@ -1170,7 +1145,7 @@ def current_line(self):
filename = self.filename()
try:
- with open(os_fsencode(filename), 'r', encoding="utf-8") as fp:
+ with open(os.fsencode(filename), 'r', encoding="utf-8") as fp:
lines = fp.readlines()
except IOError:
return None
@@ -1263,7 +1238,7 @@ def proxyval(self, visited):
return set(members)
def write_repr(self, out, visited):
- # Emulate Python 3's set_repr
+ # Emulate Python's set_repr
tp_name = self.safe_tp_name()
# Guard against infinite loops:
@@ -1272,13 +1247,13 @@ def write_repr(self, out, visited):
return
visited.add(self.as_address())
- # Python 3's set_repr special-cases the empty set:
+ # Python's set_repr special-cases the empty set:
if not self.field('used'):
out.write(tp_name)
out.write('()')
return
- # Python 3 uses {} for set literals:
+ # Python uses {} for set literals:
if tp_name != 'set':
out.write(tp_name)
out.write('(')
@@ -1309,13 +1284,13 @@ def proxyval(self, visited):
return str(self)
def write_repr(self, out, visited):
- # Write this out as a Python 3 bytes literal, i.e. with a "b" prefix
+ # Write this out as a Python bytes literal, i.e. with a "b" prefix
- # Get a PyStringObject* within the Python 2 gdb process:
+ # Get a PyStringObject* within the Python gdb process:
proxy = self.proxyval(visited)
- # Transliteration of Python 3's Objects/bytesobject.c:PyBytes_Repr
- # to Python 2 code:
+ # Transliteration of Python's Objects/bytesobject.c:PyBytes_Repr
+ # to Python code:
quote = "'"
if "'" in proxy and not '"' in proxy:
quote = '"'
@@ -1380,7 +1355,7 @@ class PyTypeObjectPtr(PyObjectPtr):
def _unichr_is_printable(char):
- # Logic adapted from Python 3's Tools/unicode/makeunicodedata.py
+ # Logic adapted from Python's Tools/unicode/makeunicodedata.py
if char == u" ":
return True
import unicodedata
@@ -1416,17 +1391,17 @@ def proxyval(self, visited):
# Convert the int code points to unicode characters, and generate a
# local unicode instance.
- result = u''.join(map(chr, code_points))
+ result = ''.join(map(chr, code_points))
return result
def write_repr(self, out, visited):
- # Write this out as a Python 3 str literal, i.e. without a "u" prefix
+ # Write this out as a Python str literal
- # Get a PyUnicodeObject* within the Python 2 gdb process:
+ # Get a PyUnicodeObject* within the Python gdb process:
proxy = self.proxyval(visited)
- # Transliteration of Python 3's Object/unicodeobject.c:unicode_repr
- # to Python 2:
+ # Transliteration of Python's Object/unicodeobject.c:unicode_repr
+ # to Python:
if "'" in proxy and '"' not in proxy:
quote = '"'
else:
@@ -1477,7 +1452,7 @@ def write_repr(self, out, visited):
# (categories Z* and C* except ASCII space)
if not printable:
if ch2 is not None:
- # Match Python 3's representation of non-printable
+ # Match Python's representation of non-printable
# wide characters.
code = (ord(ch) & 0x03FF) << 10
code |= ord(ch2) & 0x03FF
@@ -1608,8 +1583,8 @@ def pretty_printer_lookup(gdbval):
if the code is autoloaded by gdb when visiting libpython.so, provided
that this python file is installed to the same path as the library (or its
.debug file) plus a "-gdb.py" suffix, e.g:
- /usr/lib/libpython2.6.so.1.0-gdb.py
- /usr/lib/debug/usr/lib/libpython2.6.so.1.0.debug-gdb.py
+ /usr/lib/libpython3.12.so.1.0-gdb.py
+ /usr/lib/debug/usr/lib/libpython3.12.so.1.0.debug-gdb.py
"""
def register (obj):
if obj is None:
@@ -1928,7 +1903,7 @@ def invoke(self, args, from_tty):
start = 1
try:
- f = open(os_fsencode(filename), 'r', encoding="utf-8")
+ f = open(os.fsencode(filename), 'r', encoding="utf-8")
except IOError as err:
sys.stdout.write('Unable to open %s: %s\n'
% (filename, err))
More information about the Python-checkins
mailing list