Enable chained function calls in C++ expressions.
authorSiva Chandra <sivachandra@chromium.org>
Tue, 11 Nov 2014 13:43:03 +0000 (05:43 -0800)
committerSiva Chandra <sivachandra@chromium.org>
Sat, 29 Nov 2014 00:01:16 +0000 (16:01 -0800)
commit6c659fc2c7cd2da6d2b9a3d7c38597ad3821832a
tree4d45593c088252f07a928ff05ba96e79ea629daf
parentf4f855e84b45eb41987641b4a26037c7444dda33
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".
13 files changed:
gdb/ChangeLog
gdb/eval.c
gdb/gdbthread.h
gdb/gdbtypes.c
gdb/gdbtypes.h
gdb/infcall.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/chained-calls.cc [new file with mode: 0644]
gdb/testsuite/gdb.cp/chained-calls.exp [new file with mode: 0644]
gdb/testsuite/gdb.cp/smartp.exp
gdb/thread.c
gdb/value.c
gdb/value.h