Support rvalue references in the gdb python module (includes doc/)
This patch adds the ability to inspect rvalue reference types and values using the gdb python module. This is achieved by creating two wrappers for valpy_reference_value(), using the ReferenceExplorer class to handle the objects of rvalue reference types and placing necessary checks for a TYPE_CODE_RVALUE_REF type code next to the checks for a TYPE_CODE_REF type code. gdb/ChangeLog PR gdb/14441 * doc/python.texi (Types in Python): Add TYPE_CODE_RVALUE_REF to table of constants. * python/lib/gdb/command/explore.py: Support exploring values of rvalue reference types. * python/lib/gdb/types.py: Implement get_basic_type() for rvalue reference types. * python/py-type.c (pyty_codes) <TYPE_CODE_RVALUE_REF>: New constant. * python/py-value.c (valpy_getitem): Add an rvalue reference check. (valpy_reference_value): Add new parameter "refcode". (valpy_lvalue_reference_value, valpy_rvalue_reference_value): New wrappers for valpy_reference_value(). * python/py-xmethods.c (gdbpy_get_xmethod_result_type) (gdbpy_invoke_xmethod): Likewise.
This commit is contained in:
parent
4297a3f002
commit
3fcf899da1
7 changed files with 52 additions and 9 deletions
|
@ -132,6 +132,7 @@ class Explorer(object):
|
|||
gdb.TYPE_CODE_UNION : CompoundExplorer,
|
||||
gdb.TYPE_CODE_PTR : PointerExplorer,
|
||||
gdb.TYPE_CODE_REF : ReferenceExplorer,
|
||||
gdb.TYPE_CODE_RVALUE_REF : ReferenceExplorer,
|
||||
gdb.TYPE_CODE_TYPEDEF : TypedefExplorer,
|
||||
gdb.TYPE_CODE_ARRAY : ArrayExplorer
|
||||
}
|
||||
|
@ -318,7 +319,6 @@ class ReferenceExplorer(object):
|
|||
Explorer.explore_type(name, target_type, is_child)
|
||||
return False
|
||||
|
||||
|
||||
class ArrayExplorer(object):
|
||||
"""Internal class used to explore arrays."""
|
||||
|
||||
|
|
|
@ -31,8 +31,10 @@ def get_basic_type(type_):
|
|||
"""
|
||||
|
||||
while (type_.code == gdb.TYPE_CODE_REF or
|
||||
type_.code == gdb.TYPE_CODE_RVALUE_REF or
|
||||
type_.code == gdb.TYPE_CODE_TYPEDEF):
|
||||
if type_.code == gdb.TYPE_CODE_REF:
|
||||
if (type_.code == gdb.TYPE_CODE_REF or
|
||||
type_.code == gdb.TYPE_CODE_RVALUE_REF):
|
||||
type_ = type_.target()
|
||||
else:
|
||||
type_ = type_.strip_typedefs()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue