PR python/14386:

* varobj.c (update_dynamic_varobj_children): Don't call
	PyIter_Check.
gdb/testsuite
	* gdb.python/py-mi.exp: Add test for printer whose children
	are a list.
	* gdb.python/py-prettyprint.c (struct children_as_list): New.
	(main): New variable children_as_list.
	* gdb.python/py-prettyprint.py (class pp_children_as_list):
	New.
	(register_pretty_printers): Register new printer.
This commit is contained in:
Tom Tromey 2012-08-06 18:44:45 +00:00
parent 4979d7f0a6
commit 2c12abee48
6 changed files with 40 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2012-08-06 Tom Tromey <tromey@redhat.com>
PR python/14386:
* varobj.c (update_dynamic_varobj_children): Don't call
PyIter_Check.
2012-08-06 Tom Tromey <tromey@redhat.com>
PR cli/14392:

View File

@ -1,3 +1,13 @@
2012-08-06 Tom Tromey <tromey@redhat.com>
* gdb.python/py-mi.exp: Add test for printer whose children
are a list.
* gdb.python/py-prettyprint.c (struct children_as_list): New.
(main): New variable children_as_list.
* gdb.python/py-prettyprint.py (class pp_children_as_list):
New.
(register_pretty_printers): Register new printer.
2012-08-03 Edjunior Machado <emachado@linux.vnet.ibm.com>
* gdb.base/valgrind-infcall.exp: Expect leading `.' on ppc64's

View File

@ -289,6 +289,10 @@ mi_gdb_test "-var-evaluate-expression me" \
"\\^done,value=\"<error reading variable: Cannot access memory.>.*\"" \
"evaluate me varobj"
# Regression test for python/14836.
mi_create_dynamic_varobj children_as_list children_as_list \
"printer whose children are returned as a list"
# C++ MI tests
gdb_exit
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-cxx" \

View File

@ -48,6 +48,10 @@ struct hint_error {
int x;
};
struct children_as_list {
int x;
};
#ifdef __cplusplus
struct S : public s {
int zs;
@ -252,6 +256,7 @@ main ()
struct ns ns, ns2;
struct lazystring estring, estring2;
struct hint_error hint_error;
struct children_as_list children_as_list;
nstype.elements = narray;
nstype.len = 0;

View File

@ -174,6 +174,18 @@ class pp_hint_error:
def display_hint (self):
raise Exception("hint failed")
class pp_children_as_list:
"Throw error from display_hint"
def __init__(self, val):
self.val = val
def to_string(self):
return 'children_as_list_val'
def children (self):
return [('one', 1)]
class pp_outer:
"Print struct outer"
@ -282,6 +294,9 @@ def register_pretty_printers ():
pretty_printers_dict[re.compile ('^struct hint_error$')] = pp_hint_error
pretty_printers_dict[re.compile ('^hint_error$')] = pp_hint_error
pretty_printers_dict[re.compile ('^struct children_as_list$')] = pp_children_as_list
pretty_printers_dict[re.compile ('^children_as_list$')] = pp_children_as_list
pretty_printers_dict[re.compile ('^memory_error$')] = MemoryErrorString
pretty_printers_dict[re.compile ('^eval_type_s$')] = pp_eval_type

View File

@ -1114,9 +1114,6 @@ update_dynamic_varobj_children (struct varobj *var,
make_cleanup_py_decref (children);
if (!PyIter_Check (children))
error (_("Returned value is not iterable"));
Py_XDECREF (var->child_iter);
var->child_iter = PyObject_GetIter (children);
if (!var->child_iter)