diff options
author | Tom Tromey <tom@tromey.com> | 2018-04-03 20:20:01 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-04-06 15:44:49 -0600 |
commit | a6535de1903d9caad8c10c1d81c51a29612456a6 (patch) | |
tree | 6dad69fd5bbd4b33f12f6bdf15287067e1282bd0 /gdb/value.h | |
parent | b562120198d9fa2c191823508813daa3b62a3a37 (diff) | |
download | gdb-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.h | 13 |
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, |