From 116e3492f2945d46db44d921f0b5eb03c58d5c93 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sun, 26 Feb 2023 20:14:00 -0500 Subject: [PATCH] gdb: gdbarch*.py, copyright.py: add type annotations 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 Reviewed-By: Tom Tromey Reviewed-By: Andrew Burgess --- gdb/gdbarch.py | 8 ++-- gdb/gdbarch_components.py | 5 ++- gdb/gdbarch_types.py | 85 ++++++++++++++++++++------------------- gdb/gdbcopyright.py | 2 +- 4 files changed, 51 insertions(+), 49 deletions(-) diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py index d1ac414d0eb..93b1e8bf84e 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 fe5c3b3b4bc..caa65c334ec 100644 --- a/gdb/gdbarch_components.py +++ b/gdb/gdbarch_components.py @@ -166,13 +166,14 @@ Number of bits in an int or unsigned int for the target machine. 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 +184,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 3a3cbbf8891..988da80dd7c 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 List, Optional, Tuple, 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=None, - 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] = None, + 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,24 +82,24 @@ class _Component: return predicate -class Info(_Component): +class Info(Component): "An Info component is copied from the gdbarch_info." -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, @@ -112,24 +113,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, @@ -180,4 +181,4 @@ class Method(Function): # All the components created in gdbarch-components.py. -components = [] +components: List[Component] = [] diff --git a/gdb/gdbcopyright.py b/gdb/gdbcopyright.py index e87ce0d4ad2..4e27356556b 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: -- 2.30.2