198944Sobrien/* MI Command Set - varobj commands. 2130803Smarcel 3130803Smarcel Copyright 2000, 2002, 2004 Free Software Foundation, Inc. 4130803Smarcel 598944Sobrien Contributed by Cygnus Solutions (a Red Hat company). 698944Sobrien 798944Sobrien This file is part of GDB. 898944Sobrien 998944Sobrien This program is free software; you can redistribute it and/or modify 1098944Sobrien it under the terms of the GNU General Public License as published by 1198944Sobrien the Free Software Foundation; either version 2 of the License, or 1298944Sobrien (at your option) any later version. 1398944Sobrien 1498944Sobrien This program is distributed in the hope that it will be useful, 1598944Sobrien but WITHOUT ANY WARRANTY; without even the implied warranty of 1698944Sobrien MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1798944Sobrien GNU General Public License for more details. 1898944Sobrien 1998944Sobrien You should have received a copy of the GNU General Public License 2098944Sobrien along with this program; if not, write to the Free Software 2198944Sobrien Foundation, Inc., 59 Temple Place - Suite 330, 2298944Sobrien Boston, MA 02111-1307, USA. */ 2398944Sobrien 2498944Sobrien#include "defs.h" 2598944Sobrien#include "mi-cmds.h" 2698944Sobrien#include "ui-out.h" 2798944Sobrien#include "mi-out.h" 2898944Sobrien#include "varobj.h" 2998944Sobrien#include "value.h" 3098944Sobrien#include <ctype.h> 31130803Smarcel#include "gdb_string.h" 3298944Sobrien 3398944Sobrienextern int varobjdebug; /* defined in varobj.c */ 3498944Sobrien 3598944Sobrienstatic int varobj_update_one (struct varobj *var); 3698944Sobrien 3798944Sobrien/* VAROBJ operations */ 3898944Sobrien 3998944Sobrienenum mi_cmd_result 4098944Sobrienmi_cmd_var_create (char *command, char **argv, int argc) 4198944Sobrien{ 4298944Sobrien CORE_ADDR frameaddr = 0; 4398944Sobrien struct varobj *var; 4498944Sobrien char *name; 4598944Sobrien char *frame; 4698944Sobrien char *expr; 4798944Sobrien char *type; 4898944Sobrien struct cleanup *old_cleanups; 4998944Sobrien enum varobj_type var_type; 5098944Sobrien 5198944Sobrien if (argc != 3) 5298944Sobrien { 5398944Sobrien /* xasprintf (&mi_error_message, 5498944Sobrien "mi_cmd_var_create: Usage: ."); 5598944Sobrien return MI_CMD_ERROR; */ 5698944Sobrien error ("mi_cmd_var_create: Usage: NAME FRAME EXPRESSION."); 5798944Sobrien } 5898944Sobrien 5998944Sobrien name = xstrdup (argv[0]); 6098944Sobrien /* Add cleanup for name. Must be free_current_contents as 6198944Sobrien name can be reallocated */ 6298944Sobrien old_cleanups = make_cleanup (free_current_contents, &name); 6398944Sobrien 6498944Sobrien frame = xstrdup (argv[1]); 6598944Sobrien old_cleanups = make_cleanup (xfree, frame); 6698944Sobrien 6798944Sobrien expr = xstrdup (argv[2]); 6898944Sobrien 6998944Sobrien if (strcmp (name, "-") == 0) 7098944Sobrien { 7198944Sobrien xfree (name); 7298944Sobrien name = varobj_gen_name (); 7398944Sobrien } 7498944Sobrien else if (!isalpha (*name)) 7598944Sobrien error ("mi_cmd_var_create: name of object must begin with a letter"); 7698944Sobrien 7798944Sobrien if (strcmp (frame, "*") == 0) 7898944Sobrien var_type = USE_CURRENT_FRAME; 7998944Sobrien else if (strcmp (frame, "@") == 0) 8098944Sobrien var_type = USE_SELECTED_FRAME; 8198944Sobrien else 8298944Sobrien { 8398944Sobrien var_type = USE_SPECIFIED_FRAME; 84130803Smarcel frameaddr = string_to_core_addr (frame); 8598944Sobrien } 8698944Sobrien 8798944Sobrien if (varobjdebug) 8898944Sobrien fprintf_unfiltered (gdb_stdlog, 8998944Sobrien "Name=\"%s\", Frame=\"%s\" (0x%s), Expression=\"%s\"\n", 9098944Sobrien name, frame, paddr (frameaddr), expr); 9198944Sobrien 9298944Sobrien var = varobj_create (name, expr, frameaddr, var_type); 9398944Sobrien 9498944Sobrien if (var == NULL) 9598944Sobrien error ("mi_cmd_var_create: unable to create variable object"); 9698944Sobrien 9798944Sobrien ui_out_field_string (uiout, "name", name); 9898944Sobrien ui_out_field_int (uiout, "numchild", varobj_get_num_children (var)); 9998944Sobrien type = varobj_get_type (var); 10098944Sobrien if (type == NULL) 10198944Sobrien ui_out_field_string (uiout, "type", ""); 10298944Sobrien else 10398944Sobrien { 10498944Sobrien ui_out_field_string (uiout, "type", type); 10598944Sobrien xfree (type); 10698944Sobrien } 10798944Sobrien 10898944Sobrien do_cleanups (old_cleanups); 10998944Sobrien return MI_CMD_DONE; 11098944Sobrien} 11198944Sobrien 11298944Sobrienenum mi_cmd_result 11398944Sobrienmi_cmd_var_delete (char *command, char **argv, int argc) 11498944Sobrien{ 11598944Sobrien char *name; 11698944Sobrien char *expr; 11798944Sobrien struct varobj *var; 11898944Sobrien int numdel; 11998944Sobrien int children_only_p = 0; 12098944Sobrien struct cleanup *old_cleanups; 12198944Sobrien 12298944Sobrien if (argc < 1 || argc > 2) 12398944Sobrien error ("mi_cmd_var_delete: Usage: [-c] EXPRESSION."); 12498944Sobrien 12598944Sobrien name = xstrdup (argv[0]); 12698944Sobrien /* Add cleanup for name. Must be free_current_contents as 12798944Sobrien name can be reallocated */ 12898944Sobrien old_cleanups = make_cleanup (free_current_contents, &name); 12998944Sobrien 13098944Sobrien /* If we have one single argument it cannot be '-c' or any string 13198944Sobrien starting with '-'. */ 13298944Sobrien if (argc == 1) 13398944Sobrien { 13498944Sobrien if (strcmp (name, "-c") == 0) 13598944Sobrien error ("mi_cmd_var_delete: Missing required argument after '-c': variable object name"); 13698944Sobrien if (*name == '-') 13798944Sobrien error ("mi_cmd_var_delete: Illegal variable object name"); 13898944Sobrien } 13998944Sobrien 14098944Sobrien /* If we have 2 arguments they must be '-c' followed by a string 14198944Sobrien which would be the variable name. */ 14298944Sobrien if (argc == 2) 14398944Sobrien { 14498944Sobrien expr = xstrdup (argv[1]); 14598944Sobrien if (strcmp (name, "-c") != 0) 14698944Sobrien error ("mi_cmd_var_delete: Invalid option."); 14798944Sobrien children_only_p = 1; 14898944Sobrien xfree (name); 14998944Sobrien name = xstrdup (expr); 15098944Sobrien xfree (expr); 15198944Sobrien } 15298944Sobrien 15398944Sobrien /* If we didn't error out, now NAME contains the name of the 15498944Sobrien variable. */ 15598944Sobrien 15698944Sobrien var = varobj_get_handle (name); 15798944Sobrien 15898944Sobrien if (var == NULL) 15998944Sobrien error ("mi_cmd_var_delete: Variable object not found."); 16098944Sobrien 16198944Sobrien numdel = varobj_delete (var, NULL, children_only_p); 16298944Sobrien 16398944Sobrien ui_out_field_int (uiout, "ndeleted", numdel); 16498944Sobrien 16598944Sobrien do_cleanups (old_cleanups); 16698944Sobrien return MI_CMD_DONE; 16798944Sobrien} 16898944Sobrien 16998944Sobrienenum mi_cmd_result 17098944Sobrienmi_cmd_var_set_format (char *command, char **argv, int argc) 17198944Sobrien{ 17298944Sobrien enum varobj_display_formats format; 17398944Sobrien int len; 17498944Sobrien struct varobj *var; 17598944Sobrien char *formspec; 17698944Sobrien 17798944Sobrien if (argc != 2) 17898944Sobrien error ("mi_cmd_var_set_format: Usage: NAME FORMAT."); 17998944Sobrien 18098944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 18198944Sobrien var = varobj_get_handle (argv[0]); 18298944Sobrien 18398944Sobrien if (var == NULL) 18498944Sobrien error ("mi_cmd_var_set_format: Variable object not found"); 18598944Sobrien 18698944Sobrien formspec = xstrdup (argv[1]); 18798944Sobrien if (formspec == NULL) 18898944Sobrien error ("mi_cmd_var_set_format: Must specify the format as: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""); 18998944Sobrien 19098944Sobrien len = strlen (formspec); 19198944Sobrien 192130803Smarcel if (strncmp (formspec, "natural", len) == 0) 19398944Sobrien format = FORMAT_NATURAL; 194130803Smarcel else if (strncmp (formspec, "binary", len) == 0) 19598944Sobrien format = FORMAT_BINARY; 196130803Smarcel else if (strncmp (formspec, "decimal", len) == 0) 19798944Sobrien format = FORMAT_DECIMAL; 198130803Smarcel else if (strncmp (formspec, "hexadecimal", len) == 0) 19998944Sobrien format = FORMAT_HEXADECIMAL; 200130803Smarcel else if (strncmp (formspec, "octal", len) == 0) 20198944Sobrien format = FORMAT_OCTAL; 20298944Sobrien else 20398944Sobrien error ("mi_cmd_var_set_format: Unknown display format: must be: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""); 20498944Sobrien 20598944Sobrien /* Set the format of VAR to given format */ 20698944Sobrien varobj_set_display_format (var, format); 20798944Sobrien 20898944Sobrien /* Report the new current format */ 20998944Sobrien ui_out_field_string (uiout, "format", varobj_format_string[(int) format]); 21098944Sobrien return MI_CMD_DONE; 21198944Sobrien} 21298944Sobrien 21398944Sobrienenum mi_cmd_result 21498944Sobrienmi_cmd_var_show_format (char *command, char **argv, int argc) 21598944Sobrien{ 21698944Sobrien enum varobj_display_formats format; 21798944Sobrien struct varobj *var; 21898944Sobrien 21998944Sobrien if (argc != 1) 22098944Sobrien error ("mi_cmd_var_show_format: Usage: NAME."); 22198944Sobrien 22298944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 22398944Sobrien var = varobj_get_handle (argv[0]); 22498944Sobrien if (var == NULL) 22598944Sobrien error ("mi_cmd_var_show_format: Variable object not found"); 22698944Sobrien 22798944Sobrien format = varobj_get_display_format (var); 22898944Sobrien 22998944Sobrien /* Report the current format */ 23098944Sobrien ui_out_field_string (uiout, "format", varobj_format_string[(int) format]); 23198944Sobrien return MI_CMD_DONE; 23298944Sobrien} 23398944Sobrien 23498944Sobrienenum mi_cmd_result 23598944Sobrienmi_cmd_var_info_num_children (char *command, char **argv, int argc) 23698944Sobrien{ 23798944Sobrien struct varobj *var; 23898944Sobrien 23998944Sobrien if (argc != 1) 24098944Sobrien error ("mi_cmd_var_info_num_children: Usage: NAME."); 24198944Sobrien 24298944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 24398944Sobrien var = varobj_get_handle (argv[0]); 24498944Sobrien if (var == NULL) 24598944Sobrien error ("mi_cmd_var_info_num_children: Variable object not found"); 24698944Sobrien 24798944Sobrien ui_out_field_int (uiout, "numchild", varobj_get_num_children (var)); 24898944Sobrien return MI_CMD_DONE; 24998944Sobrien} 25098944Sobrien 25198944Sobrienenum mi_cmd_result 25298944Sobrienmi_cmd_var_list_children (char *command, char **argv, int argc) 25398944Sobrien{ 25498944Sobrien struct varobj *var; 25598944Sobrien struct varobj **childlist; 25698944Sobrien struct varobj **cc; 257130803Smarcel struct cleanup *cleanup_children; 25898944Sobrien int numchild; 25998944Sobrien char *type; 260130803Smarcel enum print_values print_values; 26198944Sobrien 262130803Smarcel if (argc != 1 && argc != 2) 263130803Smarcel error ("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"); 26498944Sobrien 26598944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 266130803Smarcel if (argc == 1) var = varobj_get_handle (argv[0]); 267130803Smarcel else var = varobj_get_handle (argv[1]); 26898944Sobrien if (var == NULL) 269130803Smarcel error ("Variable object not found"); 27098944Sobrien 27198944Sobrien numchild = varobj_list_children (var, &childlist); 27298944Sobrien ui_out_field_int (uiout, "numchild", numchild); 273130803Smarcel if (argc == 2) 274130803Smarcel if (strcmp (argv[0], "0") == 0 275130803Smarcel || strcmp (argv[0], "--no-values") == 0) 276130803Smarcel print_values = PRINT_NO_VALUES; 277130803Smarcel else if (strcmp (argv[0], "1") == 0 278130803Smarcel || strcmp (argv[0], "--all-values") == 0) 279130803Smarcel print_values = PRINT_ALL_VALUES; 280130803Smarcel else 281130803Smarcel error ("Unknown value for PRINT_VALUES: must be: 0 or \"--no-values\", 1 or \"--all-values\""); 282130803Smarcel else print_values = PRINT_NO_VALUES; 28398944Sobrien 28498944Sobrien if (numchild <= 0) 28598944Sobrien return MI_CMD_DONE; 28698944Sobrien 287130803Smarcel if (mi_version (uiout) == 1) 288130803Smarcel cleanup_children = make_cleanup_ui_out_tuple_begin_end (uiout, "children"); 289130803Smarcel else 290130803Smarcel cleanup_children = make_cleanup_ui_out_list_begin_end (uiout, "children"); 29198944Sobrien cc = childlist; 29298944Sobrien while (*cc != NULL) 29398944Sobrien { 294130803Smarcel struct cleanup *cleanup_child; 295130803Smarcel cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child"); 29698944Sobrien ui_out_field_string (uiout, "name", varobj_get_objname (*cc)); 29798944Sobrien ui_out_field_string (uiout, "exp", varobj_get_expression (*cc)); 29898944Sobrien ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc)); 299130803Smarcel if (print_values) 300130803Smarcel ui_out_field_string (uiout, "value", varobj_get_value (*cc)); 30198944Sobrien type = varobj_get_type (*cc); 30298944Sobrien /* C++ pseudo-variables (public, private, protected) do not have a type */ 30398944Sobrien if (type) 30498944Sobrien ui_out_field_string (uiout, "type", varobj_get_type (*cc)); 305130803Smarcel do_cleanups (cleanup_child); 30698944Sobrien cc++; 30798944Sobrien } 308130803Smarcel do_cleanups (cleanup_children); 30998944Sobrien xfree (childlist); 31098944Sobrien return MI_CMD_DONE; 31198944Sobrien} 31298944Sobrien 31398944Sobrienenum mi_cmd_result 31498944Sobrienmi_cmd_var_info_type (char *command, char **argv, int argc) 31598944Sobrien{ 31698944Sobrien struct varobj *var; 31798944Sobrien 31898944Sobrien if (argc != 1) 31998944Sobrien error ("mi_cmd_var_info_type: Usage: NAME."); 32098944Sobrien 32198944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 32298944Sobrien var = varobj_get_handle (argv[0]); 32398944Sobrien if (var == NULL) 32498944Sobrien error ("mi_cmd_var_info_type: Variable object not found"); 32598944Sobrien 32698944Sobrien ui_out_field_string (uiout, "type", varobj_get_type (var)); 32798944Sobrien return MI_CMD_DONE; 32898944Sobrien} 32998944Sobrien 33098944Sobrienenum mi_cmd_result 33198944Sobrienmi_cmd_var_info_expression (char *command, char **argv, int argc) 33298944Sobrien{ 33398944Sobrien enum varobj_languages lang; 33498944Sobrien struct varobj *var; 33598944Sobrien 33698944Sobrien if (argc != 1) 33798944Sobrien error ("mi_cmd_var_info_expression: Usage: NAME."); 33898944Sobrien 33998944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 34098944Sobrien var = varobj_get_handle (argv[0]); 34198944Sobrien if (var == NULL) 34298944Sobrien error ("mi_cmd_var_info_expression: Variable object not found"); 34398944Sobrien 34498944Sobrien lang = varobj_get_language (var); 34598944Sobrien 34698944Sobrien ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]); 34798944Sobrien ui_out_field_string (uiout, "exp", varobj_get_expression (var)); 34898944Sobrien return MI_CMD_DONE; 34998944Sobrien} 35098944Sobrien 35198944Sobrienenum mi_cmd_result 35298944Sobrienmi_cmd_var_show_attributes (char *command, char **argv, int argc) 35398944Sobrien{ 35498944Sobrien int attr; 35598944Sobrien char *attstr; 35698944Sobrien struct varobj *var; 35798944Sobrien 35898944Sobrien if (argc != 1) 35998944Sobrien error ("mi_cmd_var_show_attributes: Usage: NAME."); 36098944Sobrien 36198944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 36298944Sobrien var = varobj_get_handle (argv[0]); 36398944Sobrien if (var == NULL) 36498944Sobrien error ("mi_cmd_var_show_attributes: Variable object not found"); 36598944Sobrien 36698944Sobrien attr = varobj_get_attributes (var); 36798944Sobrien /* FIXME: define masks for attributes */ 36898944Sobrien if (attr & 0x00000001) 36998944Sobrien attstr = "editable"; 37098944Sobrien else 37198944Sobrien attstr = "noneditable"; 37298944Sobrien 37398944Sobrien ui_out_field_string (uiout, "attr", attstr); 37498944Sobrien return MI_CMD_DONE; 37598944Sobrien} 37698944Sobrien 37798944Sobrienenum mi_cmd_result 37898944Sobrienmi_cmd_var_evaluate_expression (char *command, char **argv, int argc) 37998944Sobrien{ 38098944Sobrien struct varobj *var; 38198944Sobrien 38298944Sobrien if (argc != 1) 38398944Sobrien error ("mi_cmd_var_evaluate_expression: Usage: NAME."); 38498944Sobrien 38598944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 38698944Sobrien var = varobj_get_handle (argv[0]); 38798944Sobrien if (var == NULL) 38898944Sobrien error ("mi_cmd_var_evaluate_expression: Variable object not found"); 38998944Sobrien 39098944Sobrien ui_out_field_string (uiout, "value", varobj_get_value (var)); 39198944Sobrien return MI_CMD_DONE; 39298944Sobrien} 39398944Sobrien 39498944Sobrienenum mi_cmd_result 39598944Sobrienmi_cmd_var_assign (char *command, char **argv, int argc) 39698944Sobrien{ 39798944Sobrien struct varobj *var; 39898944Sobrien char *expression; 39998944Sobrien 40098944Sobrien if (argc != 2) 40198944Sobrien error ("mi_cmd_var_assign: Usage: NAME EXPRESSION."); 40298944Sobrien 40398944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 40498944Sobrien var = varobj_get_handle (argv[0]); 40598944Sobrien if (var == NULL) 40698944Sobrien error ("mi_cmd_var_assign: Variable object not found"); 40798944Sobrien 40898944Sobrien /* FIXME: define masks for attributes */ 40998944Sobrien if (!(varobj_get_attributes (var) & 0x00000001)) 41098944Sobrien error ("mi_cmd_var_assign: Variable object is not editable"); 41198944Sobrien 41298944Sobrien expression = xstrdup (argv[1]); 41398944Sobrien 41498944Sobrien if (!varobj_set_value (var, expression)) 41598944Sobrien error ("mi_cmd_var_assign: Could not assign expression to varible object"); 41698944Sobrien 41798944Sobrien ui_out_field_string (uiout, "value", varobj_get_value (var)); 41898944Sobrien return MI_CMD_DONE; 41998944Sobrien} 42098944Sobrien 42198944Sobrienenum mi_cmd_result 42298944Sobrienmi_cmd_var_update (char *command, char **argv, int argc) 42398944Sobrien{ 42498944Sobrien struct varobj *var; 42598944Sobrien struct varobj **rootlist; 42698944Sobrien struct varobj **cr; 427130803Smarcel struct cleanup *cleanup; 42898944Sobrien char *name; 42998944Sobrien int nv; 43098944Sobrien 43198944Sobrien if (argc != 1) 43298944Sobrien error ("mi_cmd_var_update: Usage: NAME."); 43398944Sobrien 43498944Sobrien name = argv[0]; 43598944Sobrien 43698944Sobrien /* Check if the parameter is a "*" which means that we want 43798944Sobrien to update all variables */ 43898944Sobrien 43998944Sobrien if ((*name == '*') && (*(name + 1) == '\0')) 44098944Sobrien { 44198944Sobrien nv = varobj_list (&rootlist); 442130803Smarcel if (mi_version (uiout) <= 1) 443130803Smarcel cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist"); 444130803Smarcel else 445130803Smarcel cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist"); 44698944Sobrien if (nv <= 0) 44798944Sobrien { 448130803Smarcel do_cleanups (cleanup); 44998944Sobrien return MI_CMD_DONE; 45098944Sobrien } 45198944Sobrien cr = rootlist; 45298944Sobrien while (*cr != NULL) 45398944Sobrien { 45498944Sobrien varobj_update_one (*cr); 45598944Sobrien cr++; 45698944Sobrien } 45798944Sobrien xfree (rootlist); 458130803Smarcel do_cleanups (cleanup); 45998944Sobrien } 46098944Sobrien else 46198944Sobrien { 46298944Sobrien /* Get varobj handle, if a valid var obj name was specified */ 46398944Sobrien var = varobj_get_handle (name); 46498944Sobrien if (var == NULL) 46598944Sobrien error ("mi_cmd_var_update: Variable object not found"); 46698944Sobrien 467130803Smarcel if (mi_version (uiout) <= 1) 468130803Smarcel cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist"); 469130803Smarcel else 470130803Smarcel cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist"); 47198944Sobrien varobj_update_one (var); 472130803Smarcel do_cleanups (cleanup); 47398944Sobrien } 47498944Sobrien return MI_CMD_DONE; 47598944Sobrien} 47698944Sobrien 47798944Sobrien/* Helper for mi_cmd_var_update() Returns 0 if the update for 47898944Sobrien the variable fails (usually because the variable is out of 47998944Sobrien scope), and 1 if it succeeds. */ 48098944Sobrien 48198944Sobrienstatic int 48298944Sobrienvarobj_update_one (struct varobj *var) 48398944Sobrien{ 48498944Sobrien struct varobj **changelist; 48598944Sobrien struct varobj **cc; 486130803Smarcel struct cleanup *cleanup = NULL; 48798944Sobrien int nc; 48898944Sobrien 48998944Sobrien nc = varobj_update (&var, &changelist); 49098944Sobrien 49198944Sobrien /* nc == 0 means that nothing has changed. 49298944Sobrien nc == -1 means that an error occured in updating the variable. 49398944Sobrien nc == -2 means the variable has changed type. */ 49498944Sobrien 49598944Sobrien if (nc == 0) 49698944Sobrien return 1; 49798944Sobrien else if (nc == -1) 49898944Sobrien { 499130803Smarcel if (mi_version (uiout) > 1) 500130803Smarcel cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); 50198944Sobrien ui_out_field_string (uiout, "name", varobj_get_objname(var)); 50298944Sobrien ui_out_field_string (uiout, "in_scope", "false"); 503130803Smarcel if (mi_version (uiout) > 1) 504130803Smarcel do_cleanups (cleanup); 50598944Sobrien return -1; 50698944Sobrien } 50798944Sobrien else if (nc == -2) 50898944Sobrien { 509130803Smarcel if (mi_version (uiout) > 1) 510130803Smarcel cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); 51198944Sobrien ui_out_field_string (uiout, "name", varobj_get_objname (var)); 51298944Sobrien ui_out_field_string (uiout, "in_scope", "true"); 51398944Sobrien ui_out_field_string (uiout, "new_type", varobj_get_type(var)); 51498944Sobrien ui_out_field_int (uiout, "new_num_children", 51598944Sobrien varobj_get_num_children(var)); 516130803Smarcel if (mi_version (uiout) > 1) 517130803Smarcel do_cleanups (cleanup); 51898944Sobrien } 51998944Sobrien else 52098944Sobrien { 52198944Sobrien 52298944Sobrien cc = changelist; 52398944Sobrien while (*cc != NULL) 52498944Sobrien { 525130803Smarcel if (mi_version (uiout) > 1) 526130803Smarcel cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); 52798944Sobrien ui_out_field_string (uiout, "name", varobj_get_objname (*cc)); 52898944Sobrien ui_out_field_string (uiout, "in_scope", "true"); 52998944Sobrien ui_out_field_string (uiout, "type_changed", "false"); 530130803Smarcel if (mi_version (uiout) > 1) 531130803Smarcel do_cleanups (cleanup); 53298944Sobrien cc++; 53398944Sobrien } 53498944Sobrien xfree (changelist); 53598944Sobrien return 1; 53698944Sobrien } 53798944Sobrien return 1; 53898944Sobrien} 539