]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/mi/mi-cmd-var.c
Updated copyright notices for most files.
[thirdparty/binutils-gdb.git] / gdb / mi / mi-cmd-var.c
CommitLineData
fb40c209 1/* MI Command Set - varobj commands.
349c5d5f 2
9b254dd1
DJ
3 Copyright (C) 2000, 2002, 2004, 2005, 2007, 2008
4 Free Software Foundation, Inc.
349c5d5f 5
ab91fdd5 6 Contributed by Cygnus Solutions (a Red Hat company).
fb40c209
AC
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
fb40c209
AC
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
fb40c209
AC
22
23#include "defs.h"
24#include "mi-cmds.h"
25#include "ui-out.h"
26#include "mi-out.h"
27#include "varobj.h"
28#include "value.h"
29#include <ctype.h>
5f8a3188 30#include "gdb_string.h"
fb40c209 31
1ecb4ee0
DJ
32const char mi_no_values[] = "--no-values";
33const char mi_simple_values[] = "--simple-values";
34const char mi_all_values[] = "--all-values";
35
8756216b 36extern int varobjdebug; /* defined in varobj.c. */
fb40c209 37
8756216b 38static void varobj_update_one (struct varobj *var,
25d5ea92
VP
39 enum print_values print_values,
40 int explicit);
fb40c209 41
a217f3f5
VP
42static int mi_print_value_p (struct type *type, enum print_values print_values);
43
44/* Print variable object VAR. The PRINT_VALUES parameter controls
45 if the value should be printed. The PRINT_EXPRESSION parameter
46 controls if the expression should be printed. */
47static void
48print_varobj (struct varobj *var, enum print_values print_values,
49 int print_expression)
50{
bccc275a 51 struct type *gdb_type;
a217f3f5
VP
52 char *type;
53
54 ui_out_field_string (uiout, "name", varobj_get_objname (var));
55 if (print_expression)
56 ui_out_field_string (uiout, "exp", varobj_get_expression (var));
57 ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
58
9265acad 59 if (mi_print_value_p (varobj_get_gdb_type (var), print_values))
a217f3f5
VP
60 ui_out_field_string (uiout, "value", varobj_get_value (var));
61
62 type = varobj_get_type (var);
63 if (type != NULL)
64 {
65 ui_out_field_string (uiout, "type", type);
66 xfree (type);
67 }
25d5ea92
VP
68
69 if (varobj_get_frozen (var))
70 ui_out_field_int (uiout, "frozen", 1);
a217f3f5
VP
71}
72
fb40c209
AC
73/* VAROBJ operations */
74
75enum mi_cmd_result
76mi_cmd_var_create (char *command, char **argv, int argc)
77{
73a93a32 78 CORE_ADDR frameaddr = 0;
fb40c209
AC
79 struct varobj *var;
80 char *name;
81 char *frame;
82 char *expr;
fb40c209 83 struct cleanup *old_cleanups;
73a93a32 84 enum varobj_type var_type;
fb40c209
AC
85
86 if (argc != 3)
87 {
c6902d46
AC
88 /* mi_error_message = xstrprintf ("mi_cmd_var_create: Usage:
89 ...."); return MI_CMD_ERROR; */
8a3fe4f8 90 error (_("mi_cmd_var_create: Usage: NAME FRAME EXPRESSION."));
fb40c209
AC
91 }
92
93 name = xstrdup (argv[0]);
94 /* Add cleanup for name. Must be free_current_contents as
95 name can be reallocated */
47cf603e 96 old_cleanups = make_cleanup (free_current_contents, &name);
fb40c209
AC
97
98 frame = xstrdup (argv[1]);
51b57b6b 99 make_cleanup (xfree, frame);
fb40c209
AC
100
101 expr = xstrdup (argv[2]);
51b57b6b 102 make_cleanup (xfree, expr);
fb40c209
AC
103
104 if (strcmp (name, "-") == 0)
105 {
b8c9b27d 106 xfree (name);
fb40c209
AC
107 name = varobj_gen_name ();
108 }
109 else if (!isalpha (*name))
8a3fe4f8 110 error (_("mi_cmd_var_create: name of object must begin with a letter"));
fb40c209
AC
111
112 if (strcmp (frame, "*") == 0)
73a93a32
JI
113 var_type = USE_CURRENT_FRAME;
114 else if (strcmp (frame, "@") == 0)
115 var_type = USE_SELECTED_FRAME;
fb40c209 116 else
73a93a32
JI
117 {
118 var_type = USE_SPECIFIED_FRAME;
1bd34ded 119 frameaddr = string_to_core_addr (frame);
73a93a32 120 }
fb40c209
AC
121
122 if (varobjdebug)
123 fprintf_unfiltered (gdb_stdlog,
124 "Name=\"%s\", Frame=\"%s\" (0x%s), Expression=\"%s\"\n",
125 name, frame, paddr (frameaddr), expr);
126
73a93a32 127 var = varobj_create (name, expr, frameaddr, var_type);
fb40c209
AC
128
129 if (var == NULL)
8a3fe4f8 130 error (_("mi_cmd_var_create: unable to create variable object"));
fb40c209 131
224e4ca7 132 print_varobj (var, PRINT_ALL_VALUES, 0 /* don't print expression */);
fb40c209
AC
133
134 do_cleanups (old_cleanups);
135 return MI_CMD_DONE;
136}
137
138enum mi_cmd_result
139mi_cmd_var_delete (char *command, char **argv, int argc)
140{
141 char *name;
fb40c209
AC
142 struct varobj *var;
143 int numdel;
144 int children_only_p = 0;
145 struct cleanup *old_cleanups;
146
147 if (argc < 1 || argc > 2)
8a3fe4f8 148 error (_("mi_cmd_var_delete: Usage: [-c] EXPRESSION."));
fb40c209
AC
149
150 name = xstrdup (argv[0]);
151 /* Add cleanup for name. Must be free_current_contents as
152 name can be reallocated */
47cf603e 153 old_cleanups = make_cleanup (free_current_contents, &name);
fb40c209
AC
154
155 /* If we have one single argument it cannot be '-c' or any string
156 starting with '-'. */
157 if (argc == 1)
158 {
159 if (strcmp (name, "-c") == 0)
8a3fe4f8 160 error (_("mi_cmd_var_delete: Missing required argument after '-c': variable object name"));
fb40c209 161 if (*name == '-')
8a3fe4f8 162 error (_("mi_cmd_var_delete: Illegal variable object name"));
fb40c209
AC
163 }
164
165 /* If we have 2 arguments they must be '-c' followed by a string
166 which would be the variable name. */
167 if (argc == 2)
168 {
fb40c209 169 if (strcmp (name, "-c") != 0)
8a3fe4f8 170 error (_("mi_cmd_var_delete: Invalid option."));
fb40c209 171 children_only_p = 1;
474d0d0c
MS
172 do_cleanups (old_cleanups);
173 name = xstrdup (argv[1]);
174 make_cleanup (free_current_contents, &name);
fb40c209
AC
175 }
176
177 /* If we didn't error out, now NAME contains the name of the
178 variable. */
179
180 var = varobj_get_handle (name);
181
182 if (var == NULL)
8a3fe4f8 183 error (_("mi_cmd_var_delete: Variable object not found."));
fb40c209
AC
184
185 numdel = varobj_delete (var, NULL, children_only_p);
186
187 ui_out_field_int (uiout, "ndeleted", numdel);
188
189 do_cleanups (old_cleanups);
190 return MI_CMD_DONE;
191}
192
193enum mi_cmd_result
194mi_cmd_var_set_format (char *command, char **argv, int argc)
195{
196 enum varobj_display_formats format;
197 int len;
198 struct varobj *var;
199 char *formspec;
200
201 if (argc != 2)
8a3fe4f8 202 error (_("mi_cmd_var_set_format: Usage: NAME FORMAT."));
fb40c209
AC
203
204 /* Get varobj handle, if a valid var obj name was specified */
205 var = varobj_get_handle (argv[0]);
206
207 if (var == NULL)
8a3fe4f8 208 error (_("mi_cmd_var_set_format: Variable object not found"));
fb40c209 209
b538c234 210 formspec = argv[1];
fb40c209 211 if (formspec == NULL)
8a3fe4f8 212 error (_("mi_cmd_var_set_format: Must specify the format as: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""));
fb40c209
AC
213
214 len = strlen (formspec);
215
bf896cb0 216 if (strncmp (formspec, "natural", len) == 0)
fb40c209 217 format = FORMAT_NATURAL;
bf896cb0 218 else if (strncmp (formspec, "binary", len) == 0)
fb40c209 219 format = FORMAT_BINARY;
bf896cb0 220 else if (strncmp (formspec, "decimal", len) == 0)
fb40c209 221 format = FORMAT_DECIMAL;
bf896cb0 222 else if (strncmp (formspec, "hexadecimal", len) == 0)
fb40c209 223 format = FORMAT_HEXADECIMAL;
bf896cb0 224 else if (strncmp (formspec, "octal", len) == 0)
fb40c209
AC
225 format = FORMAT_OCTAL;
226 else
8a3fe4f8 227 error (_("mi_cmd_var_set_format: Unknown display format: must be: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""));
fb40c209
AC
228
229 /* Set the format of VAR to given format */
230 varobj_set_display_format (var, format);
231
232 /* Report the new current format */
233 ui_out_field_string (uiout, "format", varobj_format_string[(int) format]);
234 return MI_CMD_DONE;
235}
236
25d5ea92
VP
237enum mi_cmd_result
238mi_cmd_var_set_frozen (char *command, char **argv, int argc)
239{
240 struct varobj *var;
241 int frozen;
242
243 if (argc != 2)
244 error (_("-var-set-format: Usage: NAME FROZEN_FLAG."));
245
246 var = varobj_get_handle (argv[0]);
247 if (var == NULL)
248 error (_("Variable object not found"));
249
250 if (strcmp (argv[1], "0") == 0)
251 frozen = 0;
252 else if (strcmp (argv[1], "1") == 0)
253 frozen = 1;
254 else
255 error (_("Invalid flag value"));
256
257 varobj_set_frozen (var, frozen);
258
259 /* We don't automatically return the new value, or what varobjs got new
260 values during unfreezing. If this information is required, client
261 should call -var-update explicitly. */
262 return MI_CMD_DONE;
263}
264
265
fb40c209
AC
266enum mi_cmd_result
267mi_cmd_var_show_format (char *command, char **argv, int argc)
268{
269 enum varobj_display_formats format;
270 struct varobj *var;
271
272 if (argc != 1)
8a3fe4f8 273 error (_("mi_cmd_var_show_format: Usage: NAME."));
fb40c209
AC
274
275 /* Get varobj handle, if a valid var obj name was specified */
276 var = varobj_get_handle (argv[0]);
277 if (var == NULL)
8a3fe4f8 278 error (_("mi_cmd_var_show_format: Variable object not found"));
fb40c209
AC
279
280 format = varobj_get_display_format (var);
281
282 /* Report the current format */
283 ui_out_field_string (uiout, "format", varobj_format_string[(int) format]);
284 return MI_CMD_DONE;
285}
286
287enum mi_cmd_result
288mi_cmd_var_info_num_children (char *command, char **argv, int argc)
289{
290 struct varobj *var;
291
292 if (argc != 1)
8a3fe4f8 293 error (_("mi_cmd_var_info_num_children: Usage: NAME."));
fb40c209
AC
294
295 /* Get varobj handle, if a valid var obj name was specified */
296 var = varobj_get_handle (argv[0]);
297 if (var == NULL)
8a3fe4f8 298 error (_("mi_cmd_var_info_num_children: Variable object not found"));
fb40c209
AC
299
300 ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
301 return MI_CMD_DONE;
302}
303
1ecb4ee0
DJ
304/* Parse a string argument into a print_values value. */
305
306static enum print_values
307mi_parse_values_option (const char *arg)
308{
309 if (strcmp (arg, "0") == 0
310 || strcmp (arg, mi_no_values) == 0)
311 return PRINT_NO_VALUES;
312 else if (strcmp (arg, "1") == 0
313 || strcmp (arg, mi_all_values) == 0)
314 return PRINT_ALL_VALUES;
315 else if (strcmp (arg, "2") == 0
316 || strcmp (arg, mi_simple_values) == 0)
317 return PRINT_SIMPLE_VALUES;
318 else
319 error (_("Unknown value for PRINT_VALUES\n\
320Must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s\""),
321 mi_no_values, mi_simple_values, mi_all_values);
322}
323
324/* Return 1 if given the argument PRINT_VALUES we should display
325 a value of type TYPE. */
326
327static int
328mi_print_value_p (struct type *type, enum print_values print_values)
329{
1ecb4ee0
DJ
330
331 if (print_values == PRINT_NO_VALUES)
332 return 0;
333
334 if (print_values == PRINT_ALL_VALUES)
335 return 1;
336
9265acad
NR
337 if (type == NULL)
338 return 1;
339 else
340 {
341 type = check_typedef (type);
1ecb4ee0 342
9265acad
NR
343 /* For PRINT_SIMPLE_VALUES, only print the value if it has a type
344 and that type is not a compound type. */
345 return (TYPE_CODE (type) != TYPE_CODE_ARRAY
346 && TYPE_CODE (type) != TYPE_CODE_STRUCT
347 && TYPE_CODE (type) != TYPE_CODE_UNION);
348 }
1ecb4ee0
DJ
349}
350
fb40c209
AC
351enum mi_cmd_result
352mi_cmd_var_list_children (char *command, char **argv, int argc)
353{
354 struct varobj *var;
355 struct varobj **childlist;
356 struct varobj **cc;
6ad4a2cf 357 struct cleanup *cleanup_children;
fb40c209 358 int numchild;
c9e1f0fc 359 enum print_values print_values;
fb40c209 360
c9e1f0fc 361 if (argc != 1 && argc != 2)
8a3fe4f8 362 error (_("mi_cmd_var_list_children: Usage: [PRINT_VALUES] NAME"));
fb40c209
AC
363
364 /* Get varobj handle, if a valid var obj name was specified */
1ecb4ee0
DJ
365 if (argc == 1)
366 var = varobj_get_handle (argv[0]);
367 else
368 var = varobj_get_handle (argv[1]);
fb40c209 369 if (var == NULL)
8a3fe4f8 370 error (_("Variable object not found"));
fb40c209
AC
371
372 numchild = varobj_list_children (var, &childlist);
373 ui_out_field_int (uiout, "numchild", numchild);
c9e1f0fc 374 if (argc == 2)
1ecb4ee0
DJ
375 print_values = mi_parse_values_option (argv[0]);
376 else
377 print_values = PRINT_NO_VALUES;
fb40c209
AC
378
379 if (numchild <= 0)
76bd6e0b
MS
380 {
381 xfree (childlist);
382 return MI_CMD_DONE;
383 }
fb40c209 384
e7494ffb
AC
385 if (mi_version (uiout) == 1)
386 cleanup_children = make_cleanup_ui_out_tuple_begin_end (uiout, "children");
387 else
388 cleanup_children = make_cleanup_ui_out_list_begin_end (uiout, "children");
fb40c209
AC
389 cc = childlist;
390 while (*cc != NULL)
391 {
6ad4a2cf
JJ
392 struct cleanup *cleanup_child;
393 cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, "child");
a217f3f5 394 print_varobj (*cc, print_values, 1 /* print expression */);
fb40c209 395 cc++;
a217f3f5 396 do_cleanups (cleanup_child);
fb40c209 397 }
6ad4a2cf 398 do_cleanups (cleanup_children);
b8c9b27d 399 xfree (childlist);
fb40c209
AC
400 return MI_CMD_DONE;
401}
402
403enum mi_cmd_result
404mi_cmd_var_info_type (char *command, char **argv, int argc)
405{
406 struct varobj *var;
407
408 if (argc != 1)
8a3fe4f8 409 error (_("mi_cmd_var_info_type: Usage: NAME."));
fb40c209
AC
410
411 /* Get varobj handle, if a valid var obj name was specified */
412 var = varobj_get_handle (argv[0]);
413 if (var == NULL)
8a3fe4f8 414 error (_("mi_cmd_var_info_type: Variable object not found"));
fb40c209
AC
415
416 ui_out_field_string (uiout, "type", varobj_get_type (var));
417 return MI_CMD_DONE;
418}
419
02142340
VP
420enum mi_cmd_result
421mi_cmd_var_info_path_expression (char *command, char **argv, int argc)
422{
423 struct varobj *var;
424 char *path_expr;
425
426 if (argc != 1)
427 error (_("Usage: NAME."));
428
429 /* Get varobj handle, if a valid var obj name was specified. */
430 var = varobj_get_handle (argv[0]);
431 if (var == NULL)
432 error (_("Variable object not found"));
433
434 path_expr = varobj_get_path_expr (var);
435
436 ui_out_field_string (uiout, "path_expr", path_expr);
437
438 return MI_CMD_DONE;
439}
440
fb40c209
AC
441enum mi_cmd_result
442mi_cmd_var_info_expression (char *command, char **argv, int argc)
443{
444 enum varobj_languages lang;
445 struct varobj *var;
446
447 if (argc != 1)
8a3fe4f8 448 error (_("mi_cmd_var_info_expression: Usage: NAME."));
fb40c209
AC
449
450 /* Get varobj handle, if a valid var obj name was specified */
451 var = varobj_get_handle (argv[0]);
452 if (var == NULL)
8a3fe4f8 453 error (_("mi_cmd_var_info_expression: Variable object not found"));
fb40c209
AC
454
455 lang = varobj_get_language (var);
456
457 ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
458 ui_out_field_string (uiout, "exp", varobj_get_expression (var));
459 return MI_CMD_DONE;
460}
461
462enum mi_cmd_result
463mi_cmd_var_show_attributes (char *command, char **argv, int argc)
464{
465 int attr;
466 char *attstr;
467 struct varobj *var;
468
469 if (argc != 1)
8a3fe4f8 470 error (_("mi_cmd_var_show_attributes: Usage: NAME."));
fb40c209
AC
471
472 /* Get varobj handle, if a valid var obj name was specified */
473 var = varobj_get_handle (argv[0]);
474 if (var == NULL)
8a3fe4f8 475 error (_("mi_cmd_var_show_attributes: Variable object not found"));
fb40c209
AC
476
477 attr = varobj_get_attributes (var);
478 /* FIXME: define masks for attributes */
479 if (attr & 0x00000001)
480 attstr = "editable";
481 else
482 attstr = "noneditable";
483
484 ui_out_field_string (uiout, "attr", attstr);
485 return MI_CMD_DONE;
486}
487
488enum mi_cmd_result
489mi_cmd_var_evaluate_expression (char *command, char **argv, int argc)
490{
491 struct varobj *var;
492
493 if (argc != 1)
8a3fe4f8 494 error (_("mi_cmd_var_evaluate_expression: Usage: NAME."));
fb40c209
AC
495
496 /* Get varobj handle, if a valid var obj name was specified */
497 var = varobj_get_handle (argv[0]);
498 if (var == NULL)
8a3fe4f8 499 error (_("mi_cmd_var_evaluate_expression: Variable object not found"));
fb40c209
AC
500
501 ui_out_field_string (uiout, "value", varobj_get_value (var));
502 return MI_CMD_DONE;
503}
504
505enum mi_cmd_result
506mi_cmd_var_assign (char *command, char **argv, int argc)
507{
508 struct varobj *var;
509 char *expression;
510
511 if (argc != 2)
8a3fe4f8 512 error (_("mi_cmd_var_assign: Usage: NAME EXPRESSION."));
fb40c209
AC
513
514 /* Get varobj handle, if a valid var obj name was specified */
515 var = varobj_get_handle (argv[0]);
516 if (var == NULL)
8a3fe4f8 517 error (_("mi_cmd_var_assign: Variable object not found"));
fb40c209 518
d2562500 519 if (!varobj_editable_p (var))
8a3fe4f8 520 error (_("mi_cmd_var_assign: Variable object is not editable"));
fb40c209
AC
521
522 expression = xstrdup (argv[1]);
523
524 if (!varobj_set_value (var, expression))
98a29c7e 525 error (_("mi_cmd_var_assign: Could not assign expression to variable object"));
fb40c209
AC
526
527 ui_out_field_string (uiout, "value", varobj_get_value (var));
528 return MI_CMD_DONE;
529}
530
531enum mi_cmd_result
532mi_cmd_var_update (char *command, char **argv, int argc)
533{
534 struct varobj *var;
535 struct varobj **rootlist;
536 struct varobj **cr;
3a387118 537 struct cleanup *cleanup;
fb40c209
AC
538 char *name;
539 int nv;
1ecb4ee0 540 enum print_values print_values;
fb40c209 541
1ecb4ee0
DJ
542 if (argc != 1 && argc != 2)
543 error (_("mi_cmd_var_update: Usage: [PRINT_VALUES] NAME."));
544
545 if (argc == 1)
546 name = argv[0];
547 else
548 name = (argv[1]);
fb40c209 549
1ecb4ee0
DJ
550 if (argc == 2)
551 print_values = mi_parse_values_option (argv[0]);
552 else
553 print_values = PRINT_NO_VALUES;
fb40c209
AC
554
555 /* Check if the parameter is a "*" which means that we want
556 to update all variables */
557
558 if ((*name == '*') && (*(name + 1) == '\0'))
559 {
560 nv = varobj_list (&rootlist);
db9a518b 561 cleanup = make_cleanup (xfree, rootlist);
3a387118 562 if (mi_version (uiout) <= 1)
db9a518b 563 make_cleanup_ui_out_tuple_begin_end (uiout, "changelist");
3a387118 564 else
db9a518b 565 make_cleanup_ui_out_list_begin_end (uiout, "changelist");
fb40c209
AC
566 if (nv <= 0)
567 {
3a387118 568 do_cleanups (cleanup);
fb40c209
AC
569 return MI_CMD_DONE;
570 }
571 cr = rootlist;
572 while (*cr != NULL)
573 {
25d5ea92 574 varobj_update_one (*cr, print_values, 0 /* implicit */);
fb40c209
AC
575 cr++;
576 }
3a387118 577 do_cleanups (cleanup);
fb40c209
AC
578 }
579 else
580 {
581 /* Get varobj handle, if a valid var obj name was specified */
582 var = varobj_get_handle (name);
583 if (var == NULL)
8a3fe4f8 584 error (_("mi_cmd_var_update: Variable object not found"));
fb40c209 585
3a387118
JJ
586 if (mi_version (uiout) <= 1)
587 cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "changelist");
588 else
589 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist");
25d5ea92 590 varobj_update_one (var, print_values, 1 /* explicit */);
3a387118 591 do_cleanups (cleanup);
fb40c209 592 }
73a93a32 593 return MI_CMD_DONE;
fb40c209
AC
594}
595
8756216b 596/* Helper for mi_cmd_var_update(). */
fb40c209 597
8756216b 598static void
25d5ea92
VP
599varobj_update_one (struct varobj *var, enum print_values print_values,
600 int explicit)
fb40c209
AC
601{
602 struct varobj **changelist;
603 struct varobj **cc;
3a387118 604 struct cleanup *cleanup = NULL;
fb40c209
AC
605 int nc;
606
25d5ea92 607 nc = varobj_update (&var, &changelist, explicit);
fb40c209 608
8756216b
DP
609 /* nc >= 0 represents the number of changes reported into changelist.
610 nc < 0 means that an error occured or the the variable has
611 changed type (TYPE_CHANGED). */
73a93a32
JI
612
613 if (nc == 0)
8756216b
DP
614 return;
615 else if (nc < 0)
fb40c209 616 {
3a387118
JJ
617 if (mi_version (uiout) > 1)
618 cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
73a93a32 619 ui_out_field_string (uiout, "name", varobj_get_objname(var));
8756216b
DP
620
621 switch (nc)
622 {
623 case NOT_IN_SCOPE:
8756216b
DP
624 ui_out_field_string (uiout, "in_scope", "false");
625 break;
626 case INVALID:
627 ui_out_field_string (uiout, "in_scope", "invalid");
628 break;
629 case TYPE_CHANGED:
630 ui_out_field_string (uiout, "in_scope", "true");
631 ui_out_field_string (uiout, "new_type", varobj_get_type(var));
632 ui_out_field_int (uiout, "new_num_children",
633 varobj_get_num_children(var));
634 break;
635 }
3a387118
JJ
636 if (mi_version (uiout) > 1)
637 do_cleanups (cleanup);
73a93a32
JI
638 }
639 else
640 {
73a93a32
JI
641 cc = changelist;
642 while (*cc != NULL)
643 {
3a387118
JJ
644 if (mi_version (uiout) > 1)
645 cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
73a93a32 646 ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
1ecb4ee0
DJ
647 if (mi_print_value_p (varobj_get_gdb_type (*cc), print_values))
648 ui_out_field_string (uiout, "value", varobj_get_value (*cc));
73a93a32
JI
649 ui_out_field_string (uiout, "in_scope", "true");
650 ui_out_field_string (uiout, "type_changed", "false");
3a387118
JJ
651 if (mi_version (uiout) > 1)
652 do_cleanups (cleanup);
73a93a32
JI
653 cc++;
654 }
b8c9b27d 655 xfree (changelist);
fb40c209 656 }
fb40c209 657}