aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2021-10-26 00:08:46 +0100
committerAndrew Burgess <aburgess@redhat.com>2022-02-14 09:53:04 +0000
commit7b8c55afd07abf1e2e4efbeca4b9a614ce8d4e1e (patch)
tree894941d444cc0c4167f48dd18ed1c688e6a9b6b6
parente867795e8bcd6571c785e5e1d872fff0a5c7b290 (diff)
downloadgdb-7b8c55afd07abf1e2e4efbeca4b9a614ce8d4e1e.zip
gdb-7b8c55afd07abf1e2e4efbeca4b9a614ce8d4e1e.tar.gz
gdb-7b8c55afd07abf1e2e4efbeca4b9a614ce8d4e1e.tar.bz2
gdb/python: move styling support to gdb.styling
This commit moves the two Python functions that are used for styling into a new module, gdb.styling, there's then a small update in python.c so GDB can find the functions in their new location. The motivation for this change is purely to try and reduce the clutter in the top-level gdb module, and encapsulate related functions into modules. I did ponder documenting these functions as part of the Python API, however, doing so would effectively "fix" the API, and I'm still wondering if there's improvements that could be made, also, the colorize function is only called in some cases now that GDB prefers libsource-highlight, so it's not entirely sure how this would work as part of a user facing API. Still, despite these functions never having been part of a documented API, it is possible that a user out there has overridden these to, in some way, customize how GDB performs styling. Moving the function as I propose in this patch could break things for that user, however, fixing this breakage is trivial, and, as these functions were never documented, I don't think we should be obliged to not break user code that relies on them.
-rw-r--r--gdb/data-directory/Makefile.in1
-rw-r--r--gdb/python/lib/gdb/__init__.py33
-rw-r--r--gdb/python/lib/gdb/styling.py50
-rw-r--r--gdb/python/python.c24
4 files changed, 69 insertions, 39 deletions
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 6e219e0..b606fc6 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -74,6 +74,7 @@ PYTHON_FILE_LIST = \
gdb/frames.py \
gdb/printing.py \
gdb/prompt.py \
+ gdb/styling.py \
gdb/types.py \
gdb/unwinder.py \
gdb/xmethod.py \
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py
index 891f890..5f63bce 100644
--- a/gdb/python/lib/gdb/__init__.py
+++ b/gdb/python/lib/gdb/__init__.py
@@ -248,36 +248,3 @@ def with_parameter(name, value):
yield None
finally:
set_parameter(name, old_value)
-
-
-try:
- from pygments import formatters, lexers, highlight
-
- def colorize(filename, contents):
- # Don't want any errors.
- try:
- lexer = lexers.get_lexer_for_filename(filename, stripnl=False)
- formatter = formatters.TerminalFormatter()
- return highlight(contents, lexer, formatter).encode(
- host_charset(), "backslashreplace"
- )
- except:
- return None
-
- def colorize_disasm(content, gdbarch):
- # Don't want any errors.
- try:
- lexer = lexers.get_lexer_by_name("asm")
- formatter = formatters.TerminalFormatter()
- return highlight(content, lexer, formatter).rstrip().encode()
- except:
- return None
-
-
-except:
-
- def colorize(filename, contents):
- return None
-
- def colorize_disasm(content, gdbarch):
- return None
diff --git a/gdb/python/lib/gdb/styling.py b/gdb/python/lib/gdb/styling.py
new file mode 100644
index 0000000..aef39c6
--- /dev/null
+++ b/gdb/python/lib/gdb/styling.py
@@ -0,0 +1,50 @@
+# Styling related hooks.
+# Copyright (C) 2010-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""Utilities for styling."""
+
+import gdb
+
+try:
+ from pygments import formatters, lexers, highlight
+
+ def colorize(filename, contents):
+ # Don't want any errors.
+ try:
+ lexer = lexers.get_lexer_for_filename(filename, stripnl=False)
+ formatter = formatters.TerminalFormatter()
+ return highlight(contents, lexer, formatter).encode(
+ gdb.host_charset(), "backslashreplace"
+ )
+ except:
+ return None
+
+ def colorize_disasm(content, gdbarch):
+ # Don't want any errors.
+ try:
+ lexer = lexers.get_lexer_by_name("asm")
+ formatter = formatters.TerminalFormatter()
+ return highlight(content, lexer, formatter).rstrip().encode()
+ except:
+ return None
+
+except:
+
+ def colorize(filename, contents):
+ return None
+
+ def colorize_disasm(content, gdbarch):
+ return None
diff --git a/gdb/python/python.c b/gdb/python/python.c
index cc80dc1..79f9826 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -1156,11 +1156,17 @@ gdbpy_colorize (const std::string &filename, const std::string &contents)
gdbpy_enter enter_py;
- if (gdb_python_module == nullptr
- || !PyObject_HasAttrString (gdb_python_module, "colorize"))
+ gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling"));
+ if (module == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ if (!PyObject_HasAttrString (module.get (), "colorize"))
return {};
- gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, "colorize"));
+ gdbpy_ref<> hook (PyObject_GetAttrString (module.get (), "colorize"));
if (hook == nullptr)
{
gdbpy_print_stack ();
@@ -1227,11 +1233,17 @@ gdbpy_colorize_disasm (const std::string &content, gdbarch *gdbarch)
gdbpy_enter enter_py;
- if (gdb_python_module == nullptr
- || !PyObject_HasAttrString (gdb_python_module, "colorize_disasm"))
+ gdbpy_ref<> module (PyImport_ImportModule ("gdb.styling"));
+ if (module == nullptr)
+ {
+ gdbpy_print_stack ();
+ return {};
+ }
+
+ if (!PyObject_HasAttrString (module.get (), "colorize_disasm"))
return {};
- gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module,
+ gdbpy_ref<> hook (PyObject_GetAttrString (module.get (),
"colorize_disasm"));
if (hook == nullptr)
{