/* Definitions for values of C expressions, for GDB.
- Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1986-2012 Free Software Foundation, Inc.
This file is part of GDB.
bitfields. */
struct value *value_parent (struct value *);
+extern void set_value_parent (struct value *value, struct value *parent);
/* Describes offset of a value within lval of a structure in bytes.
If lval == lval_memory, this is an offset to the address. If lval
extern void set_value_enclosing_type (struct value *val,
struct type *new_type);
+/* Returns value_type or value_enclosing_type depending on
+ value_print_options.objectprint.
+
+ If RESOLVE_SIMPLE_TYPES is 0 the enclosing type will be resolved
+ only for pointers and references, else it will be returned
+ for all the types (e.g. structures). This option is useful
+ to prevent retrieving enclosing type for the base classes fields.
+
+ REAL_TYPE_FOUND is used to inform whether the real type was found
+ (or just static type was used). The NULL may be passed if it is not
+ necessary. */
+
+extern struct type *value_actual_type (struct value *value,
+ int resolve_simple_types,
+ int *real_type_found);
+
extern int value_pointed_to_offset (struct value *value);
extern void set_value_pointed_to_offset (struct value *value, int val);
extern int value_embedded_offset (struct value *value);
{
/* Fill in VALUE's contents. This is used to "un-lazy" values. If
a problem arises in obtaining VALUE's bits, this function should
- call 'error'. */
+ call 'error'. If it is NULL value_fetch_lazy on "un-lazy"
+ non-optimized-out value is an internal error. */
void (*read) (struct value *v);
/* Handle an assignment TOVAL = FROMVAL by writing the value of
FROMVAL to TOVAL's location. The contents of TOVAL have not yet
been updated. If a problem arises in doing so, this function
- should call 'error'. */
+ should call 'error'. If it is NULL such TOVAL assignment is an error as
+ TOVAL is not considered as an lvalue. */
void (*write) (struct value *toval, struct value *fromval);
/* Check the validity of some bits in VALUE. This should return 1
will fall back to ordinary indirection. */
struct value *(*indirect) (struct value *value);
+ /* If non-NULL, this is used to implement reference resolving for
+ this value. This method may return NULL, in which case coerce_ref
+ will fall back to ordinary references resolving. */
+ struct value *(*coerce_ref) (const struct value *value);
+
/* If non-NULL, this is used to determine whether the indicated bits
of VALUE are a synthetic pointer. */
int (*check_synthetic_pointer) (const struct value *value,
const struct lval_funcs *funcs,
void *closure);
+/* Helper function to check the validity of some bits of a value.
+
+ If TYPE represents some aggregate type (e.g., a structure), return 1.
+
+ Otherwise, any of the bytes starting at OFFSET and extending for
+ TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
+ return 0. The checking is done using FUNCS.
+
+ Otherwise, return 1. */
+
+extern int valprint_check_validity (struct ui_file *stream, struct type *type,
+ int embedded_offset,
+ const struct value *val);
+
extern struct value *allocate_optimized_out_value (struct type *type);
/* If VALUE is lval_computed, return its lval_funcs structure. */
-extern const struct lval_funcs *value_computed_funcs (struct value *value);
+extern const struct lval_funcs *value_computed_funcs (const struct value *);
/* If VALUE is lval_computed, return its closure. The meaning of the
returned value depends on the functions VALUE uses. */
extern enum lval_type *deprecated_value_lval_hack (struct value *);
#define VALUE_LVAL(val) (*deprecated_value_lval_hack (val))
+/* Like VALUE_LVAL, except the parameter can be const. */
+extern enum lval_type value_lval_const (const struct value *value);
+
/* If lval == lval_memory, return the address in the inferior. If
lval == lval_register, return the byte offset into the registers
structure. Otherwise, return 0. The returned address
extern short *deprecated_value_regnum_hack (struct value *);
#define VALUE_REGNUM(val) (*deprecated_value_regnum_hack (val))
+/* Return value after lval_funcs->coerce_ref (after check_typedef). Return
+ NULL if lval_funcs->coerce_ref is not applicable for whatever reason. */
+
+extern struct value *coerce_ref_if_computed (const struct value *arg);
+
+/* Setup a new value type and enclosing value type for dereferenced value VALUE.
+ ENC_TYPE is the new enclosing type that should be set. ORIGINAL_TYPE and
+ ORIGINAL_VAL are the type and value of the original reference or pointer.
+
+ Note, that VALUE is modified by this function.
+
+ It is a common implementation for coerce_ref and value_ind. */
+
+extern struct value * readjust_indirect_value_type (struct value *value,
+ struct type *enc_type,
+ struct type *original_type,
+ struct value *original_val);
+
/* Convert a REF to the object referenced. */
extern struct value *coerce_ref (struct value *value);
struct frame_info;
struct fn_field;
-extern void print_address_demangle (struct gdbarch *, CORE_ADDR,
- struct ui_file *, int);
+extern int print_address_demangle (const struct value_print_options *,
+ struct gdbarch *, CORE_ADDR,
+ struct ui_file *, int);
extern LONGEST value_as_long (struct value *val);
extern DOUBLEST value_as_double (struct value *val);
int regnum,
struct frame_info *frame);
+extern void read_frame_register_value (struct value *value,
+ struct frame_info *frame);
+
extern struct value *value_from_register (struct type *type, int regnum,
struct frame_info *frame);
extern CORE_ADDR address_from_register (struct type *type, int regnum,
struct frame_info *frame);
-extern struct value *value_of_variable (struct symbol *var, struct block *b);
+extern struct value *value_of_variable (struct symbol *var,
+ const struct block *b);
extern struct value *address_of_variable (struct symbol *var, struct block *b);
extern struct value *read_var_value (struct symbol *var,
struct frame_info *frame);
+extern struct value *default_read_var_value (struct symbol *var,
+ struct frame_info *frame);
+
extern struct value *allocate_value (struct type *type);
extern struct value *allocate_value_lazy (struct type *type);
extern void allocate_value_contents (struct value *value);
extern void value_free_to_mark (struct value *mark);
-extern struct value *value_cstring (char *ptr, int len,
+extern struct value *value_cstring (char *ptr, ssize_t len,
struct type *char_type);
-extern struct value *value_string (char *ptr, int len,
+extern struct value *value_string (char *ptr, ssize_t len,
struct type *char_type);
-extern struct value *value_bitstring (char *ptr, int len,
- struct type *index_type);
extern struct value *value_array (int lowbound, int highbound,
struct value **elemvec);
extern struct value *value_static_field (struct type *type, int fieldno);
-extern struct fn_field *value_find_oload_method_list (struct value **,
- const char *,
- int, int *,
- struct type **, int *);
-
enum oload_search_type { NON_METHOD, METHOD, BOTH };
-extern int find_overload_match (struct type **arg_types, int nargs,
+extern int find_overload_match (struct value **args, int nargs,
const char *name,
enum oload_search_type method, int lax,
struct value **objp, struct symbol *fsym,
struct type *arg_type);
-extern struct type *value_rtti_target_type (struct value *, int *, int *,
- int *);
+extern struct type *value_rtti_indirect_type (struct value *, int *, int *,
+ int *);
extern struct value *value_full_object (struct value *, struct type *, int,
int, int);
-extern struct value *value_cast_pointers (struct type *, struct value *);
+extern struct value *value_cast_pointers (struct type *, struct value *, int);
extern struct value *value_cast (struct type *type, struct value *arg2);
int index);
extern int using_struct_return (struct gdbarch *gdbarch,
- struct type *func_type,
+ struct value *function,
struct type *value_type);
extern struct value *evaluate_expression (struct expression *exp);
extern struct internalvar *create_internalvar (const char *name);
-typedef struct value * (*internalvar_make_value) (struct gdbarch *,
- struct internalvar *);
+extern VEC (char_ptr) *complete_internalvar (const char *name);
+
+/* An internalvar can be dynamically computed by supplying a vector of
+ function pointers to perform various operations. */
+
+struct internalvar_funcs
+{
+ /* Compute the value of the variable. The DATA argument passed to
+ the function is the same argument that was passed to
+ `create_internalvar_type_lazy'. */
+
+ struct value *(*make_value) (struct gdbarch *arch,
+ struct internalvar *var,
+ void *data);
+
+ /* Update the agent expression EXPR with bytecode to compute the
+ value. VALUE is the agent value we are updating. The DATA
+ argument passed to this function is the same argument that was
+ passed to `create_internalvar_type_lazy'. If this pointer is
+ NULL, then the internalvar cannot be compiled to an agent
+ expression. */
+
+ void (*compile_to_ax) (struct internalvar *var,
+ struct agent_expr *expr,
+ struct axs_value *value,
+ void *data);
+
+ /* If non-NULL, this is called to destroy DATA. The DATA argument
+ passed to this function is the same argument that was passed to
+ `create_internalvar_type_lazy'. */
+
+ void (*destroy) (void *data);
+};
+
extern struct internalvar *
- create_internalvar_type_lazy (char *name, internalvar_make_value fun);
+create_internalvar_type_lazy (const char *name,
+ const struct internalvar_funcs *funcs,
+ void *data);
+
+/* Compile an internal variable to an agent expression. VAR is the
+ variable to compile; EXPR and VALUE are the agent expression we are
+ updating. This will return 0 if there is no known way to compile
+ VAR, and 1 if VAR was successfully compiled. It may also throw an
+ exception on error. */
+
+extern int compile_internalvar_to_ax (struct internalvar *var,
+ struct agent_expr *expr,
+ struct axs_value *value);
extern struct internalvar *lookup_internalvar (const char *name);
/* C++ */
-extern struct value *value_of_this (const struct language_defn *lang,
- int complain);
+extern struct value *value_of_this (const struct language_defn *lang);
+
+extern struct value *value_of_this_silent (const struct language_defn *lang);
extern struct value *value_x_binop (struct value *arg1, struct value *arg2,
enum exp_opcode op,
extern void release_value (struct value *val);
+extern void release_value_or_incref (struct value *val);
+
extern int record_latest_value (struct value *val);
extern void modify_field (struct type *type, gdb_byte *addr,
LONGEST fieldval, int bitpos, int bitsize);
-extern void type_print (struct type *type, char *varstring,
+extern void type_print (struct type *type, const char *varstring,
struct ui_file *stream, int show);
extern char *type_to_string (struct type *type);
extern void print_decimal_floating (const gdb_byte *valaddr, struct type *type,
struct ui_file *stream);
-extern int value_print (struct value *val, struct ui_file *stream,
- const struct value_print_options *options);
+extern void value_print (struct value *val, struct ui_file *stream,
+ const struct value_print_options *options);
extern void value_print_array_elements (struct value *val,
struct ui_file *stream, int format,
extern struct value *value_release_to_mark (struct value *mark);
-extern int val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
- struct ui_file *stream, int recurse,
- const struct value *val,
- const struct value_print_options *options,
- const struct language_defn *language);
-
-extern int common_val_print (struct value *val,
- struct ui_file *stream, int recurse,
- const struct value_print_options *options,
- const struct language_defn *language);
+extern void val_print (struct type *type, const gdb_byte *valaddr,
+ int embedded_offset, CORE_ADDR address,
+ struct ui_file *stream, int recurse,
+ const struct value *val,
+ const struct value_print_options *options,
+ const struct language_defn *language);
+
+extern void common_val_print (struct value *val,
+ struct ui_file *stream, int recurse,
+ const struct value_print_options *options,
+ const struct language_defn *language);
extern int val_print_string (struct type *elttype, const char *encoding,
CORE_ADDR addr, int len,