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 <tom@tromey.com>
Reviewed-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
Simon Marchi 2023-02-26 20:14:00 -05:00 committed by Simon Marchi
parent 05e4e89373
commit 116e3492f2
4 changed files with 51 additions and 49 deletions

View File

@ -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

View File

@ -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,
)

View File

@ -17,8 +17,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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] = []

View File

@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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: