mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 03:16:53 +08:00
* Makefile.in (convert.o, calls.o, expmed.o): Update. * attribs.c (handle_mode_attribute, handle_vector_size_attribute): Use new hooks. * builtin-types.def (BT_PTRMODE): Update. * c-common.c (type_for_size): Rename c_common_type_for_size. (type_for_mode): Similarly. (shorten_compare, pointer_int_sum, c_common_nodes_and_builtins): Use new hook. * c-bommon.h (c_common_type_for_size, c_common_type_for_mode): New. * c-decl.c (finish_enum, build_enumerator): Use new hooks. * c-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE): Redefine. * c-typeck.c (common_type, comptypes, default_conversion): Use new hooks. * calls.c: Include langhooks.h. (emit_library_call_value_1): Use new hooks. Avoid redundant calls. * convert.c: Include langhooks.h (convert_to_pointer, convert_to_integer): Use new hooks. * except.c (init_eh): Similarly. * expmed.c: Include langhooks.h. (expand_mult_add): Use new hooks. * expr.c (store_expr, store_constructor, expand_expr, do_jump, try_casesi): Similarly. * fold-const.c (optimize_bit_field_compare, make_range, decode_field_reference, fold_truthop, fold): Similarly. * function.c (assign_stack_local_1, assign_stack_temp_for_type, put_var_into_stack): Similarly. * langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE): New. (LANG_HOOKS_TYPES_INITIALIZER): Update. * langhooks.h (lang_hooks_for_types): New hooks. * stmt.c (expand_decl_cleanup, emit_case_nodes): Use new hooks. * tree.c (get_unwidened, get_narrower): Similarly. * tree.h (type_for_mode, type_for_size): Remove. * varasm.c (force_const_mem): Use new hooks. ada: * gigi.h (type_for_size, type_for_mode): Rename. * misc.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE): Redefine. * trans.c (tree_transform): Update. * utils.c (gnat_init_decl_processing, init_gigi_decls, builtin_function, float_type_for_size, signed_or_unsigned_type, build_vms_descriptor, unchecked_convert): Update. (type_for_mode, type_for_size): Rename. * utils2.c (nonbinary_modular_operation): Update. cp: * cp-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE): Redefine. * cvt.c (cp_convert_to_pointer, type_promotes_to): Use new hooks. * decl.c (finish_enum): Similarly. * error.c (dump_type): Similarly. * lex.c (cxx_init): Similarly. * mangle.c (write_builtin_type): Similarly. * typeck.c (comptypes): Similarly. f: * com.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE): Redefine. (type_for_mode, type_for_size): Rename. (signed_or_unsigned_type, signed_type, truthvalue_conversion, unsigned_type): Use new hooks. java: * Make-lang.in (builtins.o): Update. * boehm.c (get_boehm_type_descriptor): Update. * builtins.c: Include langhooks.h. * decl.c (java_init_decl_processing): Update. * java-tree.h (java_type_for_mode, java_type_for_size): New. * lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE): Redefine. * typeck.c (type_for_mode, type_for_size): Update. objc: * objc-act.c (handle_impent): Update. * objc-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE): Redefine. From-SVN: r51571
176 lines
7.5 KiB
Modula-2
176 lines
7.5 KiB
Modula-2
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC 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 2, or (at your option) any later
|
|
version.
|
|
|
|
GCC 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 GCC; see the file COPYING. If not, write to the Free
|
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
02111-1307, USA. */
|
|
|
|
/* This header provides a declaritive way of describing the types that
|
|
are used when declaring builtin functions.
|
|
|
|
Before including this header, you must define the following macros:
|
|
|
|
DEF_PRIMITIVE_TYPE (ENUM, TYPE)
|
|
|
|
The ENUM is an identifier indicating which type is being defined.
|
|
TYPE is an expression for a `tree' that represents the type.
|
|
|
|
DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
|
|
DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
|
|
DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
|
|
DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
|
|
DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
|
|
|
|
These macros describe function types. ENUM is as above. The
|
|
RETURN type is one of the enumerals already defined. ARG1, ARG2,
|
|
and ARG3 give the types of the arguments, similarly.
|
|
|
|
DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
|
|
DEF_FUNCTION_TYPE_VAR_1 (ENUM, RETURN, ARG1)
|
|
DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2)
|
|
|
|
Similar, but for function types that take variable arguments.
|
|
For example:
|
|
|
|
DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
|
|
|
|
describes the type `int ()(double)', using the enumeral
|
|
BT_INT_DOUBLE, whereas:
|
|
|
|
DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE)
|
|
|
|
describes the type `int ()(double, ...)'.
|
|
|
|
DEF_POINTER_TYPE (ENUM, TYPE)
|
|
|
|
This macro describes a pointer type. ENUM is as above; TYPE is
|
|
the type pointed to. */
|
|
|
|
DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_LONG_DOUBLE, long_double_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONG_DOUBLE, complex_long_double_type_node)
|
|
|
|
DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
|
|
DEF_PRIMITIVE_TYPE (BT_SIZE, c_size_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
|
|
|
|
DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
|
|
DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
|
|
|
|
DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
|
|
DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
|
|
DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
|
|
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_LONG_DOUBLE,
|
|
BT_LONG_DOUBLE, BT_LONG_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
|
|
BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
|
|
BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
|
|
BT_COMPLEX_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT,
|
|
BT_FLOAT, BT_COMPLEX_FLOAT)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
|
|
BT_DOUBLE, BT_COMPLEX_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
|
|
BT_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
|
|
DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
|
|
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
|
|
BT_STRING, BT_STRING, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
|
|
BT_INT, BT_CONST_STRING, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
|
|
BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
|
|
BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
|
|
BT_STRING, BT_CONST_STRING, BT_INT)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
|
|
BT_INT, BT_CONST_STRING, BT_PTR)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
|
|
BT_INT, BT_INT, BT_PTR)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
|
|
BT_VOID, BT_PTRMODE, BT_PTR)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG,
|
|
BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
|
|
BT_LONG, BT_LONG, BT_LONG)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
|
|
BT_INT, BT_PTR, BT_CONST_STRING)
|
|
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
|
|
BT_VOID, BT_PTR, BT_SIZE)
|
|
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
|
|
BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
|
|
BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
|
|
BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
|
|
BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
|
|
BT_PTR, BT_PTR, BT_INT, BT_SIZE)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT, BT_VOID, BT_PTR, BT_INT, BT_INT)
|
|
|
|
DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
|
|
BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
|
|
|
|
DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
|
|
DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
|
|
DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
|
|
|
|
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
|
|
BT_VOID, BT_VALIST_REF)
|
|
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
|
|
BT_VOID, BT_CONST_PTR)
|
|
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
|
|
BT_INT, BT_CONST_STRING)
|
|
|
|
DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
|
|
BT_INT, BT_PTR, BT_CONST_STRING)
|
|
|
|
DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
|
|
DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
|
|
BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)
|