diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2021-05-04 22:19:05 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-05-04 22:19:05 -0400 |
commit | fa94b3a7c817a5e6615b24eeb3ac569b70af7e81 (patch) | |
tree | a46071ff1dde3524530cc0074d5e8f9e2154c6b2 /gdb | |
parent | bf06b2a2f9fdf4b267c22328ba0dc35c07919f5c (diff) | |
download | gdb-fa94b3a7c817a5e6615b24eeb3ac569b70af7e81.zip gdb-fa94b3a7c817a5e6615b24eeb3ac569b70af7e81.tar.gz gdb-fa94b3a7c817a5e6615b24eeb3ac569b70af7e81.tar.bz2 |
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
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/python.texi | 32 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-type.exp | 3 |
4 files changed, 40 insertions, 6 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index d801d76..ec961d2 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -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 diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 20d6574..482d328 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -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 diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 32eba36..326ba47 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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 diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp index 5c0c4f5..733b25d 100644 --- a/gdb/testsuite/gdb.python/py-type.exp +++ b/gdb/testsuite/gdb.python/py-type.exp @@ -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.*" } } |