builtin-types.def revision 90075
1169689Skan/* Copyright (C) 2001 Free Software Foundation, Inc.
2169689Skan
3169689SkanThis file is part of GCC.
4169689Skan
5169689SkanGCC is free software; you can redistribute it and/or modify it under
6169689Skanthe terms of the GNU General Public License as published by the Free
7169689SkanSoftware Foundation; either version 2, or (at your option) any later
8169689Skanversion.
9169689Skan
10169689SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY
11169689SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or
12169689SkanFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13169689Skanfor more details.
14169689Skan
15169689SkanYou should have received a copy of the GNU General Public License
16169689Skanalong with GCC; see the file COPYING.  If not, write to the Free
17169689SkanSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA
18169689Skan02111-1307, USA.  */
19169689Skan
20169689Skan/* This header provides a declaritive way of describing the types that
21169689Skan   are used when declaring builtin functions.
22169689Skan
23169689Skan   Before including this header, you must define the following macros:
24169689Skan
25169689Skan   DEF_PRIMITIVE_TYPE (ENUM, TYPE)
26169689Skan
27169689Skan     The ENUM is an identifier indicating which type is being defined.
28169689Skan     TYPE is an expression for a `tree' that represents the type.
29169689Skan
30169689Skan   DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
31169689Skan   DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
32169689Skan   DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
33169689Skan   DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
34169689Skan   DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
35169689Skan
36169689Skan     These macros describe function types.  ENUM is as above.  The
37169689Skan     RETURN type is one of the enumerals already defined.  ARG1, ARG2,
38169689Skan     and ARG3 give the types of the arguments, similarly.
39169689Skan
40169689Skan   DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
41169689Skan   DEF_FUNCTION_TYPE_VAR_1 (ENUM, RETURN, ARG1)
42169689Skan   DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2)
43169689Skan
44169689Skan     Similar, but for function types that take variable arguments.
45169689Skan     For example:
46169689Skan
47169689Skan       DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
48169689Skan
49169689Skan     describes the type `int ()(double)', using the enumeral
50169689Skan     BT_INT_DOUBLE, whereas:
51169689Skan
52169689Skan       DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE)
53169689Skan
54169689Skan     describes the type `int ()(double, ...)'.
55169689Skan 
56169689Skan  DEF_POINTER_TYPE (ENUM, TYPE)
57169689Skan
58169689Skan    This macro describes a pointer type.  ENUM is as above; TYPE is
59169689Skan    the type pointed to.  */
60169689Skan
61169689SkanDEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
62169689SkanDEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
63169689SkanDEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node)
64169689SkanDEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
65169689SkanDEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
66169689SkanDEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
67169689SkanDEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
68169689SkanDEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
69169689SkanDEF_PRIMITIVE_TYPE (BT_LONG_DOUBLE, long_double_type_node)
70169689SkanDEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
71169689SkanDEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node)
72169689SkanDEF_PRIMITIVE_TYPE (BT_COMPLEX_LONG_DOUBLE, complex_long_double_type_node)
73169689Skan
74169689SkanDEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
75169689SkanDEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
76169689SkanDEF_PRIMITIVE_TYPE (BT_TRAD_PTR, traditional_ptr_type_node)
77169689SkanDEF_PRIMITIVE_TYPE (BT_TRAD_CONST_PTR, traditional_cptr_type_node)
78169689SkanDEF_PRIMITIVE_TYPE (BT_PTRMODE, type_for_mode (ptr_mode, 0))
79169689SkanDEF_PRIMITIVE_TYPE (BT_SIZE, c_size_type_node)
80169689SkanDEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
81169689SkanDEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
82169689SkanDEF_PRIMITIVE_TYPE (BT_LEN, traditional_len_type_node)
83169689Skan
84169689SkanDEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
85169689SkanDEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
86169689Skan
87169689SkanDEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
88169689SkanDEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
89169689SkanDEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
90169689Skan
91169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
92169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
93169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
94169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
95169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
96169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_LONG_DOUBLE, 
97169689Skan	             BT_LONG_DOUBLE, BT_LONG_DOUBLE)
98169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, 
99169689Skan		     BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
100169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, 
101169689Skan		     BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
102169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 
103169689Skan	             BT_COMPLEX_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
104169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT, 
105169689Skan                     BT_FLOAT, BT_COMPLEX_FLOAT)
106169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
107169689Skan                     BT_DOUBLE, BT_COMPLEX_DOUBLE)
108169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
109169689Skan                     BT_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
110169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
111169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
112169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
113169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
114169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
115169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_LEN_CONST_STRING, BT_LEN, BT_CONST_STRING)
116169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
117169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
118169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
119169689SkanDEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
120169689Skan
121169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
122169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING, 
123169689Skan                     BT_STRING, BT_STRING, BT_CONST_STRING)
124169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
125169689Skan	             BT_INT, BT_CONST_STRING, BT_CONST_STRING)
126169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
127169689Skan		     BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
128169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
129169689Skan	             BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
130169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
131169689Skan	             BT_STRING, BT_CONST_STRING, BT_INT)
132169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
133169689Skan		     BT_INT, BT_CONST_STRING, BT_PTR)
134169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
135169689Skan		     BT_INT, BT_INT, BT_PTR)
136169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
137169689Skan		     BT_VOID, BT_PTRMODE, BT_PTR)
138169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, 
139169689Skan		     BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
140169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
141169689Skan		     BT_LONG, BT_LONG, BT_LONG)
142169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
143169689Skan		     BT_INT, BT_PTR, BT_CONST_STRING)
144169689SkanDEF_FUNCTION_TYPE_2 (BT_FN_VOID_TRAD_PTR_LEN,
145169689Skan		     BT_VOID, BT_TRAD_PTR, BT_LEN)
146169689Skan
147169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
148169689Skan		     BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
149169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
150169689Skan		     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
151169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE,
152169689Skan		     BT_TRAD_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
153169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
154169689Skan	             BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
155169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_TRAD_PTR_PTR_INT_SIZE,
156169689Skan	             BT_TRAD_PTR, BT_PTR, BT_INT, BT_SIZE)
157169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_INT_TRAD_CONST_PTR_TRAD_CONST_PTR_LEN,
158169689Skan		     BT_INT, BT_TRAD_CONST_PTR, BT_TRAD_CONST_PTR, BT_LEN)
159169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT, BT_VOID, BT_PTR, BT_INT, BT_INT)
160169689Skan
161169689SkanDEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
162169689Skan		     BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
163169689Skan
164169689SkanDEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
165169689SkanDEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
166169689SkanDEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
167169689Skan
168169689SkanDEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR, 
169169689Skan			 BT_VOID, BT_VALIST_REF)
170169689SkanDEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
171169689Skan			 BT_VOID, BT_CONST_PTR)
172169689SkanDEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
173169689Skan	                 BT_INT, BT_CONST_STRING)
174169689Skan
175169689SkanDEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
176169689Skan	                 BT_INT, BT_PTR, BT_CONST_STRING)
177169689Skan
178169689SkanDEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
179169689SkanDEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
180169689Skan		     BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)
181169689Skan