Add missing TYPE_CODE_* constants to Python
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.
This commit is contained in:
parent
bc45f5366e
commit
4881fcd7c1
6 changed files with 173 additions and 170 deletions
|
@ -1308,6 +1308,19 @@ A decimal floating point type.
|
||||||
@item TYPE_CODE_INTERNAL_FUNCTION
|
@item TYPE_CODE_INTERNAL_FUNCTION
|
||||||
A function internal to @value{GDBN}. This is the type used to represent
|
A function internal to @value{GDBN}. This is the type used to represent
|
||||||
convenience functions (@pxref{Convenience Funs}).
|
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
|
@end vtable
|
||||||
|
|
||||||
Further support for types is provided in the @code{(gdb types)}
|
Further support for types is provided in the @code{(gdb types)}
|
||||||
|
|
|
@ -1642,6 +1642,19 @@ A decimal floating point type.
|
||||||
@item gdb.TYPE_CODE_INTERNAL_FUNCTION
|
@item gdb.TYPE_CODE_INTERNAL_FUNCTION
|
||||||
A function internal to @value{GDBN}. This is the type used to represent
|
A function internal to @value{GDBN}. This is the type used to represent
|
||||||
convenience functions.
|
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
|
@end vtable
|
||||||
|
|
||||||
Further support for types is provided in the @code{gdb.types}
|
Further support for types is provided in the @code{gdb.types}
|
||||||
|
|
114
gdb/gdbtypes.h
114
gdb/gdbtypes.h
|
@ -97,120 +97,12 @@ sect_offset_str (sect_offset offset)
|
||||||
|
|
||||||
enum type_code
|
enum type_code
|
||||||
{
|
{
|
||||||
TYPE_CODE_BITSTRING = -1, /**< Deprecated */
|
|
||||||
TYPE_CODE_UNDEF = 0, /**< Not used; catches errors */
|
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
|
/* * Some bits for the type's instance_flags word. See the macros
|
||||||
|
|
|
@ -1297,35 +1297,12 @@ gdbscm_lookup_type (SCM name_scm, SCM rest)
|
||||||
|
|
||||||
static const scheme_integer_constant type_integer_constants[] =
|
static const scheme_integer_constant type_integer_constants[] =
|
||||||
{
|
{
|
||||||
#define X(SYM) { #SYM, SYM }
|
/* This is kept for backward compatibility. */
|
||||||
X (TYPE_CODE_BITSTRING),
|
{ "TYPE_CODE_BITSTRING", -1 },
|
||||||
X (TYPE_CODE_PTR),
|
|
||||||
X (TYPE_CODE_ARRAY),
|
#define OP(SYM) { #SYM, SYM },
|
||||||
X (TYPE_CODE_STRUCT),
|
#include "type-codes.def"
|
||||||
X (TYPE_CODE_UNION),
|
#undef OP
|
||||||
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
|
|
||||||
|
|
||||||
END_INTEGER_CONSTANTS
|
END_INTEGER_CONSTANTS
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern PyTypeObject type_iterator_object_type
|
||||||
struct pyty_code
|
struct pyty_code
|
||||||
{
|
{
|
||||||
/* The code. */
|
/* The code. */
|
||||||
enum type_code code;
|
int code;
|
||||||
/* The name. */
|
/* The name. */
|
||||||
const char *name;
|
const char *name;
|
||||||
};
|
};
|
||||||
|
@ -82,37 +82,14 @@ struct pyty_code
|
||||||
/* Forward declarations. */
|
/* Forward declarations. */
|
||||||
static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
|
static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
|
||||||
|
|
||||||
#define ENTRY(X) { X, #X }
|
|
||||||
|
|
||||||
static struct pyty_code pyty_codes[] =
|
static struct pyty_code pyty_codes[] =
|
||||||
{
|
{
|
||||||
ENTRY (TYPE_CODE_BITSTRING),
|
/* This is kept for backward compatibility. */
|
||||||
ENTRY (TYPE_CODE_PTR),
|
{ -1, "TYPE_CODE_BITSTRING" },
|
||||||
ENTRY (TYPE_CODE_ARRAY),
|
|
||||||
ENTRY (TYPE_CODE_STRUCT),
|
#define OP(X) { X, #X },
|
||||||
ENTRY (TYPE_CODE_UNION),
|
#include "type-codes.def"
|
||||||
ENTRY (TYPE_CODE_ENUM),
|
#undef OP
|
||||||
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),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
131
gdb/type-codes.def
Normal file
131
gdb/type-codes.def
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue