From: Tom Tromey Date: Mon, 27 Apr 2020 14:23:53 +0000 (-0600) Subject: Expand dynamic type documentation X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=45fc7c9968485f5ee0532a14fad211372e12f837;p=deliverable%2Fbinutils-gdb.git Expand dynamic type documentation This expands the Python dynamic type documentation, as suggested by Christian. gdb/doc/ChangeLog 2020-04-27 Tom Tromey * python.texi (Types In Python): Mention missing fields. Add dynamic type example. --- diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 7073c17b2e..305f2d5b64 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2020-04-27 Tom Tromey + + * python.texi (Types In Python): Mention missing fields. Add + dynamic type example. + 2020-04-24 Tom Tromey PR python/23662: diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index cfa813128c..3b1ccb4177 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -1071,7 +1071,24 @@ The type code for this type. The type code will be one of the @defvar Type.dynamic A boolean indicating whether this type is dynamic. In some situations, such as Rust @code{enum} types or Ada variant records, the -concrete type of a value may vary depending on its contents. +concrete type of a value may vary depending on its contents. That is, +the declared type of a variable, or the type returned by +@code{gdb.lookup_type} may be dynamic; while the type of the +variable's value will be a concrete instance of that dynamic type. + +For example, consider this code: +@smallexample +int n; +int array[n]; +@end smallexample + +Here, at least conceptually (whether your compiler actually does this +is a separate issue), examining @w{@code{gdb.lookup_symbol("array", ...).type}} +could yield a @code{gdb.Type} which reports a size of @code{None}. +This is the dynamic type. + +However, examining @code{gdb.parse_and_eval("array").type} would yield +a concrete type, whose length would be known. @end defvar @defvar Type.name @@ -1116,7 +1133,8 @@ This attribute is not available for @code{enum} or @code{static} (as in C@t{++}) fields. The value is the position, counting in bits, from the start of the containing type. Note that, in a dynamic type, the position of a field may not be constant. In this -case, the value will be @code{None}. +case, the value will be @code{None}. Also, a dynamic type may have +fields that do not appear in a corresponding concrete type. @item enumval This attribute is only available for @code{enum} fields, and its value