GNU Compiler Collection (GCC) Internals: Constant expressions |
---|
Next: Storage References, Up: Expression trees [Contents][Index]
The table below begins with constants, moves on to unary expressions, then proceeds to binary expressions, and concludes with various other kinds of expressions:
INTEGER_CST
These nodes represent integer constants. Note that the type of these
constants is obtained with TREE_TYPE
; they are not always of type
int
. In particular, char
constants are represented with
INTEGER_CST
nodes. The value of the integer constant e
is
represented in an array of HOST_WIDE_INT. There are enough elements
in the array to represent the value without taking extra elements for
redundant 0s or -1. The number of elements used to represent e
is available via TREE_INT_CST_NUNITS
. Element i
can be
extracted by using TREE_INT_CST_ELT (e, i)
.
TREE_INT_CST_LOW
is a shorthand for TREE_INT_CST_ELT (e, 0)
.
The functions tree_fits_shwi_p
and tree_fits_uhwi_p
can be used to tell if the value is small enough to fit in a
signed HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively.
The value can then be extracted using tree_to_shwi
and
tree_to_uhwi
.
REAL_CST
FIXME: Talk about how to obtain representations of this constant, do comparisons, and so forth.
FIXED_CST
These nodes represent fixed-point constants. The type of these constants
is obtained with TREE_TYPE
. TREE_FIXED_CST_PTR
points to
a struct fixed_value
; TREE_FIXED_CST
returns the structure
itself. struct fixed_value
contains data
with the size of two
HOST_BITS_PER_WIDE_INT
and mode
as the associated fixed-point
machine mode for data
.
COMPLEX_CST
These nodes are used to represent complex number constants, that is a
__complex__
whose parts are constant nodes. The
TREE_REALPART
and TREE_IMAGPART
return the real and the
imaginary parts respectively.
VECTOR_CST
These nodes are used to represent vector constants, whose parts are
constant nodes. Each individual constant node is either an integer or a
double constant node. The first operand is a TREE_LIST
of the
constant nodes and is accessed through TREE_VECTOR_CST_ELTS
.
STRING_CST
These nodes represent string-constants. The TREE_STRING_LENGTH
returns the length of the string, as an int
. The
TREE_STRING_POINTER
is a char*
containing the string
itself. The string may not be NUL
-terminated, and it may contain
embedded NUL
characters. Therefore, the
TREE_STRING_LENGTH
includes the trailing NUL
if it is
present.
For wide string constants, the TREE_STRING_LENGTH
is the number
of bytes in the string, and the TREE_STRING_POINTER
points to an array of the bytes of the string, as represented on the
target system (that is, as integers in the target endianness). Wide and
non-wide string constants are distinguished only by the TREE_TYPE
of the STRING_CST
.
FIXME: The formats of string constants are not well-defined when the target system bytes are not the same width as host system bytes.
Next: Storage References, Up: Expression trees [Contents][Index]