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