From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 605F8385781E for ; Tue, 26 Oct 2021 09:38:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 605F8385781E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-wr1-x433.google.com with SMTP id p14so12052294wrd.10 for ; Tue, 26 Oct 2021 02:38:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6t9+Obt0cv3mZh5+HEkoyCOY5YkEoTyMi8mECqwgxFw=; b=VclntddEelyM/Scmp7YEJm+2ADeEdIcxgK8kJQSFuSEyd/mV88Eh1/ebo14KLjjdeS IJ6MWtQW+n6Pf6DtAWqXsMNP1R8LePH2vvkVW4aIiiqi/YIAEoZLq3kTKPtq9yZEtUgK AMMY9s3zVMWkU415AbZai7mwi+4F8JQ0d9WwzVKxVfy7IphcCBVV1pJdp7kg7TrgZgVX zP3znh4fLRAbytx7Wkch4cJqPn8MNeYQidA/tCYZOj/hCiMj8hnB8XF1JevzcPaoTzUe 6cs0hLOcdQXEVonnrtAGjKcghDkz1RCOYIdBrOYYjEGNCJ6knNoaFqkvP8rm+eAcjCxR mpmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6t9+Obt0cv3mZh5+HEkoyCOY5YkEoTyMi8mECqwgxFw=; b=G+UTa+9ejrenKuVwUeBzNV3GAy5fwHnhg1QwBKrgCtFQxkQxIfzp+Gib62xpO5XAxs 52mUI+gJ00R8JWstycxnnLxelIpimOp2OxxpSgvFVOmQOiozG8OfYkXZlzcu8g2RrURP BtclHe5k0qGoDfG8G0ATjKeER9OP9gLCnYExaMPHepHZs7o9kBOS1RsjUeA1fOSszEDb 11kaGwkbGnFUCzDKeggboPx/WlJ+l05FH9O4/w61jPWt2J0qmtNFIBxz6ALQvil49t6r a7xpQIxvj011d2dwQFbZ3BFvRztX9RbhoKGzTg8dHwNQY3b9yfje2rVjWj8PhFqGLDDq JpOQ== X-Gm-Message-State: AOAM531xlVcbTW/NYloi11k0t+Oo6/k48aTRfA0404RLjfXciJn5kF7f IHCPNQcexkAgrHr6MSNniQill+MJGKPwhw== X-Google-Smtp-Source: ABdhPJwYwF/dcImFy+nYXTxanR0INDYNEyS5sSqZclQ+Gz6FmaWhg8rIM50BMCg9oNvMABSYaXOJHQ== X-Received: by 2002:a5d:67ca:: with SMTP id n10mr12539166wrw.88.1635241086254; Tue, 26 Oct 2021 02:38:06 -0700 (PDT) Received: from localhost (host86-180-62-146.range86-180.btcentralplus.com. [86.180.62.146]) by smtp.gmail.com with ESMTPSA id k36sm88740wms.21.2021.10.26.02.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 02:38:05 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Subject: [PATCH 4/4] gdb/python: move styling support to gdb.styling Date: Tue, 26 Oct 2021 10:37:59 +0100 Message-Id: <3bdf0af2d6164825ced046689832638c27d90c7f.1635241044.git.andrew.burgess@embecosm.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Oct 2021 09:38:09 -0000 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. --- gdb/data-directory/Makefile.in | 1 + gdb/python/lib/gdb/__init__.py | 29 -------------------- gdb/python/lib/gdb/styling.py | 48 ++++++++++++++++++++++++++++++++++ gdb/python/python.c | 24 ++++++++++++----- 4 files changed, 67 insertions(+), 35 deletions(-) create mode 100644 gdb/python/lib/gdb/styling.py diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in index 888325f974e..ab0733e29dc 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 6ab797c8c5e..8d63ae67fe8 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -230,32 +230,3 @@ def find_pc_line(pc): Return the gdb.Symtab_and_line object corresponding to the pc value.""" return current_progspace().find_pc_line(pc) - -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) - 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() - 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 00000000000..d03c0c7252a --- /dev/null +++ b/gdb/python/lib/gdb/styling.py @@ -0,0 +1,48 @@ +# Styling related hooks. +# Copyright (C) 2010-2021 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 . + +"""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) + 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() + 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 1bf32c36329..14f66554867 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1127,11 +1127,17 @@ gdbpy_colorize (const std::string &filename, const std::string &contents) gdbpy_enter enter_py (get_current_arch (), current_language); - 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 (); @@ -1195,11 +1201,17 @@ gdbpy_colorize_disasm (const std::string &content, gdbarch *gdbarch) gdbpy_enter enter_py (get_current_arch (), current_language); - 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) { -- 2.25.4