aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-04-03 20:20:01 -0600
committerTom Tromey <tom@tromey.com>2018-04-06 15:44:49 -0600
commita6535de1903d9caad8c10c1d81c51a29612456a6 (patch)
tree6dad69fd5bbd4b33f12f6bdf15287067e1282bd0 /gdb/value.h
parentb562120198d9fa2c191823508813daa3b62a3a37 (diff)
downloadgdb-a6535de1903d9caad8c10c1d81c51a29612456a6.zip
gdb-a6535de1903d9caad8c10c1d81c51a29612456a6.tar.gz
gdb-a6535de1903d9caad8c10c1d81c51a29612456a6.tar.bz2
Remove free_value_chain
This patch changes value_release_to_mark and fetch_subexp_value to return a std::vector of value references, rather than relying on the "next" field that is contained in a struct value. This makes it simpler to reason about the returned values, and also allows for the removal of free_value_chain. gdb/ChangeLog 2018-04-06 Tom Tromey <tom@tromey.com> * value.h (fetch_subexp_value, value_release_to_mark): Update. (free_value_chain): Remove. * value.c (free_value_chain): Remove. (value_release_to_mark): Return a std::vector. * ppc-linux-nat.c (num_memory_accesses): Change "chain" to a std::vector. (check_condition): Update. * eval.c (fetch_subexp_value): Change "val_chain" to a std::vector. * breakpoint.c (update_watchpoint): Update. (can_use_hardware_watchpoint): Change "vals" to a std::vector.
Diffstat (limited to 'gdb/value.h')
-rw-r--r--gdb/value.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/gdb/value.h b/gdb/value.h
index 2016937..b58f789 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -915,7 +915,7 @@ extern value *eval_skip_value (expression *exp);
extern void fetch_subexp_value (struct expression *exp, int *pc,
struct value **valp, struct value **resultp,
- struct value **val_chain,
+ std::vector<value_ref_ptr> *val_chain,
int preserve_errors);
extern const char *extract_field_op (struct expression *exp, int *subexp);
@@ -1053,8 +1053,6 @@ extern int unop_user_defined_p (enum exp_opcode op, struct value *arg1);
extern int destructor_name_p (const char *name, struct type *type);
-extern void free_value_chain (struct value *v);
-
extern value_ref_ptr release_value (struct value *val);
extern int record_latest_value (struct value *val);
@@ -1084,7 +1082,14 @@ extern void value_print_array_elements (struct value *val,
struct ui_file *stream, int format,
enum val_prettyformat pretty);
-extern struct value *value_release_to_mark (const struct value *mark);
+/* Release values from the value chain and return them. Values
+ created after MARK are released. If MARK is nullptr, or if MARK is
+ not found on the value chain, then all values are released. Values
+ are returned in reverse order of creation; that is, newest
+ first. */
+
+extern std::vector<value_ref_ptr> value_release_to_mark
+ (const struct value *mark);
extern void val_print (struct type *type,
LONGEST embedded_offset, CORE_ADDR address,