Fix oversights in frame decorator code

The frame decorator "FrameVars" code misses a couple of cases,
discovered when working on related DAP changes.

First, fetch_frame_locals does not stop when reaching a function
boundary.  This means it would return locals from any enclosing
functions.

Second, fetch_frame_args assumes that all arguments are at the
outermost scope, but this doesn't seem to be required by gdb.
This commit is contained in:
Tom Tromey
2023-06-14 08:31:21 -06:00
parent 70ef91c5aa
commit 4a1311ba0c

View File

@@ -269,6 +269,11 @@ class FrameVars(object):
if self.fetch_b(sym):
lvars.append(SymValueWrapper(sym, None))
# Stop when the function itself is seen, to avoid showing
# variables from outer functions in a nested function.
if block.function is not None:
break
block = block.superblock
return lvars
@@ -286,14 +291,18 @@ class FrameVars(object):
block = None
while block is not None:
if block.function is not None:
if block.is_global or block.is_static:
break
block = block.superblock
if block is not None:
for sym in block:
if not sym.is_argument:
continue
args.append(SymValueWrapper(sym, None))
# Stop when the function itself is seen, to avoid showing
# variables from outer functions in a nested function.
if block.function is not None:
break
block = block.superblock
return args