mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-28 10:00:51 +00:00
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.
This commit is contained in:
12
gdb/valops.c
12
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."));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user