[python] Fix in_scope convenience function.
Thiago Jung Bauermann
bauerman@br.ibm.com
Tue Dec 16 14:34:00 GMT 2008
Hi,
When reworking gdb.Symbol, I forgot to convert some references in
in_scope.py. I also took the opportunity to implement this suggestion
from Tromey:
> FWIW you could also make it a varargs-like function:
>
> def invoke (self, *vars):
> ...
>
> Then users would call:
>
> $in_scope ("a", "b", "c")
>
> IMO this is a bit more natural.
Committed.
--
[]'s
Thiago Jung Bauermann
IBM Linux Technology Center
2008-12-16 Thiago Jung Bauermann <bauerman@br.ibm.com>
* python/lib/gdb/function/in_scope.py: Fix use of gdb.Symbol
attributes. Change to receive variable number of arguments.
diff --git a/gdb/python/lib/gdb/function/in_scope.py b/gdb/python/lib/gdb/function/in_scope.py
index e9e589b..9d32ad4 100644
--- a/gdb/python/lib/gdb/function/in_scope.py
+++ b/gdb/python/lib/gdb/function/in_scope.py
@@ -18,26 +18,30 @@
import gdb
class InScope (gdb.Function):
- """Check if all the given variables or macros are in scope.
-Receives as argument a list of names separated by whitespace."""
+ """Return True if all the given variables or macros are in scope.
+Takes one argument for each variable name to be checked."""
def __init__ (self):
super (InScope, self).__init__ ("in_scope")
- def invoke (self, var):
- vars = set (var.string().split())
+ def invoke (self, *vars):
+ if len (vars) == 0:
+ raise TypeError, "in_scope takes at least one argument"
+
+ # gdb.Value isn't hashable so it can't be put in a map.
+ # Convert to string first.
+ wanted = set (map (lambda x: x.string (), vars))
found = set ()
block = gdb.block_for_pc (gdb.selected_frame ().pc ())
while block:
for sym in block:
- if (sym.is_argument () or sym.is_constant ()
- or sym.is_function () or sym.is_variable ()):
- sym_name = sym.name
- if sym_name in vars:
- found.add (sym_name)
+ if (sym.is_argument or sym.is_constant
+ or sym.is_function or sym.is_variable):
+ if sym.name in wanted:
+ found.add (sym.name)
block = block.superblock
- return vars == found
+ return wanted == found
InScope ()
More information about the Archer
mailing list