/* Print values for GNU debugger GDB.
- Copyright (C) 1986-2016 Free Software Foundation, Inc.
+ Copyright (C) 1986-2017 Free Software Foundation, Inc.
This file is part of GDB.
#include "charset.h"
#include "arch-utils.h"
#include "cli/cli-utils.h"
+#include "cli/cli-script.h"
#include "format.h"
#include "source.h"
/* User specified format, so don't look to the type to tell us
what to do. */
val_print_scalar_formatted (type,
- value_contents_for_printing (val),
value_embedded_offset (val),
val,
options, size, stream);
int
print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
struct ui_file *stream,
- int do_demangle, char *leadin)
+ int do_demangle, const char *leadin)
{
char *name = NULL;
char *filename = NULL;
/* The vector PCS is used to store instruction addresses within
a pc range. */
CORE_ADDR loop_start, loop_end, p;
- VEC (CORE_ADDR) *pcs = NULL;
+ std::vector<CORE_ADDR> pcs;
struct symtab_and_line sal;
- struct cleanup *cleanup = make_cleanup (VEC_cleanup (CORE_ADDR), &pcs);
*inst_read = 0;
loop_start = loop_end = addr;
instructions from INST_COUNT, and go to the next iteration. */
do
{
- VEC_truncate (CORE_ADDR, pcs, 0);
+ pcs.clear ();
sal = find_pc_sect_line (loop_start, NULL, 1);
if (sal.line <= 0)
{
LOOP_START to LOOP_END. */
for (p = loop_start; p < loop_end;)
{
- VEC_safe_push (CORE_ADDR, pcs, p);
+ pcs.push_back (p);
p += gdb_insn_length (gdbarch, p);
}
- inst_count -= VEC_length (CORE_ADDR, pcs);
- *inst_read += VEC_length (CORE_ADDR, pcs);
+ inst_count -= pcs.size ();
+ *inst_read += pcs.size ();
}
while (inst_count > 0);
The case when the length of PCS is 0 means that we reached an area for
which line info is not available. In such case, we return LOOP_START,
which was the lowest instruction address that had line info. */
- p = VEC_length (CORE_ADDR, pcs) > 0
- ? VEC_index (CORE_ADDR, pcs, -inst_count)
- : loop_start;
+ p = pcs.size () > 0 ? pcs[-inst_count] : loop_start;
/* INST_READ includes all instruction addresses in a pc range. Need to
exclude the beginning part up to the address we're returning. That
if (inst_count < 0)
*inst_read += inst_count;
- do_cleanups (cleanup);
return p;
}
if (from_tty)
*exp = 0;
val = evaluate_expression (expr.get ());
- if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF)
+ if (TYPE_IS_REFERENCE (value_type (val)))
val = coerce_ref (val);
/* In rvalue contexts, such as this, functions are coerced into
pointers to functions. This makes "x/i main" work. */
newobj = new display ();
newobj->exp_string = xstrdup (exp);
- newobj->exp = gdb::move (expr);
+ newobj->exp = std::move (expr);
newobj->block = innermost_block;
newobj->pspace = current_program_space;
newobj->number = ++display_number;
static void
eval_command (char *arg, int from_tty)
{
- struct ui_file *ui_out = mem_fileopen ();
- struct cleanup *cleanups = make_cleanup_ui_file_delete (ui_out);
- char *expanded;
-
- ui_printf (arg, ui_out);
+ string_file stb;
- expanded = ui_file_xstrdup (ui_out, NULL);
- make_cleanup (xfree, expanded);
+ ui_printf (arg, &stb);
- execute_command (expanded, from_tty);
+ std::string expanded = insert_user_defined_cmd_args (stb.c_str ());
- do_cleanups (cleanups);
+ execute_command (&expanded[0], from_tty);
}
void