diff options
author | Pedro Alves <palves@redhat.com> | 2009-02-06 22:50:52 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-02-06 22:50:52 +0000 |
commit | 5f5233d48e4aca803bda1339f5645c6f6b144dcf (patch) | |
tree | e81a888ae30e78ac1e5e1ca78cba03743d269d4b /gdb/valops.c | |
parent | 117de6a92498c0dd715fa0fdec577697433f3c5e (diff) | |
download | gdb-5f5233d48e4aca803bda1339f5645c6f6b144dcf.zip gdb-5f5233d48e4aca803bda1339f5645c6f6b144dcf.tar.gz gdb-5f5233d48e4aca803bda1339f5645c6f6b144dcf.tar.bz2 |
gdb/
2009-02-06 Jim Blandy <jimb@codesourcery.com>
Daniel Jacobowitz <dan@codesourcery.com>
Vladimir Prus <vladimir@codesourcery.com>
Pedro Alves <pedro@codesourcery.com>
* defs.h (enum lval_type): New value: lval_computed.
* value.h (struct lval_funcs): New type.
(allocate_computed_value, value_computed_funcs)
(value_computed_closure): New declarations.
* value.c (struct value): Add a structure to the location union
for computed lvalues, containing 'funcs' and 'closure' members.
(allocate_computed_value, value_computed_funcs)
(value_computed_closure): New functions.
(value_free): For computed lvalues, call the closure's
'free_closure' function before freeing the value itself.
(value_copy): If we're copying an lval_computed value, call the
closure's 'copy_closure' function.
(set_value_component_location): If the original value is a
computed lvalue, then call the closure's 'copy_closure' function.
(value_of_internalvar): If an internal variable's value is a
computed lvalue, make retrieving its value produce an equivalent
computed lvalue.
* valops.c (value_fetch_lazy): Unlazy computed lvalues by calling
their read function.
(value_assign): Assign to computed lvalues by calling their write
function.
gdb/doc/
2009-02-06 Pedro Alves <pedro@codesourcery.com>
* gdbint.texinfo (Values): New chapter.
Diffstat (limited to 'gdb/valops.c')
-rw-r--r-- | gdb/valops.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gdb/valops.c b/gdb/valops.c index 09be6dd..9810f2b 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -727,6 +727,8 @@ value_fetch_lazy (struct value *val) watchpoints from trying to watch the saved frame pointer. */ value_free_to_mark (mark); } + else if (VALUE_LVAL (val) == lval_computed) + value_computed_funcs (val)->read (val); else internal_error (__FILE__, __LINE__, "Unexpected lazy value type."); @@ -895,7 +897,15 @@ value_assign (struct value *toval, struct value *fromval) observer_notify_target_changed (¤t_target); break; } - + + case lval_computed: + { + struct lval_funcs *funcs = value_computed_funcs (toval); + + funcs->write (toval, fromval); + } + break; + default: error (_("Left operand of assignment is not an lvalue.")); } |