]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add missing TYPE_CODE_* constants to Python
authorTom Tromey <tromey@adacore.com>
Wed, 12 Oct 2022 14:40:34 +0000 (08:40 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 31 Oct 2022 18:47:36 +0000 (12:47 -0600)
A user noticed that TYPE_CODE_FIXED_POINT was not exported by the gdb
Python layer.  This patch fixes the bug, and prevents future
occurences of this type of bug.

gdb/doc/guile.texi
gdb/doc/python.texi
gdb/gdbtypes.h
gdb/guile/scm-type.c
gdb/python/py-type.c
gdb/type-codes.def [new file with mode: 0644]

index ba916009f746f1d6f635fec12aee17db004e74df..0375005ba091973df6ada415388c0133624c4b17 100644 (file)
@@ -1308,6 +1308,19 @@ A decimal floating point type.
 @item TYPE_CODE_INTERNAL_FUNCTION
 A function internal to @value{GDBN}.  This is the type used to represent
 convenience functions (@pxref{Convenience Funs}).
+
+@vindex TYPE_CODE_XMETHOD
+@item gdb.TYPE_CODE_XMETHOD
+A method internal to @value{GDBN}.  This is the type used to represent
+xmethods (@pxref{Writing an Xmethod}).
+
+@vindex TYPE_CODE_FIXED_POINT
+@item gdb.TYPE_CODE_FIXED_POINT
+A fixed-point number.
+
+@vindex TYPE_CODE_NAMESPACE
+@item gdb.TYPE_CODE_NAMESPACE
+A Fortran namelist.
 @end vtable
 
 Further support for types is provided in the @code{(gdb types)}
index e7adeacffd188ad4d96fb5651f780346df1b629c..9cbb2f9f57def9b1d2f88252cea8e4d8bc8c8d9a 100644 (file)
@@ -1642,6 +1642,19 @@ A decimal floating point type.
 @item gdb.TYPE_CODE_INTERNAL_FUNCTION
 A function internal to @value{GDBN}.  This is the type used to represent
 convenience functions.
+
+@vindex TYPE_CODE_XMETHOD
+@item gdb.TYPE_CODE_XMETHOD
+A method internal to @value{GDBN}.  This is the type used to represent
+xmethods (@pxref{Writing an Xmethod}).
+
+@vindex TYPE_CODE_FIXED_POINT
+@item gdb.TYPE_CODE_FIXED_POINT
+A fixed-point number.
+
+@vindex TYPE_CODE_NAMESPACE
+@item gdb.TYPE_CODE_NAMESPACE
+A Fortran namelist.
 @end vtable
 
 Further support for types is provided in the @code{gdb.types}
index 7b10c8448e65b28d1979d18ee69cd8f91785d199..d7189ff9813fae686e282c1614345b03246daa2b 100644 (file)
@@ -97,120 +97,12 @@ sect_offset_str (sect_offset offset)
 
 enum type_code
   {
-    TYPE_CODE_BITSTRING = -1,  /**< Deprecated  */
     TYPE_CODE_UNDEF = 0,       /**< Not used; catches errors */
-    TYPE_CODE_PTR,             /**< Pointer type */
 
-    /* * Array type with lower & upper bounds.
+#define OP(X) X,
+#include "type-codes.def"
+#undef OP
 
-       Regardless of the language, GDB represents multidimensional
-       array types the way C does: as arrays of arrays.  So an
-       instance of a GDB array type T can always be seen as a series
-       of instances of T->target_type () laid out sequentially in
-       memory.
-
-       Row-major languages like C lay out multi-dimensional arrays so
-       that incrementing the rightmost index in a subscripting
-       expression results in the smallest change in the address of the
-       element referred to.  Column-major languages like Fortran lay
-       them out so that incrementing the leftmost index results in the
-       smallest change.
-
-       This means that, in column-major languages, working our way
-       from type to target type corresponds to working through indices
-       from right to left, not left to right.  */
-    TYPE_CODE_ARRAY,
-
-    TYPE_CODE_STRUCT,          /**< C struct or Pascal record */
-    TYPE_CODE_UNION,           /**< C union or Pascal variant part */
-    TYPE_CODE_ENUM,            /**< Enumeration type */
-    TYPE_CODE_FLAGS,           /**< Bit flags type */
-    TYPE_CODE_FUNC,            /**< Function type */
-    TYPE_CODE_INT,             /**< Integer type */
-
-    /* * Floating type.  This is *NOT* a complex type.  */
-    TYPE_CODE_FLT,
-
-    /* * Void type.  The length field specifies the length (probably
-       always one) which is used in pointer arithmetic involving
-       pointers to this type, but actually dereferencing such a
-       pointer is invalid; a void type has no length and no actual
-       representation in memory or registers.  A pointer to a void
-       type is a generic pointer.  */
-    TYPE_CODE_VOID,
-
-    TYPE_CODE_SET,             /**< Pascal sets */
-    TYPE_CODE_RANGE,           /**< Range (integers within spec'd bounds).  */
-
-    /* * A string type which is like an array of character but prints
-       differently.  It does not contain a length field as Pascal
-       strings (for many Pascals, anyway) do; if we want to deal with
-       such strings, we should use a new type code.  */
-    TYPE_CODE_STRING,
-
-    /* * Unknown type.  The length field is valid if we were able to
-       deduce that much about the type, or 0 if we don't even know
-       that.  */
-    TYPE_CODE_ERROR,
-
-    /* C++ */
-    TYPE_CODE_METHOD,          /**< Method type */
-
-    /* * Pointer-to-member-function type.  This describes how to access a
-       particular member function of a class (possibly a virtual
-       member function).  The representation may vary between different
-       C++ ABIs.  */
-    TYPE_CODE_METHODPTR,
-
-    /* * Pointer-to-member type.  This is the offset within a class to
-       some particular data member.  The only currently supported
-       representation uses an unbiased offset, with -1 representing
-       NULL; this is used by the Itanium C++ ABI (used by GCC on all
-       platforms).  */
-    TYPE_CODE_MEMBERPTR,
-
-    TYPE_CODE_REF,             /**< C++ Reference types */
-
-    TYPE_CODE_RVALUE_REF,      /**< C++ rvalue reference types */
-
-    TYPE_CODE_CHAR,            /**< *real* character type */
-
-    /* * Boolean type.  0 is false, 1 is true, and other values are
-       non-boolean (e.g. FORTRAN "logical" used as unsigned int).  */
-    TYPE_CODE_BOOL,
-
-    /* Fortran */
-    TYPE_CODE_COMPLEX,         /**< Complex float */
-
-    TYPE_CODE_TYPEDEF,
-
-    TYPE_CODE_NAMESPACE,       /**< C++ namespace.  */
-
-    TYPE_CODE_DECFLOAT,                /**< Decimal floating point.  */
-
-    TYPE_CODE_MODULE,          /**< Fortran module.  */
-
-    /* * Internal function type.  */
-    TYPE_CODE_INTERNAL_FUNCTION,
-
-    /* * Methods implemented in extension languages.  */
-    TYPE_CODE_XMETHOD,
-
-    /* * Fixed Point type.  */
-    TYPE_CODE_FIXED_POINT,
-
-    /* * Fortran namelist is a group of variables or arrays that can be
-       read or written.
-
-       Namelist syntax: NAMELIST / groupname / namelist_items ...
-       NAMELIST statement assign a group name to a collection of variables
-       called as namelist items. The namelist items can be of any data type
-       and can be variables or arrays.
-
-       Compiler emit DW_TAG_namelist for group name and DW_TAG_namelist_item
-       for each of the namelist items. GDB process these namelist dies
-       and print namelist variables during print and ptype commands.  */
-    TYPE_CODE_NAMELIST,
   };
 
 /* * Some bits for the type's instance_flags word.  See the macros
index 68a5b918e5b8223c4fbbd0c419344e0effc16949..050501ab0275805b9f529918a0df99028e1d5638 100644 (file)
@@ -1297,35 +1297,12 @@ gdbscm_lookup_type (SCM name_scm, SCM rest)
 
 static const scheme_integer_constant type_integer_constants[] =
 {
-#define X(SYM) { #SYM, SYM }
-  X (TYPE_CODE_BITSTRING),
-  X (TYPE_CODE_PTR),
-  X (TYPE_CODE_ARRAY),
-  X (TYPE_CODE_STRUCT),
-  X (TYPE_CODE_UNION),
-  X (TYPE_CODE_ENUM),
-  X (TYPE_CODE_FLAGS),
-  X (TYPE_CODE_FUNC),
-  X (TYPE_CODE_INT),
-  X (TYPE_CODE_FLT),
-  X (TYPE_CODE_VOID),
-  X (TYPE_CODE_SET),
-  X (TYPE_CODE_RANGE),
-  X (TYPE_CODE_STRING),
-  X (TYPE_CODE_ERROR),
-  X (TYPE_CODE_METHOD),
-  X (TYPE_CODE_METHODPTR),
-  X (TYPE_CODE_MEMBERPTR),
-  X (TYPE_CODE_REF),
-  X (TYPE_CODE_RVALUE_REF),
-  X (TYPE_CODE_CHAR),
-  X (TYPE_CODE_BOOL),
-  X (TYPE_CODE_COMPLEX),
-  X (TYPE_CODE_TYPEDEF),
-  X (TYPE_CODE_NAMESPACE),
-  X (TYPE_CODE_DECFLOAT),
-  X (TYPE_CODE_INTERNAL_FUNCTION),
-#undef X
+  /* This is kept for backward compatibility.  */
+  { "TYPE_CODE_BITSTRING", -1 },
+
+#define OP(SYM) { #SYM, SYM },
+#include "type-codes.def"
+#undef OP
 
   END_INTEGER_CONSTANTS
 };
