Add ability to return rvalue reference values from value_ref

Parameterize value_ref() by the kind of reference type the value of which
is requested. Change all callers to use the new API.

gdb/ChangeLog

	PR gdb/14441
	* ada-lang.c (ada_evaluate_subexp): Adhere to the new
	value_ref() interface.
	* c-valprint.c (c_value_print): Likewise.
	* infcall.c (value_arg_coerce): Likewise.
	* python/py-value.c (valpy_reference_value): Likewise.
	* valops.c (value_cast, value_reinterpret_cast)
	(value_dynamic_cast, typecmp): Likewise.
	(value_ref): Parameterize by kind of return value reference type.
	* value.h (value_ref): Add new parameter "refcode".
This commit is contained in:
Artemiy Volkov
2017-03-20 13:47:41 -07:00
committed by Keith Seitz
parent 3b22433085
commit a65cfae5f8
8 changed files with 44 additions and 17 deletions

View File

@@ -606,10 +606,14 @@ c_value_print (struct value *val, struct ui_file *stream,
else if (options->objectprint
&& (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
{
int is_ref = TYPE_CODE (type) == TYPE_CODE_REF;
int is_ref = TYPE_IS_REFERENCE (type);
enum type_code refcode = TYPE_CODE_UNDEF;
if (is_ref)
val = value_addr (val);
{
val = value_addr (val);
refcode = TYPE_CODE (type);
}
/* Pointer to class, check real type of object. */
fprintf_filtered (stream, "(");
@@ -635,7 +639,7 @@ c_value_print (struct value *val, struct ui_file *stream,
if (is_ref)
{
val = value_ref (value_ind (val));
val = value_ref (value_ind (val), refcode);
type = value_type (val);
}