mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-12 01:34:58 +08:00
* ir.texi: Add more documentation.
From-SVN: r36355
This commit is contained in:
parent
f1c1dfc389
commit
eb50138bec
@ -1,3 +1,7 @@
|
|||||||
|
2000-09-11 Gabriel Dos Reis <gdr@codesourcery.com>
|
||||||
|
|
||||||
|
* ir.texi: Add more documentation.
|
||||||
|
|
||||||
2000-09-11 Mark Mitchell <mark@codesourcery.com>
|
2000-09-11 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
* cp-tree.h (struct saved_scope): Remove x_function_parms.
|
* cp-tree.h (struct saved_scope): Remove x_function_parms.
|
||||||
|
162
gcc/cp/ir.texi
162
gcc/cp/ir.texi
@ -342,6 +342,7 @@ The elements are indexed from zero.
|
|||||||
@findex TYPE_NAME
|
@findex TYPE_NAME
|
||||||
@findex TYPENAME_TYPE_FULLNAME
|
@findex TYPENAME_TYPE_FULLNAME
|
||||||
@findex TYPE_FIELDS
|
@findex TYPE_FIELDS
|
||||||
|
@findex TYPE_PTROBV_P
|
||||||
|
|
||||||
All C++ types have corresponding tree nodes. However, you should not
|
All C++ types have corresponding tree nodes. However, you should not
|
||||||
assume that there is exactly one tree node corresponding to each C++
|
assume that there is exactly one tree node corresponding to each C++
|
||||||
@ -383,6 +384,11 @@ This macro holds if the type is @code{volatile}-qualified.
|
|||||||
@item CP_TYPE_RESTRICT_P
|
@item CP_TYPE_RESTRICT_P
|
||||||
This macro holds if the type is @code{restrict}-qualified.
|
This macro holds if the type is @code{restrict}-qualified.
|
||||||
|
|
||||||
|
@item CP_TYPE_CONST_NON_VOLATILE_P
|
||||||
|
This predicate holds for a type that is @code{const}-qualified, but
|
||||||
|
@emph{not} @code{volatile}-qualified; other cv-qualifiers are ignored as
|
||||||
|
well: only the @code{const}-ness is tested.
|
||||||
|
|
||||||
@item TYPE_MAIN_VARIANT
|
@item TYPE_MAIN_VARIANT
|
||||||
This macro returns the unqualified version of a type. It may be applied
|
This macro returns the unqualified version of a type. It may be applied
|
||||||
to an unqualified type, but it is not always the identity function in
|
to an unqualified type, but it is not always the identity function in
|
||||||
@ -408,6 +414,36 @@ actual name of the type. The @code{TYPE_NAME} will be @code{NULL_TREE}
|
|||||||
for a type that is not a builtin type, the result of a typedef, or a
|
for a type that is not a builtin type, the result of a typedef, or a
|
||||||
named class type.
|
named class type.
|
||||||
|
|
||||||
|
@item CP_INTEGRAL_TYPE
|
||||||
|
This predicate holds if the type is an integral type. Notice that in
|
||||||
|
C++, enumerations are @emph{not} integral types.
|
||||||
|
|
||||||
|
@item ARITHMETIC_TYPE_P
|
||||||
|
This predicate holds if the type is an integral type (in the C++ sense)
|
||||||
|
or a floating point type.
|
||||||
|
|
||||||
|
@item CLASS_TYPE_P
|
||||||
|
This predicate holds for a class-type.
|
||||||
|
|
||||||
|
@item TYPE_BUILT_IN
|
||||||
|
This predicate holds for a builtin type.
|
||||||
|
|
||||||
|
@item TYPE_PTRMEM_P
|
||||||
|
This predicate holds if the type is a pointer to data member.
|
||||||
|
|
||||||
|
@item TYPE_PTR_P
|
||||||
|
This predicate holds if the type is a pointer type, and the pointee is
|
||||||
|
not a data member.
|
||||||
|
|
||||||
|
@item TYPE_PTRFN_P
|
||||||
|
This predicate holds for a pointer to function type.
|
||||||
|
|
||||||
|
@item TYPE_PTROB_P
|
||||||
|
This predicate holds for a pointer to object type. Note however that it
|
||||||
|
does not hold for the generic pointer to object type @code{void *}. You
|
||||||
|
may use @code{TYPE_PTROBV_P} to test for a pointer to object type as
|
||||||
|
well as @code{void *}.
|
||||||
|
|
||||||
@item same_type_p
|
@item same_type_p
|
||||||
This predicate takes two types as input, and holds if they are the same
|
This predicate takes two types as input, and holds if they are the same
|
||||||
type. For example, if one type is a @code{typedef} for the other, or
|
type. For example, if one type is a @code{typedef} for the other, or
|
||||||
@ -656,7 +692,6 @@ This macro returns the enclosing namespace. The @code{DECL_CONTEXT} for
|
|||||||
the @code{global_namespace} is @code{NULL_TREE}.
|
the @code{global_namespace} is @code{NULL_TREE}.
|
||||||
|
|
||||||
@item DECL_NAMESPACE_ALIAS
|
@item DECL_NAMESPACE_ALIAS
|
||||||
|
|
||||||
If this declaration is for a namespace alias, then
|
If this declaration is for a namespace alias, then
|
||||||
@code{DECL_NAMESPACE_ALIAS} is the namespace for which this one is an
|
@code{DECL_NAMESPACE_ALIAS} is the namespace for which this one is an
|
||||||
alias.
|
alias.
|
||||||
@ -666,6 +701,10 @@ an alias. Instead, follow @code{DECL_NAMESPACE_ALIAS} links until you
|
|||||||
reach an ordinary, non-alias, namespace, and call
|
reach an ordinary, non-alias, namespace, and call
|
||||||
@code{cp_namespace_decls} there.
|
@code{cp_namespace_decls} there.
|
||||||
|
|
||||||
|
@item DECL_NAMESPACE_STD_P
|
||||||
|
This predicate holds if the namespace is the special @code{::std}
|
||||||
|
namespace.
|
||||||
|
|
||||||
@item cp_namespace_decls
|
@item cp_namespace_decls
|
||||||
This function will return the declarations contained in the namespace,
|
This function will return the declarations contained in the namespace,
|
||||||
including types, overloaded functions, other namespaces, and so forth.
|
including types, overloaded functions, other namespaces, and so forth.
|
||||||
@ -774,6 +813,50 @@ virtually.
|
|||||||
|
|
||||||
FIXME: Talk about @code{TYPE_NONCOPIED_PARTS}.
|
FIXME: Talk about @code{TYPE_NONCOPIED_PARTS}.
|
||||||
|
|
||||||
|
The following macros can be used on a tree node representing a class-type.
|
||||||
|
|
||||||
|
@ftable @code
|
||||||
|
@item LOCAL_CLASS_P
|
||||||
|
This predicate holds if the class is local class @emph{i.e.} declared
|
||||||
|
inside a function body.
|
||||||
|
|
||||||
|
@item TYPE_POLYMORPHIC_P
|
||||||
|
This predicate holds if the class has at least one virtual function
|
||||||
|
(declared or inherited).
|
||||||
|
|
||||||
|
@item TYPE_HAS_DEFAULT_CONSTRUCTOR
|
||||||
|
This predicate holds whenever its argument represents a class-type with
|
||||||
|
default constructor.
|
||||||
|
|
||||||
|
@item CLASSTYPE_HAS_MUTABLE
|
||||||
|
@item TYPE_HAS_MUTABLE_P
|
||||||
|
These predicates hold for a class-type having a mutable data member.
|
||||||
|
|
||||||
|
@item CLASSTYPE_NON_POD_P
|
||||||
|
This predicate holds only for class-types that are not PODs.
|
||||||
|
|
||||||
|
@item TYPE_HAS_NEW_OPERATOR
|
||||||
|
This predicate holds for a class-type that defines
|
||||||
|
@code{operator new}.
|
||||||
|
|
||||||
|
@item TYPE_HAS_ARRAY_NEW_OPERATOR
|
||||||
|
This predicate holds for a class-type for which
|
||||||
|
@code{operator new[]} is defined.
|
||||||
|
|
||||||
|
@item TYPE_OVERLOADS_CALL_EXPR
|
||||||
|
This predicate holds for class-type for which the function call
|
||||||
|
@code{operator()} is overloaded.
|
||||||
|
|
||||||
|
@item TYPE_OVERLOADS_ARRAY_REF
|
||||||
|
This predicate holds for a class-type that overloads
|
||||||
|
@code{operator[]}
|
||||||
|
|
||||||
|
@item TYPE_OVERLOADS_ARROW
|
||||||
|
This predicate holds for a class-type for which @code{operator->} is
|
||||||
|
overloaded.
|
||||||
|
|
||||||
|
@end ftable
|
||||||
|
|
||||||
@c ---------------------------------------------------------------------
|
@c ---------------------------------------------------------------------
|
||||||
@c Declarations
|
@c Declarations
|
||||||
@c ---------------------------------------------------------------------
|
@c ---------------------------------------------------------------------
|
||||||
@ -793,8 +876,8 @@ FIXME: Talk about @code{TYPE_NONCOPIED_PARTS}.
|
|||||||
@tindex RESULT_DECL
|
@tindex RESULT_DECL
|
||||||
@tindex TEMPLATE_DECL
|
@tindex TEMPLATE_DECL
|
||||||
@tindex THUNK_DECL
|
@tindex THUNK_DECL
|
||||||
@findex THUNK_DELTA
|
|
||||||
@tindex USING_DECL
|
@tindex USING_DECL
|
||||||
|
@findex THUNK_DELTA
|
||||||
@findex DECL_INITIAL
|
@findex DECL_INITIAL
|
||||||
@findex DECL_SIZE
|
@findex DECL_SIZE
|
||||||
@findex DECL_ALIGN
|
@findex DECL_ALIGN
|
||||||
@ -840,6 +923,17 @@ typedef struct S S;
|
|||||||
@end example
|
@end example
|
||||||
The implicitly generated @code{typedef} declaration is represented by a
|
The implicitly generated @code{typedef} declaration is represented by a
|
||||||
@code{TYPE_DECL} for which @code{DECL_ARTIFICIAL} holds.
|
@code{TYPE_DECL} for which @code{DECL_ARTIFICIAL} holds.
|
||||||
|
|
||||||
|
@item DECL_NAMESPACE_SCOPE_P
|
||||||
|
This predicate holds if the entity was declared at a namespace scope.
|
||||||
|
|
||||||
|
@item DECL_CLASS_SCOPE_P
|
||||||
|
This predicate holds if the entity was declared at a class scope.
|
||||||
|
|
||||||
|
@item DECL_FUNCTION_SCOPE_P
|
||||||
|
This predicate holds if the entity was declared inside a function
|
||||||
|
body.
|
||||||
|
|
||||||
@end ftable
|
@end ftable
|
||||||
|
|
||||||
The various kinds of declarations include:
|
The various kinds of declarations include:
|
||||||
@ -874,7 +968,10 @@ analogous to @code{TYPE_SIZE} and @code{TYPE_ALIGN}. For a declaration,
|
|||||||
you should always use the @code{DECL_SIZE} and @code{DECL_ALIGN} rather
|
you should always use the @code{DECL_SIZE} and @code{DECL_ALIGN} rather
|
||||||
than the @code{TYPE_SIZE} and @code{TYPE_ALIGN} given by the
|
than the @code{TYPE_SIZE} and @code{TYPE_ALIGN} given by the
|
||||||
@code{TREE_TYPE}, since special attributes may have been applied to the
|
@code{TREE_TYPE}, since special attributes may have been applied to the
|
||||||
variable to give it a particular size and alignment.
|
variable to give it a particular size and alignment. You may use the
|
||||||
|
predicates @code{DECL_THIS_STATIC} or @code{DECL_THIS_EXTERN} to test
|
||||||
|
whether the storage class specifiers @code{static} or @code{extern} were
|
||||||
|
used to declare a variable.
|
||||||
|
|
||||||
If this variable is initialized (but does not require a constructor),
|
If this variable is initialized (but does not require a constructor),
|
||||||
the @code{DECL_INITIAL} will be an expression for the initializer. The
|
the @code{DECL_INITIAL} will be an expression for the initializer. The
|
||||||
@ -1003,6 +1100,10 @@ the @code{DECL_REAL_CONTEXT} for @code{f} will be the
|
|||||||
|
|
||||||
The following macros and functions can be used on a @code{FUNCTION_DECL}:
|
The following macros and functions can be used on a @code{FUNCTION_DECL}:
|
||||||
@ftable @code
|
@ftable @code
|
||||||
|
@item DECL_MAIN_P
|
||||||
|
This predicate holds for a function that is the program entry point
|
||||||
|
@code{::code}.
|
||||||
|
|
||||||
@item DECL_NAME
|
@item DECL_NAME
|
||||||
This macro returns the unqualified name of the function, as an
|
This macro returns the unqualified name of the function, as an
|
||||||
@code{IDENTIFIER_NODE}. For an instantiation of a function template,
|
@code{IDENTIFIER_NODE}. For an instantiation of a function template,
|
||||||
@ -1029,6 +1130,18 @@ This predicate holds if the function is undefined.
|
|||||||
@item TREE_PUBLIC
|
@item TREE_PUBLIC
|
||||||
This predicate holds if the function has external linkage.
|
This predicate holds if the function has external linkage.
|
||||||
|
|
||||||
|
@item DECL_LOCAL_FUNCTION_P
|
||||||
|
This predicate holds if the function was declared at block scope, even
|
||||||
|
though it has a global scope.
|
||||||
|
|
||||||
|
@item DECL_ANTICIPATED
|
||||||
|
This predicate holds if the function is a built-in function but its
|
||||||
|
prototype is not yet explicitly declared.
|
||||||
|
|
||||||
|
@item DECL_EXTERN_C_FUNCTION_P
|
||||||
|
This predicate holds if the function is declared as an
|
||||||
|
`@code{extern "C"}' function.
|
||||||
|
|
||||||
@item DECL_LINKONCE_P
|
@item DECL_LINKONCE_P
|
||||||
This macro holds if multiple copies of this function may be emitted in
|
This macro holds if multiple copies of this function may be emitted in
|
||||||
various translation units. It is the responsibility of the linker to
|
various translation units. It is the responsibility of the linker to
|
||||||
@ -1043,15 +1156,42 @@ FIXME: This macro is not yet implemented.
|
|||||||
This macro holds if the function is a member of a class, rather than a
|
This macro holds if the function is a member of a class, rather than a
|
||||||
member of a namespace.
|
member of a namespace.
|
||||||
|
|
||||||
|
@item DECL_STATIC_FUNCTION_P
|
||||||
|
This predicate holds if the function a static member function.
|
||||||
|
|
||||||
@item DECL_NONSTATIC_MEMBER_FUNCTION_P
|
@item DECL_NONSTATIC_MEMBER_FUNCTION_P
|
||||||
This macro holds for a non-static member function.
|
This macro holds for a non-static member function.
|
||||||
|
|
||||||
|
@item DECL_CONST_MEMFUNC_P
|
||||||
|
This predicate holds for a @code{const}-member function.
|
||||||
|
|
||||||
|
@item DECL_VOLATILE_MEMFUNC_P
|
||||||
|
This predicate holds for a @code{volatile}-member function.
|
||||||
|
|
||||||
@item DECL_CONSTRUCTOR_P
|
@item DECL_CONSTRUCTOR_P
|
||||||
This macro holds if the function is a constructor.
|
This macro holds if the function is a constructor.
|
||||||
|
|
||||||
|
@item DECL_NONCONVERTING_P
|
||||||
|
This predicate holds if the constructor is a non-converting constructor.
|
||||||
|
|
||||||
|
@item DECL_COMPLETE_CONSTRUCTOR_P
|
||||||
|
This predicate holds for a function which is a constructor for an object
|
||||||
|
of a complete type.
|
||||||
|
|
||||||
|
@item DECL_BASE_CONSTRUCTOR_P
|
||||||
|
This predicate holds for a function which is a constructor for a base
|
||||||
|
class sub-object.
|
||||||
|
|
||||||
|
@item DECL_COPY_CONSTRUCTOR_P
|
||||||
|
This predicate holds for a function which is a copy-constructor.
|
||||||
|
|
||||||
@item DECL_DESTRUCTOR_P
|
@item DECL_DESTRUCTOR_P
|
||||||
This macro holds if the function is a destructor.
|
This macro holds if the function is a destructor.
|
||||||
|
|
||||||
|
@item DECL_COMPLETE_DESTRUCTOR_P
|
||||||
|
This predicate holds if the function is the destructor for an object a
|
||||||
|
complet type.
|
||||||
|
|
||||||
@item DECL_OVERLOADED_OPERATOR_P
|
@item DECL_OVERLOADED_OPERATOR_P
|
||||||
This macro holds if the function is an overloaded operator.
|
This macro holds if the function is an overloaded operator.
|
||||||
|
|
||||||
@ -1091,6 +1231,9 @@ Finally, the thunk should jump to the location given
|
|||||||
by @code{DECL_INITIAL}; this will always be an expression for the
|
by @code{DECL_INITIAL}; this will always be an expression for the
|
||||||
address of a function.
|
address of a function.
|
||||||
|
|
||||||
|
@item DECL_NON_THUNK_FUNCTION_P
|
||||||
|
This predicate holds if the function is @emph{not} a thunk function.
|
||||||
|
|
||||||
@item GLOBAL_INIT_PRIORITY
|
@item GLOBAL_INIT_PRIORITY
|
||||||
If either @code{DECL_GLOBAL_CTOR_P} or @code{DECL_GLOBAL_DTOR_P} holds,
|
If either @code{DECL_GLOBAL_CTOR_P} or @code{DECL_GLOBAL_DTOR_P} holds,
|
||||||
then this gives the initialization priority for the function. The
|
then this gives the initialization priority for the function. The
|
||||||
@ -1118,6 +1261,19 @@ This macro returns the @code{RESULT_DECL} for the function.
|
|||||||
This macro returns the @code{FUNCTION_TYPE} or @code{METHOD_TYPE} for
|
This macro returns the @code{FUNCTION_TYPE} or @code{METHOD_TYPE} for
|
||||||
the function.
|
the function.
|
||||||
|
|
||||||
|
@item TYPE_RAISES_EXCEPTIONS
|
||||||
|
This macro returns the list of exceptions that a (member-)function can
|
||||||
|
raise. The returned list, if non @code{NULL}, is comprised of nodes
|
||||||
|
whose @code{TREE_VALUE} represents a type.
|
||||||
|
|
||||||
|
@item TYPE_NOTHROW_P
|
||||||
|
This predicate holds when the exception-specification of its arguments
|
||||||
|
if of the form `@code{()}'.
|
||||||
|
|
||||||
|
@item DECL_ARRAY_DELETE_OPERATOR_P
|
||||||
|
This predicate holds if the function an overloaded
|
||||||
|
@code{operator delete[]}.
|
||||||
|
|
||||||
@end ftable
|
@end ftable
|
||||||
|
|
||||||
@c ---------------------------------------------------------------------
|
@c ---------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user