index 3e558dee7ade201b979288c0d8fa1187c3510dc8..928efacfe8ae8f6083019e73ea8ea57e278c261d 100644 (file)
@@ -74,7 +74,7 @@ extern PyTypeObject type_iterator_object_type
 struct pyty_code
 {
   /* The code.  */
-  enum type_code code;
+  int code;
   /* The name.  */
   const char *name;
 };
@@ -82,37 +82,14 @@ struct pyty_code
 /* Forward declarations.  */
 static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
 
-#define ENTRY(X) { X, #X }
-
 static struct pyty_code pyty_codes[] =
 {
-  ENTRY (TYPE_CODE_BITSTRING),
-  ENTRY (TYPE_CODE_PTR),
-  ENTRY (TYPE_CODE_ARRAY),
-  ENTRY (TYPE_CODE_STRUCT),
-  ENTRY (TYPE_CODE_UNION),
-  ENTRY (TYPE_CODE_ENUM),
-  ENTRY (TYPE_CODE_FLAGS),
-  ENTRY (TYPE_CODE_FUNC),
-  ENTRY (TYPE_CODE_INT),
-  ENTRY (TYPE_CODE_FLT),
-  ENTRY (TYPE_CODE_VOID),
-  ENTRY (TYPE_CODE_SET),
-  ENTRY (TYPE_CODE_RANGE),
-  ENTRY (TYPE_CODE_STRING),
-  ENTRY (TYPE_CODE_ERROR),
-  ENTRY (TYPE_CODE_METHOD),
-  ENTRY (TYPE_CODE_METHODPTR),
-  ENTRY (TYPE_CODE_MEMBERPTR),
-  ENTRY (TYPE_CODE_REF),
-  ENTRY (TYPE_CODE_RVALUE_REF),
-  ENTRY (TYPE_CODE_CHAR),
-  ENTRY (TYPE_CODE_BOOL),
-  ENTRY (TYPE_CODE_COMPLEX),
-  ENTRY (TYPE_CODE_TYPEDEF),
-  ENTRY (TYPE_CODE_NAMESPACE),
-  ENTRY (TYPE_CODE_DECFLOAT),
-  ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
+  /* This is kept for backward compatibility.  */
+  { -1, "TYPE_CODE_BITSTRING" },
+
+#define OP(X) { X, #X },
+#include "type-codes.def"
+#undef OP
 };
 
 \f
