gdb/ChangeLog
2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com> * mi/mi-cmd-var.c: Include "mi-getopt.h". (mi_parse_format): New. Factored out from mi_cmd_var_set_format. (mi_cmd_var_set_format): Use new mi_parse_format. (mi_cmd_var_evaluate_expression): Support for -f option to specify format. * Makefile.in (mi-cmd-var.o): Update dependencies. * varobj.h (varobj_get_formatted_value): Declare. * varobj.c (my_value_of_variable): Added format parameter. (cplus_value_of_variable): Likewise. (java_value_of_variable): Likewise. (c_value_of_variable): Likewise. Evaluate expression based on format parameter. (struct language_specific): Add format parameter to function member *value_of_variable. (varobj_get_formatted_value): New. (varobj_get_value): Added format parameter to method call. gdb/doc/ChangeLog 2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com> * gdb.texinfo (GDB/MI Variable Objects): Add anchor to -var-set-format. Add -f option to -var-evaluate-expression. gdb/testsuite/ChangeLog 2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com> * gdb.mi/mi2-var-display.exp: Added tests for the new -f option of -var-evaluate-expression. * gdb.mi/mi2-var-display.exp: Likewise.
This commit is contained in:
parent
cdb0b8f565
commit
de051565df
10 changed files with 241 additions and 46 deletions
|
@ -1,3 +1,23 @@
|
||||||
|
2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com>
|
||||||
|
|
||||||
|
* mi/mi-cmd-var.c: Include "mi-getopt.h".
|
||||||
|
(mi_parse_format): New. Factored out from mi_cmd_var_set_format.
|
||||||
|
(mi_cmd_var_set_format): Use new mi_parse_format.
|
||||||
|
(mi_cmd_var_evaluate_expression): Support for -f option to specify
|
||||||
|
format.
|
||||||
|
* Makefile.in (mi-cmd-var.o): Update dependencies.
|
||||||
|
|
||||||
|
* varobj.h (varobj_get_formatted_value): Declare.
|
||||||
|
* varobj.c (my_value_of_variable): Added format parameter.
|
||||||
|
(cplus_value_of_variable): Likewise.
|
||||||
|
(java_value_of_variable): Likewise.
|
||||||
|
(c_value_of_variable): Likewise. Evaluate expression based
|
||||||
|
on format parameter.
|
||||||
|
(struct language_specific): Add format parameter to function member
|
||||||
|
*value_of_variable.
|
||||||
|
(varobj_get_formatted_value): New.
|
||||||
|
(varobj_get_value): Added format parameter to method call.
|
||||||
|
|
||||||
2008-04-08 Joel Brobecker <brobecker@adacore.com>
|
2008-04-08 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* stabsread.c (cleanup_undefined_types_noname): Manually set the
|
* stabsread.c (cleanup_undefined_types_noname): Manually set the
|
||||||
|
|
|
@ -3219,7 +3219,7 @@ mi-cmd-target.o: $(srcdir)/mi/mi-cmd-target.c $(defs_h) $(mi_cmds_h) \
|
||||||
$(mi_getopt_h) $(remote_h)
|
$(mi_getopt_h) $(remote_h)
|
||||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-target.c
|
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-target.c
|
||||||
mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \
|
mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \
|
||||||
$(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h)
|
$(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h) $(mi_getopt_h)
|
||||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-var.c
|
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-var.c
|
||||||
mi-console.o: $(srcdir)/mi/mi-console.c $(defs_h) $(mi_console_h) \
|
mi-console.o: $(srcdir)/mi/mi-console.c $(defs_h) $(mi_console_h) \
|
||||||
$(gdb_string_h)
|
$(gdb_string_h)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (GDB/MI Variable Objects): Add anchor to
|
||||||
|
-var-set-format. Add -f option to -var-evaluate-expression.
|
||||||
|
|
||||||
2008-04-03 Joel Brobecker <brobecker@adacore.com>
|
2008-04-03 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* gdb.texinfo (Breakpoint Menus): Delete. Contents moved inside
|
* gdb.texinfo (Breakpoint Menus): Delete. Contents moved inside
|
||||||
|
|
|
@ -20034,6 +20034,7 @@ Returns an error if the object @var{name} is not found.
|
||||||
Sets the output format for the value of the object @var{name} to be
|
Sets the output format for the value of the object @var{name} to be
|
||||||
@var{format-spec}.
|
@var{format-spec}.
|
||||||
|
|
||||||
|
@anchor{-var-set-format}
|
||||||
The syntax for the @var{format-spec} is as follows:
|
The syntax for the @var{format-spec} is as follows:
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
|
@ -20210,12 +20211,16 @@ where @var{attr} is @code{@{ @{ editable | noneditable @} | TBD @}}.
|
||||||
@subsubheading Synopsis
|
@subsubheading Synopsis
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
-var-evaluate-expression @var{name}
|
-var-evaluate-expression [-f @var{format-spec}] @var{name}
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
Evaluates the expression that is represented by the specified variable
|
Evaluates the expression that is represented by the specified variable
|
||||||
object and returns its value as a string. The format of the
|
object and returns its value as a string. The format of the string
|
||||||
string can be changed using the @code{-var-set-format} command.
|
can be specified with the @samp{-f} option. The possible values of
|
||||||
|
this option are the same as for @code{-var-set-format}
|
||||||
|
(@pxref{-var-set-format}). If the @samp{-f} option is not specified,
|
||||||
|
the current display format will be used. The current display format
|
||||||
|
can be changed using the @code{-var-set-format} command.
|
||||||
|
|
||||||
@smallexample
|
@smallexample
|
||||||
value=@var{value}
|
value=@var{value}
|
||||||
|
@ -20268,7 +20273,7 @@ be a root variable object. Here, ``changed'' means that the result of
|
||||||
object names, all existing variable objects are updated, except
|
object names, all existing variable objects are updated, except
|
||||||
for frozen ones (@pxref{-var-set-frozen}). The option
|
for frozen ones (@pxref{-var-set-frozen}). The option
|
||||||
@var{print-values} determines whether both names and values, or just
|
@var{print-values} determines whether both names and values, or just
|
||||||
names are printed. The possible values of this options are the same
|
names are printed. The possible values of this option are the same
|
||||||
as for @code{-var-list-children} (@pxref{-var-list-children}). It is
|
as for @code{-var-list-children} (@pxref{-var-list-children}). It is
|
||||||
recommended to use the @samp{--all-values} option, to reduce the
|
recommended to use the @samp{--all-values} option, to reduce the
|
||||||
number of MI commands needed on each program stop.
|
number of MI commands needed on each program stop.
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
|
#include "mi-getopt.h"
|
||||||
|
|
||||||
const char mi_no_values[] = "--no-values";
|
const char mi_no_values[] = "--no-values";
|
||||||
const char mi_simple_values[] = "--simple-values";
|
const char mi_simple_values[] = "--simple-values";
|
||||||
|
@ -195,13 +196,37 @@ mi_cmd_var_delete (char *command, char **argv, int argc)
|
||||||
return MI_CMD_DONE;
|
return MI_CMD_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Parse a string argument into a format value. */
|
||||||
|
|
||||||
|
static enum varobj_display_formats
|
||||||
|
mi_parse_format (const char *arg)
|
||||||
|
{
|
||||||
|
if (arg != NULL)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = strlen (arg);
|
||||||
|
|
||||||
|
if (strncmp (arg, "natural", len) == 0)
|
||||||
|
return FORMAT_NATURAL;
|
||||||
|
else if (strncmp (arg, "binary", len) == 0)
|
||||||
|
return FORMAT_BINARY;
|
||||||
|
else if (strncmp (arg, "decimal", len) == 0)
|
||||||
|
return FORMAT_DECIMAL;
|
||||||
|
else if (strncmp (arg, "hexadecimal", len) == 0)
|
||||||
|
return FORMAT_HEXADECIMAL;
|
||||||
|
else if (strncmp (arg, "octal", len) == 0)
|
||||||
|
return FORMAT_OCTAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
error (_("Must specify the format as: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""));
|
||||||
|
}
|
||||||
|
|
||||||
enum mi_cmd_result
|
enum mi_cmd_result
|
||||||
mi_cmd_var_set_format (char *command, char **argv, int argc)
|
mi_cmd_var_set_format (char *command, char **argv, int argc)
|
||||||
{
|
{
|
||||||
enum varobj_display_formats format;
|
enum varobj_display_formats format;
|
||||||
int len;
|
|
||||||
struct varobj *var;
|
struct varobj *var;
|
||||||
char *formspec;
|
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
error (_("mi_cmd_var_set_format: Usage: NAME FORMAT."));
|
error (_("mi_cmd_var_set_format: Usage: NAME FORMAT."));
|
||||||
|
@ -212,25 +237,8 @@ mi_cmd_var_set_format (char *command, char **argv, int argc)
|
||||||
if (var == NULL)
|
if (var == NULL)
|
||||||
error (_("mi_cmd_var_set_format: Variable object not found"));
|
error (_("mi_cmd_var_set_format: Variable object not found"));
|
||||||
|
|
||||||
formspec = argv[1];
|
format = mi_parse_format (argv[1]);
|
||||||
if (formspec == NULL)
|
|
||||||
error (_("mi_cmd_var_set_format: Must specify the format as: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""));
|
|
||||||
|
|
||||||
len = strlen (formspec);
|
|
||||||
|
|
||||||
if (strncmp (formspec, "natural", len) == 0)
|
|
||||||
format = FORMAT_NATURAL;
|
|
||||||
else if (strncmp (formspec, "binary", len) == 0)
|
|
||||||
format = FORMAT_BINARY;
|
|
||||||
else if (strncmp (formspec, "decimal", len) == 0)
|
|
||||||
format = FORMAT_DECIMAL;
|
|
||||||
else if (strncmp (formspec, "hexadecimal", len) == 0)
|
|
||||||
format = FORMAT_HEXADECIMAL;
|
|
||||||
else if (strncmp (formspec, "octal", len) == 0)
|
|
||||||
format = FORMAT_OCTAL;
|
|
||||||
else
|
|
||||||
error (_("mi_cmd_var_set_format: Unknown display format: must be: \"natural\", \"binary\", \"decimal\", \"hexadecimal\", or \"octal\""));
|
|
||||||
|
|
||||||
/* Set the format of VAR to given format */
|
/* Set the format of VAR to given format */
|
||||||
varobj_set_display_format (var, format);
|
varobj_set_display_format (var, format);
|
||||||
|
|
||||||
|
@ -493,15 +501,58 @@ mi_cmd_var_evaluate_expression (char *command, char **argv, int argc)
|
||||||
{
|
{
|
||||||
struct varobj *var;
|
struct varobj *var;
|
||||||
|
|
||||||
if (argc != 1)
|
enum varobj_display_formats format;
|
||||||
error (_("mi_cmd_var_evaluate_expression: Usage: NAME."));
|
int formatFound;
|
||||||
|
int optind;
|
||||||
|
char *optarg;
|
||||||
|
|
||||||
|
enum opt
|
||||||
|
{
|
||||||
|
OP_FORMAT
|
||||||
|
};
|
||||||
|
static struct mi_opt opts[] =
|
||||||
|
{
|
||||||
|
{"f", OP_FORMAT, 1},
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
/* Get varobj handle, if a valid var obj name was specified */
|
/* Parse arguments */
|
||||||
var = varobj_get_handle (argv[0]);
|
format = FORMAT_NATURAL;
|
||||||
|
formatFound = 0;
|
||||||
|
optind = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
int opt = mi_getopt ("-var-evaluate-expression", argc, argv, opts, &optind, &optarg);
|
||||||
|
if (opt < 0)
|
||||||
|
break;
|
||||||
|
switch ((enum opt) opt)
|
||||||
|
{
|
||||||
|
case OP_FORMAT:
|
||||||
|
if (formatFound)
|
||||||
|
error (_("Cannot specify format more than once"));
|
||||||
|
|
||||||
|
format = mi_parse_format (optarg);
|
||||||
|
formatFound = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind >= argc)
|
||||||
|
error (_("Usage: [-f FORMAT] NAME"));
|
||||||
|
|
||||||
|
if (optind < argc - 1)
|
||||||
|
error (_("Garbage at end of command"));
|
||||||
|
|
||||||
|
/* Get varobj handle, if a valid var obj name was specified */
|
||||||
|
var = varobj_get_handle (argv[optind]);
|
||||||
if (var == NULL)
|
if (var == NULL)
|
||||||
error (_("mi_cmd_var_evaluate_expression: Variable object not found"));
|
error (_("Variable object not found"));
|
||||||
|
|
||||||
|
if (formatFound)
|
||||||
|
ui_out_field_string (uiout, "value", varobj_get_formatted_value (var, format));
|
||||||
|
else
|
||||||
|
ui_out_field_string (uiout, "value", varobj_get_value (var));
|
||||||
|
|
||||||
ui_out_field_string (uiout, "value", varobj_get_value (var));
|
|
||||||
return MI_CMD_DONE;
|
return MI_CMD_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2008-04-09 Marc Khouzam <marc.khouzam@ericsson.com>
|
||||||
|
|
||||||
|
* gdb.mi/mi2-var-display.exp: Added tests for the new -f
|
||||||
|
option of -var-evaluate-expression.
|
||||||
|
* gdb.mi/mi2-var-display.exp: Likewise.
|
||||||
|
|
||||||
2008-04-07 Vladimir Prus <vladimir@codesourcery.com>
|
2008-04-07 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
Introduce test setup helpers.
|
Introduce test setup helpers.
|
||||||
|
|
|
@ -161,6 +161,50 @@ mi_gdb_test "-var-evaluate-expression foo" \
|
||||||
"\\^done,value=\"3\"" \
|
"\\^done,value=\"3\"" \
|
||||||
"eval variable foo"
|
"eval variable foo"
|
||||||
|
|
||||||
|
|
||||||
|
# Test: c_variable-6.19
|
||||||
|
# Desc: check optional format parameter of var-evaluate-expression
|
||||||
|
# and check that current format is not changed
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f hex foo" \
|
||||||
|
"\\^done,value=\"0x3\"" \
|
||||||
|
"eval variable foo in hex"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in hex"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f octal foo" \
|
||||||
|
"\\^done,value=\"03\"" \
|
||||||
|
"eval variable foo in octal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in octal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f decimal foo" \
|
||||||
|
"\\^done,value=\"3\"" \
|
||||||
|
"eval variable foo in decimal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in decimal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f nat foo" \
|
||||||
|
"\\^done,value=\"0x3\"" \
|
||||||
|
"eval variable foo in natural"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in natural"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f bin foo" \
|
||||||
|
"\\^done,value=\"11\"" \
|
||||||
|
"eval variable foo in binary"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in binary"
|
||||||
|
|
||||||
mi_gdb_test "-var-delete foo" \
|
mi_gdb_test "-var-delete foo" \
|
||||||
"\\^done,ndeleted=\"1\"" \
|
"\\^done,ndeleted=\"1\"" \
|
||||||
"delete var foo"
|
"delete var foo"
|
||||||
|
|
|
@ -161,6 +161,49 @@ mi_gdb_test "-var-evaluate-expression foo" \
|
||||||
"\\^done,value=\"3\"" \
|
"\\^done,value=\"3\"" \
|
||||||
"eval variable foo"
|
"eval variable foo"
|
||||||
|
|
||||||
|
# Test: c_variable-6.19
|
||||||
|
# Desc: check optional format parameter of var-evaluate-expression
|
||||||
|
# and check that current format is not changed
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f hex foo" \
|
||||||
|
"\\^done,value=\"0x3\"" \
|
||||||
|
"eval variable foo in hex"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in hex"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f octal foo" \
|
||||||
|
"\\^done,value=\"03\"" \
|
||||||
|
"eval variable foo in octal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in octal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f decimal foo" \
|
||||||
|
"\\^done,value=\"3\"" \
|
||||||
|
"eval variable foo in decimal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in decimal"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f nat foo" \
|
||||||
|
"\\^done,value=\"0x3\"" \
|
||||||
|
"eval variable foo in natural"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in natural"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-evaluate-expression -f bin foo" \
|
||||||
|
"\\^done,value=\"11\"" \
|
||||||
|
"eval variable foo in binary"
|
||||||
|
|
||||||
|
mi_gdb_test "-var-show-format foo" \
|
||||||
|
"\\^done,format=\"decimal\"" \
|
||||||
|
"show format variable foo after eval in binary"
|
||||||
|
|
||||||
mi_gdb_test "-var-delete foo" \
|
mi_gdb_test "-var-delete foo" \
|
||||||
"\\^done,ndeleted=\"1\"" \
|
"\\^done,ndeleted=\"1\"" \
|
||||||
"delete var foo"
|
"delete var foo"
|
||||||
|
|
46
gdb/varobj.c
46
gdb/varobj.c
|
@ -228,7 +228,8 @@ static struct value *value_of_root (struct varobj **var_handle, int *);
|
||||||
|
|
||||||
static struct value *value_of_child (struct varobj *parent, int index);
|
static struct value *value_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static char *my_value_of_variable (struct varobj *var);
|
static char *my_value_of_variable (struct varobj *var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
|
|
||||||
static char *value_get_print_value (struct value *value,
|
static char *value_get_print_value (struct value *value,
|
||||||
enum varobj_display_formats format);
|
enum varobj_display_formats format);
|
||||||
|
@ -253,7 +254,8 @@ static struct value *c_value_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static struct type *c_type_of_child (struct varobj *parent, int index);
|
static struct type *c_type_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static char *c_value_of_variable (struct varobj *var);
|
static char *c_value_of_variable (struct varobj *var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
|
|
||||||
/* C++ implementation */
|
/* C++ implementation */
|
||||||
|
|
||||||
|
@ -273,7 +275,8 @@ static struct value *cplus_value_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static struct type *cplus_type_of_child (struct varobj *parent, int index);
|
static struct type *cplus_type_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static char *cplus_value_of_variable (struct varobj *var);
|
static char *cplus_value_of_variable (struct varobj *var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
|
|
||||||
/* Java implementation */
|
/* Java implementation */
|
||||||
|
|
||||||
|
@ -291,7 +294,8 @@ static struct value *java_value_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static struct type *java_type_of_child (struct varobj *parent, int index);
|
static struct type *java_type_of_child (struct varobj *parent, int index);
|
||||||
|
|
||||||
static char *java_value_of_variable (struct varobj *var);
|
static char *java_value_of_variable (struct varobj *var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
|
|
||||||
/* The language specific vector */
|
/* The language specific vector */
|
||||||
|
|
||||||
|
@ -324,7 +328,8 @@ struct language_specific
|
||||||
struct type *(*type_of_child) (struct varobj * parent, int index);
|
struct type *(*type_of_child) (struct varobj * parent, int index);
|
||||||
|
|
||||||
/* The current value of VAR. */
|
/* The current value of VAR. */
|
||||||
char *(*value_of_variable) (struct varobj * var);
|
char *(*value_of_variable) (struct varobj * var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Array of known source language routines. */
|
/* Array of known source language routines. */
|
||||||
|
@ -857,10 +862,17 @@ varobj_get_attributes (struct varobj *var)
|
||||||
return attributes;
|
return attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
varobj_get_formatted_value (struct varobj *var,
|
||||||
|
enum varobj_display_formats format)
|
||||||
|
{
|
||||||
|
return my_value_of_variable (var, format);
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
varobj_get_value (struct varobj *var)
|
varobj_get_value (struct varobj *var)
|
||||||
{
|
{
|
||||||
return my_value_of_variable (var);
|
return my_value_of_variable (var, var->format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the value of an object variable (if it is editable) to the
|
/* Set the value of an object variable (if it is editable) to the
|
||||||
|
@ -1777,10 +1789,10 @@ value_of_child (struct varobj *parent, int index)
|
||||||
|
|
||||||
/* GDB already has a command called "value_of_variable". Sigh. */
|
/* GDB already has a command called "value_of_variable". Sigh. */
|
||||||
static char *
|
static char *
|
||||||
my_value_of_variable (struct varobj *var)
|
my_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
||||||
{
|
{
|
||||||
if (var->root->is_valid)
|
if (var->root->is_valid)
|
||||||
return (*var->root->lang->value_of_variable) (var);
|
return (*var->root->lang->value_of_variable) (var, format);
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2253,7 +2265,7 @@ c_type_of_child (struct varobj *parent, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
c_value_of_variable (struct varobj *var)
|
c_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
||||||
{
|
{
|
||||||
/* BOGUS: if val_print sees a struct/class, or a reference to one,
|
/* BOGUS: if val_print sees a struct/class, or a reference to one,
|
||||||
it will print out its children instead of "{...}". So we need to
|
it will print out its children instead of "{...}". So we need to
|
||||||
|
@ -2298,7 +2310,13 @@ c_value_of_variable (struct varobj *var)
|
||||||
|
|
||||||
gdb_assert (varobj_value_is_changeable_p (var));
|
gdb_assert (varobj_value_is_changeable_p (var));
|
||||||
gdb_assert (!value_lazy (var->value));
|
gdb_assert (!value_lazy (var->value));
|
||||||
return xstrdup (var->print_value);
|
|
||||||
|
/* If the specified format is the current one,
|
||||||
|
we can reuse print_value */
|
||||||
|
if (format == var->format)
|
||||||
|
return xstrdup (var->print_value);
|
||||||
|
else
|
||||||
|
return value_get_print_value (var->value, format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2624,7 +2642,7 @@ cplus_type_of_child (struct varobj *parent, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
cplus_value_of_variable (struct varobj *var)
|
cplus_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* If we have one of our special types, don't print out
|
/* If we have one of our special types, don't print out
|
||||||
|
@ -2632,7 +2650,7 @@ cplus_value_of_variable (struct varobj *var)
|
||||||
if (CPLUS_FAKE_CHILD (var))
|
if (CPLUS_FAKE_CHILD (var))
|
||||||
return xstrdup ("");
|
return xstrdup ("");
|
||||||
|
|
||||||
return c_value_of_variable (var);
|
return c_value_of_variable (var, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Java */
|
/* Java */
|
||||||
|
@ -2707,9 +2725,9 @@ java_type_of_child (struct varobj *parent, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
java_value_of_variable (struct varobj *var)
|
java_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
||||||
{
|
{
|
||||||
return cplus_value_of_variable (var);
|
return cplus_value_of_variable (var, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void _initialize_varobj (void);
|
extern void _initialize_varobj (void);
|
||||||
|
|
|
@ -111,6 +111,9 @@ extern enum varobj_languages varobj_get_language (struct varobj *var);
|
||||||
|
|
||||||
extern int varobj_get_attributes (struct varobj *var);
|
extern int varobj_get_attributes (struct varobj *var);
|
||||||
|
|
||||||
|
extern char *varobj_get_formatted_value (struct varobj *var,
|
||||||
|
enum varobj_display_formats format);
|
||||||
|
|
||||||
extern char *varobj_get_value (struct varobj *var);
|
extern char *varobj_get_value (struct varobj *var);
|
||||||
|
|
||||||
extern int varobj_set_value (struct varobj *var, char *expression);
|
extern int varobj_set_value (struct varobj *var, char *expression);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue