gdb: fix some flake8 F824 warnings

flake8 7.2.0 appears to have this new warning:

    F824: global name / nonlocal name is unused: name is never assigned in scope

It points out a few places in our code base where "global" is not
necessary, fix them.

Change-Id: Ia6fb08686977559726fefe2a5bb95d8dcb298bb0
Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
Simon Marchi
2025-04-24 14:48:32 -04:00
parent 5363deffcf
commit 8ecfa4e5f8
12 changed files with 2 additions and 36 deletions

View File

@@ -96,5 +96,4 @@ def pre_command_loop():
# These are handy for bug reports. # These are handy for bug reports.
startup.exec_and_log("show version") startup.exec_and_log("show version")
startup.exec_and_log("show configuration") startup.exec_and_log("show configuration")
global server
startup.start_dap(server.main_loop) startup.start_dap(server.main_loop)

View File

@@ -51,7 +51,6 @@ def suppress_new_breakpoint_event():
@in_gdb_thread @in_gdb_thread
def _bp_modified(event): def _bp_modified(event):
global _suppress_bp
if not _suppress_bp: if not _suppress_bp:
send_event( send_event(
"breakpoint", "breakpoint",
@@ -64,7 +63,6 @@ def _bp_modified(event):
@in_gdb_thread @in_gdb_thread
def _bp_created(event): def _bp_created(event):
global _suppress_bp
if not _suppress_bp: if not _suppress_bp:
send_event( send_event(
"breakpoint", "breakpoint",
@@ -77,7 +75,6 @@ def _bp_created(event):
@in_gdb_thread @in_gdb_thread
def _bp_deleted(event): def _bp_deleted(event):
global _suppress_bp
if not _suppress_bp: if not _suppress_bp:
send_event( send_event(
"breakpoint", "breakpoint",
@@ -151,7 +148,6 @@ def _remove_entries(table, *names):
# the breakpoint. # the breakpoint.
@in_gdb_thread @in_gdb_thread
def _set_breakpoints_callback(kind, specs, creator): def _set_breakpoints_callback(kind, specs, creator):
global breakpoint_map
# Try to reuse existing breakpoints if possible. # Try to reuse existing breakpoints if possible.
if kind in breakpoint_map: if kind in breakpoint_map:
saved_map = breakpoint_map[kind] saved_map = breakpoint_map[kind]

View File

@@ -238,7 +238,6 @@ def _on_stop(event):
): ):
obj["reason"] = "pause" obj["reason"] = "pause"
else: else:
global stop_reason_map
obj["reason"] = stop_reason_map[event.details["reason"]] obj["reason"] = stop_reason_map[event.details["reason"]]
_expected_pause = False _expected_pause = False
send_event_maybe_later("stopped", obj) send_event_maybe_later("stopped", obj)

View File

@@ -53,12 +53,11 @@ gdb.events.cont.connect(_clear_frame_ids)
@in_gdb_thread @in_gdb_thread
def frame_for_id(id): def frame_for_id(id):
"""Given a frame identifier ID, return the corresponding frame.""" """Given a frame identifier ID, return the corresponding frame."""
global thread_ids
if id in thread_ids: if id in thread_ids:
thread_id = thread_ids[id] thread_id = thread_ids[id]
if thread_id != gdb.selected_thread().global_num: if thread_id != gdb.selected_thread().global_num:
set_thread(thread_id) set_thread(thread_id)
global _all_frames
return _all_frames[id] return _all_frames[id]
@@ -103,10 +102,8 @@ def _frame_id_generator():
# Helper function to assign an ID to a frame. # Helper function to assign an ID to a frame.
def get_id(frame): def get_id(frame):
global _all_frames
num = len(_all_frames) num = len(_all_frames)
_all_frames.append(frame) _all_frames.append(frame)
global thread_ids
thread_ids[num] = gdb.selected_thread().global_num thread_ids[num] = gdb.selected_thread().global_num
return num return num
@@ -128,7 +125,6 @@ def _frame_id_generator():
@in_gdb_thread @in_gdb_thread
def _get_frame_iterator(): def _get_frame_iterator():
thread_id = gdb.selected_thread().global_num thread_id = gdb.selected_thread().global_num
global _iter_map
if thread_id not in _iter_map: if thread_id not in _iter_map:
_iter_map[thread_id] = _MemoizingIterator(_frame_id_generator()) _iter_map[thread_id] = _MemoizingIterator(_frame_id_generator())
return _iter_map[thread_id] return _iter_map[thread_id]

View File

@@ -78,7 +78,6 @@ def get_global_scope(frame):
except RuntimeError: except RuntimeError:
return None return None
global _id_to_scope
block = block.static_block block = block.static_block
if block in _id_to_scope: if block in _id_to_scope:
return _id_to_scope[block] return _id_to_scope[block]

View File

@@ -164,7 +164,6 @@ def attach(
@request("configurationDone", on_dap_thread=True) @request("configurationDone", on_dap_thread=True)
def config_done(**args): def config_done(**args):
# Handle the launch or attach. # Handle the launch or attach.
global _launch_or_attach_promise
if _launch_or_attach_promise is None: if _launch_or_attach_promise is None:
raise DAPException("launch or attach not specified") raise DAPException("launch or attach not specified")
# Resolve the launch or attach, but only after the # Resolve the launch or attach, but only after the

View File

@@ -120,7 +120,6 @@ class _FinishScopeReference(_ScopeReference):
def fetch_one_child(self, idx): def fetch_one_child(self, idx):
assert idx == 0 assert idx == 0
global _last_return_value
return ("(return)", _last_return_value) return ("(return)", _last_return_value)
@@ -145,8 +144,6 @@ class _RegisterReference(_ScopeReference):
@request("scopes") @request("scopes")
def scopes(*, frameId: int, **extra): def scopes(*, frameId: int, **extra):
global _last_return_value
global frame_to_scope
if frameId in frame_to_scope: if frameId in frame_to_scope:
scopes = frame_to_scope[frameId] scopes = frame_to_scope[frameId]
else: else:

View File

@@ -307,7 +307,6 @@ class Server:
args = {} args = {}
def fn(): def fn():
global _commands
return _commands[params["command"]](**args) return _commands[params["command"]](**args)
self.invoke_request(req, result, fn) self.invoke_request(req, result, fn)
@@ -440,7 +439,6 @@ def send_event(event, body=None):
"""Send an event to the DAP client. """Send an event to the DAP client.
EVENT is the name of the event, a string. EVENT is the name of the event, a string.
BODY is the body of the event, an arbitrary object.""" BODY is the body of the event, an arbitrary object."""
global _server
_server.send_event(event, body) _server.send_event(event, body)
@@ -449,13 +447,11 @@ def send_event_maybe_later(event, body=None):
within the dap thread and that request is configured to delay the event, within the dap thread and that request is configured to delay the event,
wait until the response has been sent until the event is sent back to wait until the response has been sent until the event is sent back to
the client.""" the client."""
global _server
_server.send_event_maybe_later(event, body) _server.send_event_maybe_later(event, body)
def call_function_later(fn): def call_function_later(fn):
"""Call FN later -- after the current request's response has been sent.""" """Call FN later -- after the current request's response has been sent."""
global _server
_server.call_function_later(fn) _server.call_function_later(fn)
@@ -533,7 +529,6 @@ def request(
if response: if response:
if defer_stop_events: if defer_stop_events:
global _server
if _server is not None: if _server is not None:
with _server.delayed_events_lock: with _server.delayed_events_lock:
_server.defer_stop_events = True _server.defer_stop_events = True
@@ -555,7 +550,6 @@ def request(
if expect_stopped: if expect_stopped:
cmd = _check_not_running(cmd) cmd = _check_not_running(cmd)
global _commands
assert name not in _commands assert name not in _commands
_commands[name] = cmd _commands[name] = cmd
return cmd return cmd
@@ -568,7 +562,6 @@ def capability(name, value=True):
the DAP capability NAME.""" the DAP capability NAME."""
def wrap(func): def wrap(func):
global _capabilities
assert name not in _capabilities assert name not in _capabilities
_capabilities[name] = value _capabilities[name] = value
return func return func
@@ -581,7 +574,6 @@ def client_bool_capability(name, default=False):
If the capability was not specified, or did not have boolean type, If the capability was not specified, or did not have boolean type,
DEFAULT is returned. DEFAULT defaults to False.""" DEFAULT is returned. DEFAULT defaults to False."""
global _server
if name in _server.config and isinstance(_server.config[name], bool): if name in _server.config and isinstance(_server.config[name], bool):
return _server.config[name] return _server.config[name]
return default return default
@@ -589,7 +581,6 @@ def client_bool_capability(name, default=False):
@request("initialize", on_dap_thread=True) @request("initialize", on_dap_thread=True)
def initialize(**args): def initialize(**args):
global _server, _capabilities
_server.config = args _server.config = args
_server.send_event_later("initialized") _server.send_event_later("initialized")
global _lines_start_at_1 global _lines_start_at_1
@@ -705,7 +696,6 @@ def export_line(line: int) -> int:
"""Rewrite LINE according to client capability. """Rewrite LINE according to client capability.
This applies the linesStartAt1 capability as needed, This applies the linesStartAt1 capability as needed,
when sending a line number from gdb to the client.""" when sending a line number from gdb to the client."""
global _lines_start_at_1
if not _lines_start_at_1: if not _lines_start_at_1:
# In gdb, lines start at 1, so we only need to change this if # In gdb, lines start at 1, so we only need to change this if
# the client starts at 0. # the client starts at 0.
@@ -717,7 +707,6 @@ def import_line(line: int) -> int:
"""Rewrite LINE according to client capability. """Rewrite LINE according to client capability.
This applies the linesStartAt1 capability as needed, This applies the linesStartAt1 capability as needed,
when the client sends a line number to gdb.""" when the client sends a line number to gdb."""
global _lines_start_at_1
if not _lines_start_at_1: if not _lines_start_at_1:
# In gdb, lines start at 1, so we only need to change this if # In gdb, lines start at 1, so we only need to change this if
# the client starts at 0. # the client starts at 0.

View File

@@ -37,7 +37,6 @@ def make_source(fullname, filename=None):
FILENAME is the base name; if None (the default), then it is FILENAME is the base name; if None (the default), then it is
computed from FULLNAME. computed from FULLNAME.
""" """
global _source_map
if fullname in _source_map: if fullname in _source_map:
result = _source_map[fullname] result = _source_map[fullname]
else: else:
@@ -53,7 +52,6 @@ def make_source(fullname, filename=None):
global _next_source global _next_source
result["sourceReference"] = _next_source result["sourceReference"] = _next_source
global _id_map
_id_map[_next_source] = result _id_map[_next_source] = result
_next_source += 1 _next_source += 1
@@ -71,7 +69,6 @@ def decode_source(source):
if "sourceReference" not in source: if "sourceReference" not in source:
raise DAPException("either 'path' or 'sourceReference' must appear in Source") raise DAPException("either 'path' or 'sourceReference' must appear in Source")
ref = source["sourceReference"] ref = source["sourceReference"]
global _id_map
if ref not in _id_map: if ref not in _id_map:
raise DAPException("no sourceReference " + str(ref)) raise DAPException("no sourceReference " + str(ref))
return _id_map[ref]["path"] return _id_map[ref]["path"]

View File

@@ -69,7 +69,6 @@ class BaseReference(ABC):
NAME is a string or None. None means this does not have a NAME is a string or None. None means this does not have a
name, e.g., the result of expression evaluation.""" name, e.g., the result of expression evaluation."""
global all_variables
all_variables.append(self) all_variables.append(self)
self._ref = len(all_variables) self._ref = len(all_variables)
self._name = name self._name = name
@@ -267,7 +266,7 @@ class VariableReference(BaseReference):
@in_gdb_thread @in_gdb_thread
def find_variable(ref): def find_variable(ref):
"""Given a variable reference, return the corresponding variable object.""" """Given a variable reference, return the corresponding variable object."""
global all_variables
# Variable references are offset by 1. # Variable references are offset by 1.
ref = ref - 1 ref = ref - 1
if ref < 0 or ref > len(all_variables): if ref < 0 or ref > len(all_variables):

View File

@@ -80,7 +80,6 @@ try:
# ignore. # ignore.
pass pass
global _asm_lexers
if lexer_type not in _asm_lexers: if lexer_type not in _asm_lexers:
_asm_lexers[lexer_type] = lexers.get_lexer_by_name(lexer_type) _asm_lexers[lexer_type] = lexers.get_lexer_by_name(lexer_type)
_asm_lexers[lexer_type].add_filter(HandleNasmComments()) _asm_lexers[lexer_type].add_filter(HandleNasmComments())

View File

@@ -62,7 +62,6 @@ sum_matcher = re.compile("^(.?(PASS|FAIL)): (.*)$")
def parse_sum_line(line: str, dic: dict[str, set[str]]): def parse_sum_line(line: str, dic: dict[str, set[str]]):
"""Parse a single LINE from a sumfile, and store the results in the """Parse a single LINE from a sumfile, and store the results in the
dictionary referenced by DIC.""" dictionary referenced by DIC."""
global sum_matcher
line = line.rstrip() line = line.rstrip()
m = re.match(sum_matcher, line) m = re.match(sum_matcher, line)
@@ -96,7 +95,6 @@ def read_sum_files(files: list[str]):
"""Read the sumfiles (passed as a list in the FILES variable), and """Read the sumfiles (passed as a list in the FILES variable), and
process each one, filling the FILES_AND_TESTS global dictionary with process each one, filling the FILES_AND_TESTS global dictionary with
information about them.""" information about them."""
global files_and_tests
for x in files: for x in files:
with open(x, "r") as f: with open(x, "r") as f:
@@ -115,7 +113,6 @@ def identify_racy_tests():
This function does that for all sets (PASS, FAIL, KPASS, KFAIL, etc.), This function does that for all sets (PASS, FAIL, KPASS, KFAIL, etc.),
and then print a sorted list (without duplicates) of all the tests and then print a sorted list (without duplicates) of all the tests
that were found to be racy.""" that were found to be racy."""
global files_and_tests
# First, construct two dictionaries that will hold one set of # First, construct two dictionaries that will hold one set of
# testcases for each state (PASS, FAIL, etc.). # testcases for each state (PASS, FAIL, etc.).