/* Type codes for GDB.

   Copyright (C) 1992-2024 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)
