From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id eAUEEDGY3WEMbQAAWB0awg (envelope-from ) for ; Tue, 11 Jan 2022 09:46:09 -0500 Received: by simark.ca (Postfix, from userid 112) id 3EC0E1EE22; Tue, 11 Jan 2022 09:46:09 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 551A61EA69 for ; Tue, 11 Jan 2022 09:46:08 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9C94B38A941E for ; Tue, 11 Jan 2022 14:46:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9C94B38A941E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1641912367; bh=+qNCLIgP7eFUQv/TzdXyAhLxnlv6mQV4PF5sMKs3y3s=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=cXAypG6YOFW7tDK34Eq2x/8KaVQhJoc4lWVUBMycBS4ahxWZDTh7RGzgKZ9SNMY47 o2twF6Jy6k9pmuDKLm0Pr3c7lHcRBF0vfnkBn25l/7269n7uHtPPHNGjU1cTS19fsC 1qoa12gO7/mvpgJqMUs7EdeZivf9zyI5a8haX8J8= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 77F8938AAC1F for ; Tue, 11 Jan 2022 14:31:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 77F8938AAC1F Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-357-UldLNhyNPiKNiDkFUleSJg-1; Tue, 11 Jan 2022 09:31:14 -0500 X-MC-Unique: UldLNhyNPiKNiDkFUleSJg-1 Received: by mail-wr1-f71.google.com with SMTP id k14-20020adfb34e000000b001a5d060e1edso3342741wrd.7 for ; Tue, 11 Jan 2022 06:31:14 -0800 (PST) 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=+qNCLIgP7eFUQv/TzdXyAhLxnlv6mQV4PF5sMKs3y3s=; b=oFxnQcIvy2OlocN1s3dH2+4gtQm5HsGBqVPnfXtpyq6JH/HZa72+4Es0Aqr7vUCRJa W/i+KDdtlUi7DCs5mmYe9KY+iozu/s7z/XJ5lNrRHZQwGPrZi/mvZi716Hdyeb1chwTe sxfoeWqPxuOAC2TD+p1suY2yzVcgSJBeXfzI14Hxxh31BIY6Ayo7X8iHaHRtN5ntHtl1 GOA/+e8iQocjZ/hDbT9Fdy5ylbyEr17gWvgDrklDx9xapGqOBLrWjWXjDW0n0JznkMWr QBGxZ02+mkFHDRBxUUS+m3Qc/EOX6biiXAnS3QaYlbzMHLw7GPNh6jUlPFn9anIeio0B fgnw== X-Gm-Message-State: AOAM533t3arpkLmpxvsRhZbS4AWX+gJoglLRYx9qpE7Bt7CzRn8Tv/Dl xe+8IB1/iH7TUJD60BTZCfBAX3X7azrSpZ5wd7Mma+tFIDnI3EoNEVHA/XPOa+e1g9rCTtobJ+8 ScOfDpcPazGiAR9s4akfPOMvynhg1cHVws5LBBnXxLJ1pg4K0Y76aMroYKg7d3US09nR9kDd+xQ == X-Received: by 2002:adf:a1d0:: with SMTP id v16mr3939606wrv.622.1641911471912; Tue, 11 Jan 2022 06:31:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJwo1lSoOzVLvnXoBTrOttnNU3+NDYme76PTmpM7iexpo2wzWcPDAFiggmpVK2TKMt7Zq5M+qQ== X-Received: by 2002:adf:a1d0:: with SMTP id v16mr3939574wrv.622.1641911471373; Tue, 11 Jan 2022 06:31:11 -0800 (PST) Received: from localhost (host86-188-49-82.range86-188.btcentralplus.com. [86.188.49.82]) by smtp.gmail.com with ESMTPSA id p11sm11289706wru.99.2022.01.11.06.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jan 2022 06:31:10 -0800 (PST) To: gdb-patches@sourceware.org Subject: [PATCHv4 2/2] gdb/python: move styling support to gdb.styling Date: Tue, 11 Jan 2022 14:31:01 +0000 Message-Id: X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" 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: , From: Andrew Burgess via Gdb-patches Reply-To: Andrew Burgess Cc: Andrew Burgess Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" From: Andrew Burgess 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 | 31 --------------------- gdb/python/lib/gdb/styling.py | 49 ++++++++++++++++++++++++++++++++++ gdb/python/python.c | 24 ++++++++++++----- 4 files changed, 68 insertions(+), 37 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 6e219e09efc..b606fc654b5 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 8cbf1c0791d..880a2c093d2 100644 --- a/gdb/python/lib/gdb/__init__.py +++ b/gdb/python/lib/gdb/__init__.py @@ -229,34 +229,3 @@ def find_pc_line(pc): """find_pc_line (pc) -> Symtab_and_line. 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..2e13913d870 --- /dev/null +++ b/gdb/python/lib/gdb/styling.py @@ -0,0 +1,49 @@ +# 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 . + +"""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 0d1a1256e9a..810377b64a0 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1131,11 +1131,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 (); @@ -1199,11 +1205,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