OSDN Git Service

Nathanael Nerode <neroden@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / ada / fe.h
1 /****************************************************************************
2  *                                                                          *
3  *                         GNAT COMPILER COMPONENTS                         *
4  *                                                                          *
5  *                                    FE                                    *
6  *                                                                          *
7  *                              C Header File                               *
8  *                                                                          *
9  *                                                                          *
10  *          Copyright (C) 1992-2002 Free Software Foundation, Inc.          *
11  *                                                                          *
12  * GNAT is free software;  you can  redistribute it  and/or modify it under *
13  * terms of the  GNU General Public License as published  by the Free Soft- *
14  * ware  Foundation;  either version 2,  or (at your option) any later ver- *
15  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
16  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
17  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
18  * for  more details.  You should have  received  a copy of the GNU General *
19  * Public License  distributed with GNAT;  see file COPYING.  If not, write *
20  * to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, *
21  * MA 02111-1307, USA.                                                      *
22  *                                                                          *
23  * As a  special  exception,  if you  link  this file  with other  files to *
24  * produce an executable,  this file does not by itself cause the resulting *
25  * executable to be covered by the GNU General Public License. This except- *
26  * ion does not  however invalidate  any other reasons  why the  executable *
27  * file might be covered by the  GNU Public License.                        *
28  *                                                                          *
29  * GNAT was originally developed  by the GNAT team at  New York University. *
30  * Extensive contributions were provided by Ada Core Technologies Inc.      *
31  *                                                                          *
32  ****************************************************************************/
33
34 /* This file contains definitions to access front-end functions and
35    variables used by gigi.  */
36
37 /* atree: */
38
39 #define Is_Rewrite_Substitution atree__is_rewrite_substitution
40 #define Original_Node           atree__original_node
41
42 extern Boolean Is_Rewrite_Subsitution   PARAMS ((Node_Id));
43 extern Node_Id Original_Node            PARAMS ((Node_Id));
44
45 /* comperr:  */
46
47 #define Compiler_Abort comperr__compiler_abort
48 extern int Compiler_Abort PARAMS ((Fat_Pointer, int)) ATTRIBUTE_NORETURN;
49
50 /* csets: Definitions to access the front-end's character translation
51    tables.  */
52
53 #define Fold_Lower(C) csets__fold_lower[C]
54 #define Fold_Upper(C) csets__fold_upper[C]
55 extern char Fold_Lower[], Fold_Upper[];
56
57 /* debug: */
58
59 #define Debug_Flag_XX debug__debug_flag_xx
60 #define Debug_Flag_NN debug__debug_flag_nn
61
62 extern Boolean Debug_Flag_XX;
63 extern Boolean Debug_Flag_NN;
64
65 /* einfo: We will be setting Esize for types, Component_Bit_Offset for fields,
66    Alignment for types and objects, Component_Size for array types, and
67    Present_Expr for N_Variant nodes.  */
68
69 #define Set_Alignment                   einfo__set_alignment
70 #define Set_Esize                       einfo__set_esize
71 #define Set_RM_Size                     einfo__set_rm_size
72 #define Set_Component_Bit_Offset        einfo__set_component_bit_offset
73 #define Set_Component_Size              einfo__set_component_size
74 #define Set_Present_Expr                sinfo__set_present_expr
75
76 extern void Set_Alignment               PARAMS ((Entity_Id, Uint));
77 extern void Set_Component_Size          PARAMS ((Entity_Id, Uint));
78 extern void Set_Esize                   PARAMS ((Entity_Id, Uint));
79 extern void Set_RM_Size                 PARAMS ((Entity_Id, Uint));
80 extern void Set_Component_Bit_Offset    PARAMS ((Entity_Id, Uint));
81 extern void Set_Present_Expr            PARAMS ((Node_Id, Uint));
82
83 /* Test if the node N is the name of an entity (i.e. is an identifier,
84    expanded name, or an attribute reference that returns an entity).  */
85 #define Is_Entity_Name einfo__is_entity_name
86 extern Boolean Is_Entity_Name           PARAMS ((Node_Id));
87
88 #define Get_Attribute_Definition_Clause einfo__get_attribute_definition_clause
89 extern Node_Id Get_Attribute_Definition_Clause PARAMS ((Entity_Id, char));
90
91 /* errout: */
92
93 #define Error_Msg_N     errout__error_msg_n
94 #define Error_Msg_NE    errout__error_msg_ne
95 #define Error_Msg_Node_2 errout__error_msg_node_2
96 #define Error_Msg_Uint_1 errout__error_msg_uint_1
97 #define Error_Msg_Uint_2 errout__error_msg_uint_2
98
99 extern void Error_Msg_N         PARAMS ((Fat_Pointer, Node_Id));
100 extern void Error_Msg_NE        PARAMS ((Fat_Pointer, Node_Id, Entity_Id));
101
102 extern Entity_Id Error_Msg_Node_2;
103 extern Uint Error_Msg_Uint_1;
104 extern Uint Error_Msg_Uint_2;
105
106 /* exp_code:  */
107 #define Asm_Input_Constraint exp_code__asm_input_constraint
108 #define Asm_Input_Value exp_code__asm_input_value
109 #define Asm_Output_Constraint exp_code__asm_output_constraint
110 #define Asm_Output_Variable exp_code__asm_output_variable
111 #define Asm_Template exp_code__asm_template
112 #define Clobber_Get_Next exp_code__clobber_get_next
113 #define Clobber_Setup exp_code__clobber_setup
114 #define Is_Asm_Volatile exp_code__is_asm_volatile
115 #define Next_Asm_Input exp_code__next_asm_input
116 #define Next_Asm_Output exp_code__next_asm_output
117 #define Setup_Asm_Inputs exp_code__setup_asm_inputs
118 #define Setup_Asm_Outputs exp_code__setup_asm_outputs
119
120 extern Node_Id Asm_Input_Constraint     PARAMS ((void));
121 extern Node_Id Asm_Input_Value          PARAMS ((void));
122 extern Node_Id Asm_Output_Constraint    PARAMS ((void));
123 extern Node_Id Asm_Output_Variable      PARAMS ((void));
124 extern Node_Id Asm_Template             PARAMS ((Node_Id));
125 extern char *Clobber_Get_Next           PARAMS ((void));
126 extern void Clobber_Setup               PARAMS ((Node_Id));
127 extern Boolean Is_Asm_Volatile          PARAMS ((Node_Id));
128 extern void Next_Asm_Input              PARAMS ((void));
129 extern void Next_Asm_Output             PARAMS ((void));
130 extern void Setup_Asm_Inputs            PARAMS ((Node_Id));
131 extern void Setup_Asm_Outputs           PARAMS ((Node_Id));
132
133 /* exp_dbug:  */
134
135 #define Get_Encoded_Name exp_dbug__get_encoded_name
136 #define Get_External_Name_With_Suffix exp_dbug__get_external_name_with_suffix
137
138 extern void Get_Encoded_Name    PARAMS ((Entity_Id));
139 extern void Get_External_Name_With_Suffix PARAMS ((Entity_Id, Fat_Pointer));
140
141 /* lib: */
142
143 #define Cunit                           lib__cunit
144 #define Ident_String                    lib__ident_string
145 #define In_Extended_Main_Code_Unit      lib__in_extended_main_code_unit
146
147 extern Node_Id Cunit                            PARAMS ((Unit_Number_Type));
148 extern Node_Id Ident_String                     PARAMS ((Unit_Number_Type));
149 extern Boolean In_Extended_Main_Code_Unit       PARAMS ((Entity_Id));
150
151 /* opt: */
152
153 #define Global_Discard_Names opt__global_discard_names
154 #define Exception_Mechanism  opt__exception_mechanism
155
156 typedef enum {Setjmp_Longjmp, Front_End_ZCX, GCC_ZCX} Exception_Mechanism_Type;
157
158 extern Boolean Global_Discard_Names;
159 extern Exception_Mechanism_Type Exception_Mechanism;
160
161 /* restrict: */
162
163 #define Check_Elaboration_Code_Allowed restrict__check_elaboration_code_allowed
164 #define No_Exception_Handlers_Set restrict__no_exception_handlers_set
165
166 extern void Check_Elaboration_Code_Allowed      PARAMS ((Node_Id));
167 extern Boolean No_Exception_Handlers_Set        PARAMS ((void));
168
169 /* sem_eval: */
170
171 #define Compile_Time_Known_Value        sem_eval__compile_time_known_value
172 #define Expr_Value                      sem_eval__expr_value
173 #define Expr_Value_S                    sem_eval__expr_value_s
174 #define Is_OK_Static_Expression         sem_eval__is_ok_static_expression
175
176 extern Uint Expr_Value                  PARAMS ((Node_Id));
177 extern Node_Id Expr_Value_S             PARAMS ((Node_Id));
178 extern Boolean Compile_Time_Known_Value PARAMS((Node_Id));
179 extern Boolean Is_OK_Static_Expression  PARAMS((Node_Id));
180
181 /* sem_util: */
182
183 #define Defining_Entity                 sem_util__defining_entity
184 #define First_Actual                    sem_util__first_actual
185 #define Next_Actual                     sem_util__next_actual
186 #define Requires_Transient_Scope        sem_util__requires_transient_scope
187
188 extern Entity_Id Defining_Entity        PARAMS ((Node_Id));
189 extern Node_Id First_Actual             PARAMS ((Node_Id));
190 extern Node_Id Next_Actual              PARAMS ((Node_Id));
191 extern Boolean Requires_Transient_Scope PARAMS ((Entity_Id));
192
193 /* sinfo: These functions aren't in sinfo.h since we don't make the
194    setting functions, just the retrieval functions.  */
195 #define Set_Has_No_Elaboration_Code sinfo__set_has_no_elaboration_code
196 extern void Set_Has_No_Elaboration_Code PARAMS ((Node_Id, Boolean));
197
198 /* targparm: */
199
200 #define Stack_Check_Probes_On_Target targparm__stack_check_probes_on_target
201
202 extern Boolean Stack_Check_Probes_On_Target;