- cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
- ui_out_field_string (uiout, "name", varobj_get_objname (var));
- ui_out_field_string (uiout, "in_scope", "true");
- ui_out_field_string (uiout, "new_type", varobj_get_type(var));
- ui_out_field_int (uiout, "new_num_children",
- varobj_get_num_children(var));
- if (mi_version (uiout) > 1)
- do_cleanups (cleanup);
- }
- else
- {
-
- cc = changelist;
- while (*cc != NULL)
+ make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+ uiout->field_string ("name", varobj_get_objname (r->varobj));
+
+ switch (r->status)
+ {
+ case VAROBJ_IN_SCOPE:
+ if (mi_print_value_p (r->varobj, print_values))
+ {
+ std::string val = varobj_get_value (r->varobj);
+
+ uiout->field_string ("value", val.c_str ());
+ }
+ uiout->field_string ("in_scope", "true");
+ break;
+ case VAROBJ_NOT_IN_SCOPE:
+ uiout->field_string ("in_scope", "false");
+ break;
+ case VAROBJ_INVALID:
+ uiout->field_string ("in_scope", "invalid");
+ break;
+ }
+
+ if (r->status != VAROBJ_INVALID)
+ {
+ if (r->type_changed)
+ uiout->field_string ("type_changed", "true");
+ else
+ uiout->field_string ("type_changed", "false");
+ }
+
+ if (r->type_changed)
+ {
+ std::string type_name = varobj_get_type (r->varobj);
+
+ uiout->field_string ("new_type", type_name.c_str ());
+ }
+
+ if (r->type_changed || r->children_changed)
+ uiout->field_int ("new_num_children",
+ varobj_get_num_children (r->varobj));
+
+ gdb::unique_xmalloc_ptr<char> display_hint
+ = varobj_get_display_hint (r->varobj);
+ if (display_hint)
+ uiout->field_string ("displayhint", display_hint.get ());
+
+ if (varobj_is_dynamic_p (r->varobj))
+ uiout->field_int ("dynamic", 1);
+
+ varobj_get_child_range (r->varobj, &from, &to);
+ uiout->field_int ("has_more", varobj_has_more (r->varobj, to));
+
+ if (r->newobj)