diff --git a/gdb/type-codes.def b/gdb/type-codes.def
new file mode 100644 (file)
index 0000000..a6f9a42
--- /dev/null
@@ -0,0 +1,131 @@
+/* Type codes for GDB.
+
+   Copyright (C) 1992-2022 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+OP (TYPE_CODE_PTR)             /**< Pointer type */
+
+/* * Array type with lower & upper bounds.
+
+   Regardless of the language, GDB represents multidimensional
+   array types the way C does: as arrays of arrays.  So an
+   instance of a GDB array type T can always be seen as a series
+   of instances of T->target_type () laid out sequentially in
+   memory.
+
+   Row-major languages like C lay out multi-dimensional arrays so
+   that incrementing the rightmost index in a subscripting
+   expression results in the smallest change in the address of the
+   element referred to.  Column-major languages like Fortran lay
+   them out so that incrementing the leftmost index results in the
+   smallest change.
+
+   This means that, in column-major languages, working our way
+   from type to target type corresponds to working through indices
+   from right to left, not left to right.  */
+OP (TYPE_CODE_ARRAY)
+
+OP (TYPE_CODE_STRUCT)          /**< C struct or Pascal record */
+OP (TYPE_CODE_UNION)           /**< C union or Pascal variant part */
+OP (TYPE_CODE_ENUM)            /**< Enumeration type */
+OP (TYPE_CODE_FLAGS)           /**< Bit flags type */
+OP (TYPE_CODE_FUNC)            /**< Function type */
+OP (TYPE_CODE_INT)             /**< Integer type */
+
+/* * Floating type.  This is *NOT* a complex type.  */
+OP (TYPE_CODE_FLT)
+
+/* * Void type.  The length field specifies the length (probably
+   always one) which is used in pointer arithmetic involving
+   pointers to this type, but actually dereferencing such a
+   pointer is invalid; a void type has no length and no actual
+   representation in memory or registers.  A pointer to a void
+   type is a generic pointer.  */
+OP (TYPE_CODE_VOID)
+
+OP (TYPE_CODE_SET)             /**< Pascal sets */
+OP (TYPE_CODE_RANGE)           /**< Range (integers within spec'd bounds).  */
+
+/* * A string type which is like an array of character but prints
+   differently.  It does not contain a length field as Pascal
+   strings (for many Pascals, anyway) do; if we want to deal with
+   such strings, we should use a new type code.  */
+OP (TYPE_CODE_STRING)
+
+/* * Unknown type.  The length field is valid if we were able to
+   deduce that much about the type, or 0 if we don't even know
+   that.  */
+OP (TYPE_CODE_ERROR)
+
+/* C++ */
+OP (TYPE_CODE_METHOD)          /**< Method type */
+
+/* * Pointer-to-member-function type.  This describes how to access a
+   particular member function of a class (possibly a virtual
+   member function).  The representation may vary between different
+   C++ ABIs.  */
+OP (TYPE_CODE_METHODPTR)
+
+/* * Pointer-to-member type.  This is the offset within a class to
+   some particular data member.  The only currently supported
+   representation uses an unbiased offset, with -1 representing
+   NULL; this is used by the Itanium C++ ABI (used by GCC on all
+   platforms).  */
+OP (TYPE_CODE_MEMBERPTR)
+
+OP (TYPE_CODE_REF)             /**< C++ Reference types */
+
+OP (TYPE_CODE_RVALUE_REF)      /**< C++ rvalue reference types */
+
+OP (TYPE_CODE_CHAR)            /**< *real* character type */
+
+/* * Boolean type.  0 is false, 1 is true, and other values are
+   non-boolean (e.g. FORTRAN "logical" used as unsigned int).  */
+OP (TYPE_CODE_BOOL)
+
+/* Fortran */
+OP (TYPE_CODE_COMPLEX)         /**< Complex float */
+
+OP (TYPE_CODE_TYPEDEF)
+
+OP (TYPE_CODE_NAMESPACE)       /**< C++ namespace.  */
+
+OP (TYPE_CODE_DECFLOAT)                /**< Decimal floating point.  */
+
+OP (TYPE_CODE_MODULE)          /**< Fortran module.  */
+
+/* * Internal function type.  */
+OP (TYPE_CODE_INTERNAL_FUNCTION)
+
+/* * Methods implemented in extension languages.  */
+OP (TYPE_CODE_XMETHOD)
+
+/* * Fixed Point type.  */
+OP (TYPE_CODE_FIXED_POINT)
+
+/* * Fortran namelist is a group of variables or arrays that can be
+   read or written.
+
+   Namelist syntax: NAMELIST / groupname / namelist_items ...
+   NAMELIST statement assign a group name to a collection of variables
+   called as namelist items. The namelist items can be of any data type
+   and can be variables or arrays.
+
+   Compiler emit DW_TAG_namelist for group name and DW_TAG_namelist_item
+   for each of the namelist items. GDB process these namelist dies
+   and print namelist variables during print and ptype commands.  */
+OP (TYPE_CODE_NAMELIST)