aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2012-08-06 18:44:45 +0000
committerTom Tromey <tromey@redhat.com>2012-08-06 18:44:45 +0000
commit2c12abee48e5615dd8573bbafd1b8a167967147d (patch)
treebbe7be1714a31fc407cca93a305631fcd3aec785
parent4979d7f0a6644db8a512fdf29a6a9df8d258969c (diff)
downloadgdb-2c12abee48e5615dd8573bbafd1b8a167967147d.zip
gdb-2c12abee48e5615dd8573bbafd1b8a167967147d.tar.gz
gdb-2c12abee48e5615dd8573bbafd1b8a167967147d.tar.bz2
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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/testsuite/ChangeLog10
-rw-r--r--gdb/testsuite/gdb.python/py-mi.exp4
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint.c5
-rw-r--r--gdb/testsuite/gdb.python/py-prettyprint.py15
-rw-r--r--gdb/varobj.c3
6 files changed, 40 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e36f729..e2ff0a9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
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:
* cli/cli-cmds.c (list_command): Filter 'sals_end'.
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index debce65..3f2e496 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp
index a792e44..e7034a1 100644
--- a/gdb/testsuite/gdb.python/py-mi.exp
+++ b/gdb/testsuite/gdb.python/py-mi.exp
@@ -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" \
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.c b/gdb/testsuite/gdb.python/py-prettyprint.c
index 1ff9e05..b1a12b1 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.c
+++ b/gdb/testsuite/gdb.python/py-prettyprint.c
@@ -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;
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.py b/gdb/testsuite/gdb.python/py-prettyprint.py
index b02b90f..6e960e6 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.py
+++ b/gdb/testsuite/gdb.python/py-prettyprint.py
@@ -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
diff --git a/gdb/varobj.c b/gdb/varobj.c
index c345c80..6699699 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -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)