mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
Enable chained function calls in C++ expressions.
gdb/ChangeLog: * eval.c: Include gdbthread.h. (evaluate_subexp): Enable thread stack temporaries before evaluating a complete expression and clean them up after the evaluation is complete. * gdbthread.h: Include common/vec.h. (value_ptr): New typedef. (VEC (value_ptr)): New vector type. (value_vec): New typedef. (struct thread_info): Add new fields stack_temporaries_enabled and stack_temporaries. (enable_thread_stack_temporaries) (thread_stack_temporaries_enabled_p, push_thread_stack_temporary) (get_last_thread_stack_temporary) (value_in_thread_stack_temporaries): Declare. * gdbtypes.c (class_or_union_p): New function. * gdbtypes.h (class_or_union_p): Declare. * infcall.c (call_function_by_hand): Store return values of class type as temporaries on stack. * thread.c (enable_thread_stack_temporaries): New function. (thread_stack_temporaries_enabled_p, push_thread_stack_temporary) (get_last_thread_stack_temporary): Likewise. (value_in_thread_stack_temporaries): Likewise. * value.c (value_force_lval): New function. * value.h (value_force_lval): Declare. gdb/testsuite/ChangeLog: * gdb.cp/chained-calls.cc: New file. * gdb.cp/chained-calls.exp: New file. * gdb.cp/smartp.exp: Remove KFAIL for "p c2->inta".
This commit is contained in:
12
gdb/value.c
12
gdb/value.c
@ -1724,6 +1724,18 @@ value_non_lval (struct value *arg)
|
||||
return arg;
|
||||
}
|
||||
|
||||
/* Write contents of V at ADDR and set its lval type to be LVAL_MEMORY. */
|
||||
|
||||
void
|
||||
value_force_lval (struct value *v, CORE_ADDR addr)
|
||||
{
|
||||
gdb_assert (VALUE_LVAL (v) == not_lval);
|
||||
|
||||
write_memory (addr, value_contents_raw (v), TYPE_LENGTH (value_type (v)));
|
||||
v->lval = lval_memory;
|
||||
v->location.address = addr;
|
||||
}
|
||||
|
||||
void
|
||||
set_value_component_location (struct value *component,
|
||||
const struct value *whole)
|
||||
|
Reference in New Issue
Block a user