* MI varobj printing cleanup
@ 2006-11-29 15:24 Vladimir Prus
2006-11-29 15:32 ` Daniel Jacobowitz
0 siblings, 1 reply; 3+ messages in thread
From: Vladimir Prus @ 2006-11-29 15:24 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 651 bytes --]
There were two places where varobjs are printed, which makes it hard to add
new fields, or new commands that create varobjs.
This patch create new function. No regressions. It slightly changed the
behaviour -- if we create a varobj with -var-create and it has no type, the
old code would print
type=""
and the new code does not print "type" field at all. That's no a problem,
however -- if there's no type for a top-level variable, you'll have lots of
asserts fire before even going to printing.
OK?
- Volodya
* mi/mi-cmd-var.c (print_varobj): New function.
(mi_cmd_var_create): Use the above.
(mi_cmd_var_list_children): Likewise.
[-- Attachment #2: varobj_printing__gdb_mainline.diff --]
[-- Type: text/x-diff, Size: 3050 bytes --]
=== gdb/mi/mi-cmd-var.c
==================================================================
--- gdb/mi/mi-cmd-var.c (/mirrors/gdb_mainline) (revision 2320)
+++ gdb/mi/mi-cmd-var.c (/patches/gdb/varobj_printing/gdb_mainline) (revision 2320)
@@ -39,6 +39,33 @@
static int varobj_update_one (struct varobj *var,
enum print_values print_values);
+static int mi_print_value_p (struct type *type, enum print_values print_values);
+
+/* Print variable object VAR. The PRINT_VALUES parameter controls
+ if the value should be printed. The PRINT_EXPRESSION parameter
+ controls if the expression should be printed. */
+static void
+print_varobj (struct varobj *var, enum print_values print_values,
+ int print_expression)
+{
+ char *type;
+
+ ui_out_field_string (uiout, "name", varobj_get_objname (var));
+ if (print_expression)
+ ui_out_field_string (uiout, "exp", varobj_get_expression (var));
+ ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
+
+ if (mi_print_value_p (varobj_get_gdb_type (var), print_values))
+ ui_out_field_string (uiout, "value", varobj_get_value (var));
+
+ type = varobj_get_type (var);
+ if (type != NULL)
+ {
+ ui_out_field_string (uiout, "type", type);
+ xfree (type);
+ }
+}
+
/* VAROBJ operations */
enum mi_cmd_result
@@ -49,7 +76,6 @@
char *name;
char *frame;
char *expr;
- char *type;
struct cleanup *old_cleanups;
enum varobj_type var_type;
@@ -98,16 +124,7 @@
if (var == NULL)
error (_("mi_cmd_var_create: unable to create variable object"));
- ui_out_field_string (uiout, "name", name);
- ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
- type = varobj_get_type (var);
- if (type == NULL)
- ui_out_field_string (uiout, "type", "");
- else
- {
- ui_out_field_string (uiout, "type", type);
- xfree (type);
- }
+ print_varobj (var, PRINT_NO_VALUES, 0 /* don't print expression */);
do_cleanups (old_cleanups);
return MI_CMD_DONE;
@@ -336,17 +353,12 @@
{
struct cleanup *cleanup_child;
cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child");
- ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
- ui_out_field_string (uiout, "exp", varobj_get_expression (*cc));
- ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc));
- if (mi_print_value_p (varobj_get_gdb_type (*cc), print_values))
- ui_out_field_string (uiout, "value", varobj_get_value (*cc));
- type = varobj_get_type (*cc);
- /* C++ pseudo-variables (public, private, protected) do not have a type */
- if (type)
- ui_out_field_string (uiout, "type", type);
+ /* Not printing of the type below is wrong -- frontends can
+ be programmed easily if all creation of varobj always
+ return the same information. */
+ print_varobj (*cc, print_values, 1 /* print expression */);
+ cc++;
do_cleanups (cleanup_child);
- cc++;
}
do_cleanups (cleanup_children);
xfree (childlist);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: MI varobj printing cleanup
2006-11-29 15:24 MI varobj printing cleanup Vladimir Prus
@ 2006-11-29 15:32 ` Daniel Jacobowitz
2006-11-29 15:41 ` Vladimir Prus
0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2006-11-29 15:32 UTC (permalink / raw)
To: Vladimir Prus; +Cc: gdb-patches
On Wed, Nov 29, 2006 at 06:24:15PM +0300, Vladimir Prus wrote:
> + /* Not printing of the type below is wrong -- frontends can
> + be programmed easily if all creation of varobj always
> + return the same information. */
> + print_varobj (*cc, print_values, 1 /* print expression */);
> + cc++;
I don't understand this comment. Otherwise patch is OK.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: MI varobj printing cleanup
2006-11-29 15:32 ` Daniel Jacobowitz
@ 2006-11-29 15:41 ` Vladimir Prus
0 siblings, 0 replies; 3+ messages in thread
From: Vladimir Prus @ 2006-11-29 15:41 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
On Wednesday 29 November 2006 18:32, Daniel Jacobowitz wrote:
> On Wed, Nov 29, 2006 at 06:24:15PM +0300, Vladimir Prus wrote:
> > + /* Not printing of the type below is wrong -- frontends can
> > + be programmed easily if all creation of varobj always
> > + return the same information. */
> > + print_varobj (*cc, print_values, 1 /* print expression */);
> > + cc++;
>
> I don't understand this comment. Otherwise patch is OK.
Nevermind, that's actually a topic for another patch in distant future. I've
removed the comment and checked in.
- Volodya
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-11-29 15:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-11-29 15:24 MI varobj printing cleanup Vladimir Prus
2006-11-29 15:32 ` Daniel Jacobowitz
2006-11-29 15:41 ` Vladimir Prus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox