From patchwork Thu May 25 17:51:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Linss X-Patchwork-Id: 20581 Received: (qmail 92960 invoked by alias); 25 May 2017 17:51:32 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 92948 invoked by uid 89); 25 May 2017 17:51:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=revised X-HELO: smtp.elemental.software Received: from smtp.elemental.software (HELO smtp.elemental.software) (45.33.60.119) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 25 May 2017 17:51:26 +0000 Received: from [IPv6:2001:470:879a::d847:c47a:9f25:c1a] (unknown [IPv6:2001:470:879a:0:d847:c47a:9f25:c1a]) (Authenticated sender: peter@elemental.software) by smtp.elemental.software (Postfix) with ESMTPSA id 7DD0226609; Thu, 25 May 2017 10:51:28 -0700 (PDT) Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Subject: Re: [PATCH] Fix usage of to_string() for pretty-printers with children From: Peter Linss In-Reply-To: <83shjtkmo8.fsf@gnu.org> Date: Thu, 25 May 2017 10:51:26 -0700 Cc: gdb-patches@sourceware.org Message-Id: <33B79B83-FB3D-4385-8B13-3BC10F8C58D1@elemental.software> References: <83shjtkmo8.fsf@gnu.org> To: Eli Zaretskii > On May 25, 2017, at 7:59 AM, Eli Zaretskii wrote: > >> From: Peter Linss >> Date: Wed, 24 May 2017 19:33:41 -0700 >> >> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo >> index 9fb70f6d2a..05e5b868ed 100644 >> --- a/gdb/doc/gdb.texinfo >> +++ b/gdb/doc/gdb.texinfo >> @@ -29444,8 +29444,9 @@ reliable for a dynamic varobj. Instead, you must examine the >> >> @item value >> The varobj's scalar value. For a varobj whose type is some sort of >> -aggregate (e.g., a @code{struct}), or for a dynamic varobj, this value >> -will not be interesting. >> +aggregate (e.g., a @code{struct}) this value will not be interesting. > ^ > Please add back the comma removed here. > > The documentation part is approved with this gotcha fixed. > > Thanks. Revised patch with comma restored (not sure if you want a new email thread for small patch revisions like this): — diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9fb70f6d2a..ff2992e433 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -29444,8 +29444,9 @@ reliable for a dynamic varobj. Instead, you must examine the @item value The varobj's scalar value. For a varobj whose type is some sort of -aggregate (e.g., a @code{struct}), or for a dynamic varobj, this value -will not be interesting. +aggregate (e.g., a @code{struct}), this value will not be interesting. +For a dynamic varobj, this value comes from the Python pretty-printer +object's @code{to_string} method, if present. @xref{Pretty Printing API}. @item type The varobj's type. This is a string representation of the type, as diff --git a/gdb/varobj.c b/gdb/varobj.c index 7bd549d45c..925c6318a8 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -686,21 +686,6 @@ install_dynamic_child (struct varobj *var, } } -#if HAVE_PYTHON - -static int -dynamic_varobj_has_child_method (const struct varobj *var) -{ - PyObject *printer = var->dynamic->pretty_printer; - - if (!gdb_python_initialized) - return 0; - - gdbpy_enter_varobj enter_py (var); - return PyObject_HasAttr (printer, gdbpy_children_cst); -} -#endif - /* A factory for creating dynamic varobj's iterators. Returns an iterator object suitable for iterating over VAR's children. */ @@ -2420,11 +2405,6 @@ varobj_value_get_print_value (struct value *value, if (value_formatter) { - /* First check to see if we have any children at all. If so, - we simply return {...}. */ - if (dynamic_varobj_has_child_method (var)) - return "{...}"; - if (PyObject_HasAttr (value_formatter, gdbpy_to_string_cst)) { struct value *replacement; @@ -2486,6 +2466,13 @@ varobj_value_get_print_value (struct value *value, if (replacement) value = replacement; } + else + { + /* If we don't have to_string but we have children, + we simply return {...}. */ + if (PyObject_HasAttr (value_formatter, gdbpy_children_cst)) + return "{...}"; + } } } #endif