}
/* String representations of gdb's format codes. */
-char *varobj_format_string[] =
+const char *varobj_format_string[] =
{ "natural", "binary", "decimal", "hexadecimal", "octal", "zero-hexadecimal" };
/* True if we want to allow Python-based pretty-printing. */
/* Generates an unique name that can be used for a varobj. */
-char *
+std::string
varobj_gen_name (void)
{
static int id = 0;
- char *obj_name;
/* Generate a name for this object. */
id++;
- obj_name = xstrprintf ("var%d", id);
-
- return obj_name;
+ return string_printf ("var%d", id);
}
/* Given an OBJNAME, returns the pointer to the corresponding varobj. Call
if (var->saved_item != NULL)
{
value_free (var->saved_item->value);
- xfree (var->saved_item);
+ delete var->saved_item;
var->saved_item = NULL;
}
}
can_mention ? cchanged : NULL, i,
item);
- xfree (item);
+ delete item;
}
else
{
gdbpy_enter_varobj enter_py (var);
mainmod = PyImport_AddModule ("__main__");
- gdbpy_ref globals (PyModule_GetDict (mainmod));
+ gdbpy_ref<> globals (PyModule_GetDict (mainmod));
Py_INCREF (globals.get ());
- gdbpy_ref constructor (PyRun_String (visualizer, Py_eval_input,
- globals.get (), globals.get ()));
+ gdbpy_ref<> constructor (PyRun_String (visualizer, Py_eval_input,
+ globals.get (), globals.get ()));
if (constructor == NULL)
{
type = check_typedef (type);
- if (TYPE_CODE (type) == TYPE_CODE_REF)
+ if (TYPE_IS_REFERENCE (type))
type = get_target_type (type);
type = check_typedef (type);
struct value *new_val = NULL;
struct varobj *var = *var_handle;
int within_scope = 0;
- struct cleanup *back_to;
/* Only root variables can be updated... */
if (!is_root_p (var))
/* Not a root var. */
return NULL;
- back_to = make_cleanup_restore_current_thread ();
+ scoped_restore_current_thread restore_thread;
/* Determine whether the variable is still around. */
if (var->root->valid_block == NULL || var->root->floating)
END_CATCH
}
- do_cleanups (back_to);
-
return new_val;
}
enum varobj_display_formats format,
const struct varobj *var)
{
- struct ui_file *stb;
- struct cleanup *old_chain;
struct value_print_options opts;
struct type *type = NULL;
long len = 0;
if (value == NULL)
return std::string ();
- stb = mem_fileopen ();
- old_chain = make_cleanup_ui_file_delete (stb);
-
+ string_file stb;
std::string thevalue;
#if HAVE_PYTHON
/* First check to see if we have any children at all. If so,
we simply return {...}. */
if (dynamic_varobj_has_child_method (var))
- {
- do_cleanups (old_chain);
- return xstrdup ("{...}");
- }
+ return "{...}";
if (PyObject_HasAttr (value_formatter, gdbpy_to_string_cst))
{
struct value *replacement;
- gdbpy_ref output (apply_varobj_pretty_printer (value_formatter,
- &replacement,
- stb));
+ gdbpy_ref<> output (apply_varobj_pretty_printer (value_formatter,
+ &replacement,
+ &stb));
/* If we have string like output ... */
if (output != NULL)
type = builtin_type (gdbarch)->builtin_char;
if (!string_print)
- {
- do_cleanups (old_chain);
- return thevalue;
- }
+ return thevalue;
}
else
gdbpy_print_stack ();
/* If the THEVALUE has contents, it is a regular string. */
if (!thevalue.empty ())
- LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue.c_str (),
+ LA_PRINT_STRING (&stb, type, (gdb_byte *) thevalue.c_str (),
len, encoding.get (), 0, &opts);
else if (string_print)
/* Otherwise, if string_print is set, and it is not a regular
string, it is a lazy string. */
- val_print_string (type, encoding.get (), str_addr, len, stb, &opts);
+ val_print_string (type, encoding.get (), str_addr, len, &stb, &opts);
else
/* All other cases. */
- common_val_print (value, stb, 0, &opts, current_language);
+ common_val_print (value, &stb, 0, &opts, current_language);
- thevalue = ui_file_as_string (stb);
-
- do_cleanups (old_chain);
- return thevalue;
+ return std::move (stb.string ());
}
int
{
all_root_varobjs (varobj_invalidate_iter, NULL);
}
-\f
-extern void _initialize_varobj (void);
+
void
_initialize_varobj (void)
{