diff options
Diffstat (limited to 'gdb/mi/mi-cmd-var.c')
-rw-r--r-- | gdb/mi/mi-cmd-var.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c index 9de8d3d..cad4117 100644 --- a/gdb/mi/mi-cmd-var.c +++ b/gdb/mi/mi-cmd-var.c @@ -243,6 +243,22 @@ mi_cmd_var_set_format (char *command, char **argv, int argc) } void +mi_cmd_var_set_visualizer (char *command, char **argv, int argc) +{ + struct varobj *var; + + if (argc != 2) + error ("Usage: NAME VISUALIZER_FUNCTION."); + + var = varobj_get_handle (argv[0]); + + if (var == NULL) + error ("Variable object not found"); + + varobj_set_visualizer (var, argv[1]); +} + +void mi_cmd_var_set_frozen (char *command, char **argv, int argc) { struct varobj *var; @@ -357,6 +373,7 @@ mi_cmd_var_list_children (char *command, char **argv, int argc) int numchild; enum print_values print_values; int ix; + char *display_hint; if (argc != 1 && argc != 2) error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME")); @@ -374,6 +391,13 @@ mi_cmd_var_list_children (char *command, char **argv, int argc) else print_values = PRINT_NO_VALUES; + display_hint = varobj_get_display_hint (var); + if (display_hint) + { + ui_out_field_string (uiout, "displayhint", display_hint); + xfree (display_hint); + } + if (VEC_length (varobj_p, children) == 0) return; @@ -634,6 +658,8 @@ varobj_update_one (struct varobj *var, enum print_values print_values, for (i = 0; VEC_iterate (varobj_update_result, changes, i, r); ++i) { + char *display_hint; + if (mi_version (uiout) > 1) cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); ui_out_field_string (uiout, "name", varobj_get_objname (r->varobj)); @@ -667,6 +693,33 @@ varobj_update_one (struct varobj *var, enum print_values print_values, ui_out_field_int (uiout, "new_num_children", varobj_get_num_children (r->varobj)); } + + display_hint = varobj_get_display_hint (var); + if (display_hint) + { + ui_out_field_string (uiout, "displayhint", display_hint); + xfree (display_hint); + } + + if (r->children_changed) + { + int ix; + struct varobj *child; + struct cleanup *cleanup = + make_cleanup_ui_out_list_begin_end (uiout, "children"); + + VEC (varobj_p)* children = varobj_list_children (r->varobj); + + for (ix = 0; VEC_iterate (varobj_p, children, ix, child); ++ix) + { + struct cleanup *cleanup_child; + cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); + print_varobj (child, print_values, 1 /* print expression */); + do_cleanups (cleanup_child); + } + + do_cleanups (cleanup); + } if (mi_version (uiout) > 1) do_cleanups (cleanup); |