From patchwork Thu Feb 23 22:18:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 65551 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8065E385843D for ; Thu, 23 Feb 2023 22:20:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8065E385843D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1677190828; bh=lRZGEChTrm0xhyUeU9+fer6tEcO1qyG4iMb3igEC338=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=JTtn3K9aW6xRjH0nBd8241utjONeoiqD5Eib59FyhrPec5V7mG8OvENDADPRL917k Ot60WQ9h3LKh9XyD15uQATsmVfdb4FGowIsm1e80Rcjg3F2h60OF9Ac+L4OBGyc9mF YOeWNcBzO+QVLnGQlauaq/8AKAeNbijwaxkM1bos= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 9C43A3857C45 for ; Thu, 23 Feb 2023 22:18:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9C43A3857C45 Received: from smarchi-efficios.internal.efficios.com (192-222-180-24.qc.cable.ebox.net [192.222.180.24]) (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 ESMTPSA id 954FB1E9EE; Thu, 23 Feb 2023 17:18:32 -0500 (EST) To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 6/9] gdb: gdbarch*.py, copyright.py: add type annotations Date: Thu, 23 Feb 2023 17:18:27 -0500 Message-Id: <20230223221830.499934-7-simon.marchi@efficios.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223221830.499934-1-simon.marchi@efficios.com> References: <20230223221830.499934-1-simon.marchi@efficios.com> MIME-Version: 1.0 X-Spam-Status: No, score=-3497.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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-Patchwork-Original-From: Simon Marchi via Gdb-patches From: Simon Marchi Reply-To: Simon Marchi Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" Add type annotations to gdbarch*.py to fix all errors shown by pyright. There is one change in copyright.py too, to fix this one: /home/simark/src/binutils-gdb/gdb/gdbarch.py /home/simark/src/binutils-gdb/gdb/gdbarch.py:206:13 - error: Type of "copyright" is partially unknown Type of "copyright" is "(tool: Unknown, description: Unknown) -> str" (reportUnknownMemberType) Change-Id: Ia109b53e267f6e2f5bd79a1288d0d5c9508c9ac4 --- gdb/gdbarch.py | 8 ++-- gdb/gdbarch_components.py | 6 +-- gdb/gdbarch_types.py | 87 ++++++++++++++++++++------------------- gdb/gdbcopyright.py | 2 +- 4 files changed, 52 insertions(+), 51 deletions(-) diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py index d1ac414d0eb3..93b1e8bf84e2 100755 --- a/gdb/gdbarch.py +++ b/gdb/gdbarch.py @@ -25,10 +25,10 @@ import textwrap # `gdbarch_types.components`. import gdbarch_components # noqa: F401 # type: ignore import gdbcopyright -from gdbarch_types import Function, Info, Value, components +from gdbarch_types import Component, Function, Info, Value, components -def indentation(n_columns): +def indentation(n_columns: int): """Return string with tabs and spaces to indent line to N_COLUMNS.""" return "\t" * (n_columns // 8) + " " * (n_columns % 8) @@ -38,12 +38,12 @@ copyright = gdbcopyright.copyright( ) -def info(c): +def info(c: Component): "Filter function to only allow Info components." return type(c) is Info -def not_info(c): +def not_info(c: Component): "Filter function to omit Info components." return type(c) is not Info diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py index fe5c3b3b4bcd..c956586e82c0 100644 --- a/gdb/gdbarch_components.py +++ b/gdb/gdbarch_components.py @@ -165,14 +165,14 @@ Number of bits in an int or unsigned int for the target machine. predefault="4*TARGET_CHAR_BIT", invalid=False, ) - +long_bit_predefault = "4*TARGET_CHAR_BIT" long_bit = Value( comment=""" Number of bits in a long or unsigned long for the target machine. """, type="int", name="long_bit", - predefault="4*TARGET_CHAR_BIT", + predefault=long_bit_predefault, invalid=False, ) @@ -183,7 +183,7 @@ machine. """, type="int", name="long_long_bit", - predefault="2*" + long_bit.predefault, + predefault="2*" + long_bit_predefault, invalid=False, ) diff --git a/gdb/gdbarch_types.py b/gdb/gdbarch_types.py index 95d9b5e65bc5..6b1483c77331 100755 --- a/gdb/gdbarch_types.py +++ b/gdb/gdbarch_types.py @@ -17,8 +17,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from typing import Optional, Union -def join_type_and_name(t, n): + +def join_type_and_name(t: str, n: str): "Combine the type T and the name N into a C declaration." if t.endswith("*") or t.endswith("&"): return t + n @@ -26,30 +28,29 @@ def join_type_and_name(t, n): return t + " " + n -def join_params(params): +def join_params(params: list[tuple[str, str]]): """Given a sequence of (TYPE, NAME) pairs, generate a comma-separated list of declarations.""" - params = [join_type_and_name(p[0], p[1]) for p in params] - return ", ".join(params) + return ", ".join([join_type_and_name(p[0], p[1]) for p in params]) -class _Component: +class Component: "Base class for all components." def __init__( self, - name, - type, - printer, - comment=None, - predicate=False, - predefault=None, - postdefault=None, - invalid=None, - params=None, - param_checks=None, - result_checks=None, - implement=True, + name: str, + type: str, + printer: Optional[str], + comment: Optional[str] = None, + predicate: bool = False, + predefault: Optional[str] = None, + postdefault: Optional[str] = None, + invalid: Optional[Union[bool, str]] = None, + params: Optional[list[tuple[str, str]]] = None, + param_checks: Optional[list[str]] = None, + result_checks: Optional[list[str]] = None, + implement: bool = True, ): self.name = name self.type = type @@ -59,7 +60,7 @@ class _Component: self.predefault = predefault self.postdefault = postdefault self.invalid = invalid - self.params = params + self.params = params or [] self.param_checks = param_checks self.result_checks = result_checks self.implement = implement @@ -81,29 +82,29 @@ class _Component: return predicate -class Info(_Component): +class Info(Component): "An Info component is copied from the gdbarch_info." - def __init__(self, *, name, type, printer=None): + def __init__(self, *, name: str, type: str, printer: Optional[str] = None): super().__init__(name=name, type=type, printer=printer) # This little hack makes the generator a bit simpler. self.predicate = None -class Value(_Component): +class Value(Component): "A Value component is just a data member." def __init__( self, *, - name, - type, - comment=None, - predicate=False, - predefault=None, - postdefault=None, - invalid=None, - printer=None, + name: str, + type: str, + comment: Optional[str] = None, + predicate: bool = False, + predefault: Optional[str] = None, + postdefault: Optional[str] = None, + invalid: Optional[Union[bool, str]] = None, + printer: Optional[str] = None, ): super().__init__( comment=comment, @@ -117,24 +118,24 @@ class Value(_Component): ) -class Function(_Component): +class Function(Component): "A Function component is a function pointer member." def __init__( self, *, - name, - type, - params, - comment=None, - predicate=False, - predefault=None, - postdefault=None, - invalid=None, - printer=None, - param_checks=None, - result_checks=None, - implement=True, + name: str, + type: str, + params: list[tuple[str, str]], + comment: Optional[str] = None, + predicate: bool = False, + predefault: Optional[str] = None, + postdefault: Optional[str] = None, + invalid: Optional[Union[bool, str]] = None, + printer: Optional[str] = None, + param_checks: Optional[list[str]] = None, + result_checks: Optional[list[str]] = None, + implement: bool = True, ): super().__init__( comment=comment, @@ -185,4 +186,4 @@ class Method(Function): # All the components created in gdbarch-components.py. -components: list[_Component] = [] +components: list[Component] = [] diff --git a/gdb/gdbcopyright.py b/gdb/gdbcopyright.py index 9a52bc1d847b..44c88e07cae7 100644 --- a/gdb/gdbcopyright.py +++ b/gdb/gdbcopyright.py @@ -18,7 +18,7 @@ # along with this program. If not, see . -def copyright(tool, description): +def copyright(tool: str, description: str): # Search the tool source itself for the correct copyright years. with open(tool, "r") as f: for line in f: