Use ui_file_as_string in gdb/guile/
gdb/ChangeLog: 2016-11-08 Pedro Alves <palves@redhat.com> * guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use ui_file_as_string and adjust to use std::string. * guile/scm-disasm.c (gdbscm_arch_disassemble): Likewise. * guile/scm-frame.c (frscm_print_frame_smob): Likewise. * guile/scm-type.c (tyscm_type_name): Use ui_file_as_string and adjust to use std::string. Throw exception directly instead of returning it in EXCP output parameter. (tyscm_print_type_smob, gdbscm_type_print_name): Adjust to tyscm_type_name interface change. * guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print): Use ui_file_as_string and std::string.
This commit is contained in:
parent
09b0e4b047
commit
3ab692db7f
6 changed files with 40 additions and 52 deletions
|
@ -1,3 +1,17 @@
|
|||
2016-11-08 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use
|
||||
ui_file_as_string and adjust to use std::string.
|
||||
* guile/scm-disasm.c (gdbscm_arch_disassemble): Likewise.
|
||||
* guile/scm-frame.c (frscm_print_frame_smob): Likewise.
|
||||
* guile/scm-type.c (tyscm_type_name): Use ui_file_as_string and
|
||||
adjust to use std::string. Throw exception directly instead of
|
||||
returning it in EXCP output parameter.
|
||||
(tyscm_print_type_smob, gdbscm_type_print_name): Adjust to
|
||||
tyscm_type_name interface change.
|
||||
* guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print):
|
||||
Use ui_file_as_string and std::string.
|
||||
|
||||
2016-11-08 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* arm-tdep.c (_initialize_arm_tdep): Use ui_file_as_string and
|
||||
|
|
|
@ -981,7 +981,6 @@ gdbscm_breakpoint_commands (SCM self)
|
|||
struct ui_file *string_file;
|
||||
struct cleanup *chain;
|
||||
SCM result;
|
||||
char *cmdstr;
|
||||
|
||||
bp = bp_smob->bp;
|
||||
|
||||
|
@ -1004,9 +1003,8 @@ gdbscm_breakpoint_commands (SCM self)
|
|||
}
|
||||
END_CATCH
|
||||
|
||||
cmdstr = ui_file_xstrdup (string_file, &length);
|
||||
make_cleanup (xfree, cmdstr);
|
||||
result = gdbscm_scm_from_c_string (cmdstr);
|
||||
std::string cmdstr = ui_file_as_string (string_file);
|
||||
result = gdbscm_scm_from_c_string (cmdstr.c_str ());
|
||||
|
||||
do_cleanups (chain);
|
||||
return result;
|
||||
|
|
|
@ -282,7 +282,6 @@ gdbscm_arch_disassemble (SCM self, SCM start_scm, SCM rest)
|
|||
for (pc = start, i = 0; pc <= end && i < count; )
|
||||
{
|
||||
int insn_len = 0;
|
||||
char *as = NULL;
|
||||
struct ui_file *memfile = mem_fileopen ();
|
||||
struct cleanup *cleanups = make_cleanup_ui_file_delete (memfile);
|
||||
|
||||
|
@ -302,15 +301,14 @@ gdbscm_arch_disassemble (SCM self, SCM start_scm, SCM rest)
|
|||
}
|
||||
END_CATCH
|
||||
|
||||
as = ui_file_xstrdup (memfile, NULL);
|
||||
std::string as = ui_file_as_string (memfile);
|
||||
|
||||
result = scm_cons (dascm_make_insn (pc, as, insn_len),
|
||||
result = scm_cons (dascm_make_insn (pc, as.c_str (), insn_len),
|
||||
result);
|
||||
|
||||
pc += insn_len;
|
||||
i++;
|
||||
do_cleanups (cleanups);
|
||||
xfree (as);
|
||||
}
|
||||
|
||||
return scm_reverse_x (result, SCM_EOL);
|
||||
|
|
|
@ -157,16 +157,14 @@ frscm_print_frame_smob (SCM self, SCM port, scm_print_state *pstate)
|
|||
{
|
||||
frame_smob *f_smob = (frame_smob *) SCM_SMOB_DATA (self);
|
||||
struct ui_file *strfile;
|
||||
char *s;
|
||||
|
||||
gdbscm_printf (port, "#<%s ", frame_smob_name);
|
||||
|
||||
strfile = mem_fileopen ();
|
||||
fprint_frame_id (strfile, f_smob->frame_id);
|
||||
s = ui_file_xstrdup (strfile, NULL);
|
||||
gdbscm_printf (port, "%s", s);
|
||||
std::string s = ui_file_as_string (strfile);
|
||||
gdbscm_printf (port, "%s", s.c_str ());
|
||||
ui_file_delete (strfile);
|
||||
xfree (s);
|
||||
|
||||
scm_puts (">", port);
|
||||
|
||||
|
|
|
@ -99,16 +99,12 @@ tyscm_type_smob_type (type_smob *t_smob)
|
|||
return t_smob->type;
|
||||
}
|
||||
|
||||
/* Return the name of TYPE in expanded form.
|
||||
Space for the result is malloc'd, caller must free.
|
||||
If there's an error computing the name, the result is NULL and the
|
||||
exception is stored in *EXCP. */
|
||||
/* Return the name of TYPE in expanded form. If there's an error
|
||||
computing the name, throws the gdb exception with scm_throw. */
|
||||
|
||||
static char *
|
||||
tyscm_type_name (struct type *type, SCM *excp)
|
||||
static std::string
|
||||
tyscm_type_name (struct type *type)
|
||||
{
|
||||
char *name = NULL;
|
||||
|
||||
TRY
|
||||
{
|
||||
struct cleanup *old_chain;
|
||||
|
@ -119,17 +115,19 @@ tyscm_type_name (struct type *type, SCM *excp)
|
|||
|
||||
LA_PRINT_TYPE (type, "", stb, -1, 0, &type_print_raw_options);
|
||||
|
||||
name = ui_file_xstrdup (stb, NULL);
|
||||
std::string name = ui_file_as_string (stb);
|
||||
do_cleanups (old_chain);
|
||||
|
||||
return name;
|
||||
}
|
||||
CATCH (except, RETURN_MASK_ALL)
|
||||
{
|
||||
*excp = gdbscm_scm_from_gdb_exception (except);
|
||||
return NULL;
|
||||
SCM excp = gdbscm_scm_from_gdb_exception (except);
|
||||
gdbscm_throw (excp);
|
||||
}
|
||||
END_CATCH
|
||||
|
||||
return name;
|
||||
gdb_assert_not_reached ("no way to get here");
|
||||
}
|
||||
|
||||
/* Administrivia for type smobs. */
|
||||
|
@ -207,11 +205,7 @@ static int
|
|||
tyscm_print_type_smob (SCM self, SCM port, scm_print_state *pstate)
|
||||
{
|
||||
type_smob *t_smob = (type_smob *) SCM_SMOB_DATA (self);
|
||||
SCM exception;
|
||||
char *name = tyscm_type_name (t_smob->type, &exception);
|
||||
|
||||
if (name == NULL)
|
||||
gdbscm_throw (exception);
|
||||
std::string name = tyscm_type_name (t_smob->type);
|
||||
|
||||
/* pstate->writingp = zero if invoked by display/~A, and nonzero if
|
||||
invoked by write/~S. What to do here may need to evolve.
|
||||
|
@ -220,7 +214,7 @@ tyscm_print_type_smob (SCM self, SCM port, scm_print_state *pstate)
|
|||
if (pstate->writingp)
|
||||
gdbscm_printf (port, "#<%s ", type_smob_name);
|
||||
|
||||
scm_puts (name, port);
|
||||
scm_puts (name.c_str (), port);
|
||||
|
||||
if (pstate->writingp)
|
||||
scm_puts (">", port);
|
||||
|
@ -608,16 +602,8 @@ gdbscm_type_print_name (SCM self)
|
|||
type_smob *t_smob
|
||||
= tyscm_get_type_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
|
||||
struct type *type = t_smob->type;
|
||||
char *thetype;
|
||||
SCM exception, result;
|
||||
|
||||
thetype = tyscm_type_name (type, &exception);
|
||||
|
||||
if (thetype == NULL)
|
||||
gdbscm_throw (exception);
|
||||
|
||||
result = gdbscm_scm_from_c_string (thetype);
|
||||
xfree (thetype);
|
||||
std::string thetype = tyscm_type_name (type);
|
||||
SCM result = gdbscm_scm_from_c_string (thetype.c_str ());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -141,7 +141,6 @@ static int
|
|||
vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate)
|
||||
{
|
||||
value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (self);
|
||||
char *s = NULL;
|
||||
struct value_print_options opts;
|
||||
|
||||
if (pstate->writingp)
|
||||
|
@ -162,7 +161,9 @@ vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate)
|
|||
struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
|
||||
|
||||
common_val_print (v_smob->value, stb, 0, &opts, current_language);
|
||||
s = ui_file_xstrdup (stb, NULL);
|
||||
|
||||
std::string s = ui_file_as_string (stb);
|
||||
scm_puts (s.c_str (), port);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
}
|
||||
|
@ -172,12 +173,6 @@ vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate)
|
|||
}
|
||||
END_CATCH
|
||||
|
||||
if (s != NULL)
|
||||
{
|
||||
scm_puts (s, port);
|
||||
xfree (s);
|
||||
}
|
||||
|
||||
if (pstate->writingp)
|
||||
scm_puts (">", port);
|
||||
|
||||
|
@ -1282,7 +1277,7 @@ gdbscm_value_print (SCM self)
|
|||
= vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
|
||||
struct value *value = v_smob->value;
|
||||
struct value_print_options opts;
|
||||
char *s = NULL;
|
||||
std::string s;
|
||||
SCM result;
|
||||
|
||||
get_user_print_options (&opts);
|
||||
|
@ -1294,7 +1289,7 @@ gdbscm_value_print (SCM self)
|
|||
struct cleanup *old_chain = make_cleanup_ui_file_delete (stb);
|
||||
|
||||
common_val_print (value, stb, 0, &opts, current_language);
|
||||
s = ui_file_xstrdup (stb, NULL);
|
||||
s = ui_file_as_string (stb);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
}
|
||||
|
@ -1309,9 +1304,8 @@ gdbscm_value_print (SCM self)
|
|||
IWBN to use scm_take_locale_string here, but we'd have to temporarily
|
||||
override the default port conversion handler because contrary to
|
||||
documentation it doesn't necessarily free the input string. */
|
||||
result = scm_from_stringn (s, strlen (s), host_charset (),
|
||||
result = scm_from_stringn (s.c_str (), s.size (), host_charset (),
|
||||
SCM_FAILED_CONVERSION_QUESTION_MARK);
|
||||
xfree (s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue