gdb: update Type.fields doc based on actual GDB behavior
I noticed two errors in the Type.fields documentation: 1. It is possible to call `fields` on an array type, in which case it returns one field representing the array's range. It is not mentioned. 2. When calling `fields` on a type that doesn't have fields (by nature, like an int), GDB raises a TypeError. It does not return an empty sequence, as currently documented. Fix these, and change the text into a bullet list. I find it easier to read than one big paragraph. The first issue is already tested in gdb.python/py-type.exp, but the second one doesn't seem tested. Add a test in gdb.python/py-type.exp for it. gdb/doc/ChangeLog: * python.texi (Types In Python): Re-organize Type.fields doc. Mention handling of array types. Correct doc for when calling the method on another type. gdb/testsuite/ChangeLog: * gdb.python/py-type.exp (test_fields): Test calling fields on an int type. Change-Id: I11c688177504cb070b81a4446ac91dec50b56a22
This commit is contained in:
parent
bf06b2a2f9
commit
fa94b3a7c8
4 changed files with 40 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2021-05-04 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* python.texi (Types In Python): Re-organize Type.fields doc.
|
||||
Mention handling of array types. Correct doc for when calling
|
||||
the method on another type.
|
||||
|
||||
2021-04-28 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.texinfo (Initialization Files): Use @env when referencing
|
||||
|
|
|
@ -1163,12 +1163,32 @@ there is no associated objfile.
|
|||
The following methods are provided:
|
||||
|
||||
@defun Type.fields ()
|
||||
For structure and union types, this method returns the fields. Range
|
||||
types have two fields, the minimum and maximum values. Enum types
|
||||
have one field per enum constant. Function and method types have one
|
||||
field per parameter. The base types of C@t{++} classes are also
|
||||
represented as fields. If the type has no fields, or does not fit
|
||||
into one of these categories, an empty sequence will be returned.
|
||||
|
||||
Return the fields of this type. The behavior depends on the type code:
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item
|
||||
For structure and union types, this method returns the fields.
|
||||
|
||||
@item
|
||||
Range types have two fields, the minimum and maximum values.
|
||||
|
||||
@item
|
||||
Enum types have one field per enum constant.
|
||||
|
||||
@item
|
||||
Function and method types have one field per parameter. The base types of
|
||||
C@t{++} classes are also represented as fields.
|
||||
|
||||
@item
|
||||
Array types have one field representing the array's range.
|
||||
|
||||
@item
|
||||
If the type does not fit into one of these categories, a @code{TypeError}
|
||||
is raised.
|
||||
|
||||
@end itemize
|
||||
|
||||
Each field is a @code{gdb.Field} object, with some pre-defined attributes:
|
||||
@table @code
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2021-05-04 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* gdb.python/py-type.exp (test_fields): Test calling fields on
|
||||
an int type.
|
||||
|
||||
2021-05-04 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* gdb.python/flexible-array-member.exp: Adjust expected range
|
||||
|
|
|
@ -175,6 +175,9 @@ proc test_fields {lang} {
|
|||
gdb_test "python print (len (gdb.parse_and_eval ('a_function').type.fields ()))" "2"
|
||||
gdb_test "python print (gdb.parse_and_eval ('a_function').type.fields ()\[0\].type)" "int"
|
||||
gdb_test "python print (gdb.parse_and_eval ('a_function').type.fields ()\[1\].type)" "char"
|
||||
|
||||
# Test calling `fields` on a non-aggregate type.
|
||||
gdb_test "python gdb.lookup_type('int').fields()" "TypeError: Type is not a structure, union, enum, or function type.*"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue