1 /* All matcher functions. 2 Copyright (C) 2003-2016 Free Software Foundation, Inc. 3 Contributed by Steven Bosscher 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 3, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 22 #ifndef GFC_MATCH_H 23 #define GFC_MATCH_H 24 25 /* gfc_new_block points to the symbol of a newly matched block. */ 26 extern gfc_symbol *gfc_new_block; 27 28 /* Current statement label. Zero means no statement label. Because 29 new_st can get wiped during statement matching, we have to keep it 30 separate. */ 31 extern gfc_st_label *gfc_statement_label; 32 33 extern int gfc_matching_ptr_assignment; 34 extern int gfc_matching_procptr_assignment; 35 extern bool gfc_matching_prefix; 36 37 /* Default access specifier while matching procedure bindings. */ 38 extern gfc_access gfc_typebound_default_access; 39 40 /****************** All gfc_match* routines *****************/ 41 42 /* match.c. */ 43 44 /* Generic match subroutines. */ 45 match gfc_match_special_char (gfc_char_t *); 46 match gfc_match_space (void); 47 match gfc_match_eos (void); 48 match gfc_match_small_literal_int (int *, int *); 49 match gfc_match_st_label (gfc_st_label **); 50 match gfc_match_label (void); 51 match gfc_match_small_int (int *); 52 match gfc_match_small_int_expr (int *, gfc_expr **); 53 match gfc_match_name (char *); 54 match gfc_match_name_C (const char **buffer); 55 match gfc_match_symbol (gfc_symbol **, int); 56 match gfc_match_sym_tree (gfc_symtree **, int); 57 match gfc_match_intrinsic_op (gfc_intrinsic_op *); 58 match gfc_match_char (char); 59 match gfc_match (const char *, ...); 60 match gfc_match_iterator (gfc_iterator *, int); 61 match gfc_match_parens (void); 62 match gfc_match_type_spec (gfc_typespec *); 63 match gfc_match_member_sep(gfc_symbol *); 64 65 66 /* Statement matchers. */ 67 match gfc_match_program (void); 68 match gfc_match_pointer_assignment (void); 69 match gfc_match_assignment (void); 70 match gfc_match_if (gfc_statement *); 71 match gfc_match_else (void); 72 match gfc_match_elseif (void); 73 match gfc_match_event_post (void); 74 match gfc_match_event_wait (void); 75 match gfc_match_critical (void); 76 match gfc_match_block (void); 77 match gfc_match_associate (void); 78 match gfc_match_do (void); 79 match gfc_match_cycle (void); 80 match gfc_match_exit (void); 81 match gfc_match_lock (void); 82 match gfc_match_pause (void); 83 match gfc_match_stop (void); 84 match gfc_match_error_stop (void); 85 match gfc_match_continue (void); 86 match gfc_match_assign (void); 87 match gfc_match_goto (void); 88 match gfc_match_sync_all (void); 89 match gfc_match_sync_images (void); 90 match gfc_match_sync_memory (void); 91 match gfc_match_unlock (void); 92 93 match gfc_match_allocate (void); 94 match gfc_match_nullify (void); 95 match gfc_match_deallocate (void); 96 match gfc_match_return (void); 97 match gfc_match_call (void); 98 99 /* We want to use this function to check for a common-block-name 100 that can exist in a bind statement, so removed the "static" 101 declaration of the function in match.c. 102 103 TODO: should probably rename this now that it'll be globally seen to 104 gfc_match_common_name. */ 105 match match_common_name (char *name); 106 107 match gfc_match_common (void); 108 match gfc_match_block_data (void); 109 match gfc_match_namelist (void); 110 match gfc_match_module (void); 111 match gfc_match_equivalence (void); 112 match gfc_match_st_function (void); 113 match gfc_match_ptr_fcn_assign (void); 114 match gfc_match_case (void); 115 match gfc_match_select (void); 116 match gfc_match_select_type (void); 117 match gfc_match_type_is (void); 118 match gfc_match_class_is (void); 119 match gfc_match_where (gfc_statement *); 120 match gfc_match_elsewhere (void); 121 match gfc_match_forall (gfc_statement *); 122 123 /* Other functions. */ 124 125 gfc_common_head *gfc_get_common (const char *, int); 126 127 /* openmp.c. */ 128 129 /* OpenACC directive matchers. */ 130 match gfc_match_oacc_atomic (void); 131 match gfc_match_oacc_cache (void); 132 match gfc_match_oacc_wait (void); 133 match gfc_match_oacc_update (void); 134 match gfc_match_oacc_declare (void); 135 match gfc_match_oacc_loop (void); 136 match gfc_match_oacc_host_data (void); 137 match gfc_match_oacc_data (void); 138 match gfc_match_oacc_kernels (void); 139 match gfc_match_oacc_kernels_loop (void); 140 match gfc_match_oacc_parallel (void); 141 match gfc_match_oacc_parallel_loop (void); 142 match gfc_match_oacc_enter_data (void); 143 match gfc_match_oacc_exit_data (void); 144 match gfc_match_oacc_routine (void); 145 146 /* OpenMP directive matchers. */ 147 match gfc_match_omp_eos (void); 148 match gfc_match_omp_atomic (void); 149 match gfc_match_omp_barrier (void); 150 match gfc_match_omp_cancel (void); 151 match gfc_match_omp_cancellation_point (void); 152 match gfc_match_omp_critical (void); 153 match gfc_match_omp_declare_reduction (void); 154 match gfc_match_omp_declare_simd (void); 155 match gfc_match_omp_declare_target (void); 156 match gfc_match_omp_distribute (void); 157 match gfc_match_omp_distribute_parallel_do (void); 158 match gfc_match_omp_distribute_parallel_do_simd (void); 159 match gfc_match_omp_distribute_simd (void); 160 match gfc_match_omp_do (void); 161 match gfc_match_omp_do_simd (void); 162 match gfc_match_omp_flush (void); 163 match gfc_match_omp_master (void); 164 match gfc_match_omp_ordered (void); 165 match gfc_match_omp_parallel (void); 166 match gfc_match_omp_parallel_do (void); 167 match gfc_match_omp_parallel_do_simd (void); 168 match gfc_match_omp_parallel_sections (void); 169 match gfc_match_omp_parallel_workshare (void); 170 match gfc_match_omp_sections (void); 171 match gfc_match_omp_simd (void); 172 match gfc_match_omp_single (void); 173 match gfc_match_omp_target (void); 174 match gfc_match_omp_target_data (void); 175 match gfc_match_omp_target_teams (void); 176 match gfc_match_omp_target_teams_distribute (void); 177 match gfc_match_omp_target_teams_distribute_parallel_do (void); 178 match gfc_match_omp_target_teams_distribute_parallel_do_simd (void); 179 match gfc_match_omp_target_teams_distribute_simd (void); 180 match gfc_match_omp_target_update (void); 181 match gfc_match_omp_task (void); 182 match gfc_match_omp_taskgroup (void); 183 match gfc_match_omp_taskwait (void); 184 match gfc_match_omp_taskyield (void); 185 match gfc_match_omp_teams (void); 186 match gfc_match_omp_teams_distribute (void); 187 match gfc_match_omp_teams_distribute_parallel_do (void); 188 match gfc_match_omp_teams_distribute_parallel_do_simd (void); 189 match gfc_match_omp_teams_distribute_simd (void); 190 match gfc_match_omp_threadprivate (void); 191 match gfc_match_omp_workshare (void); 192 match gfc_match_omp_end_nowait (void); 193 match gfc_match_omp_end_single (void); 194 195 /* decl.c. */ 196 197 match gfc_match_data (void); 198 match gfc_match_null (gfc_expr **); 199 match gfc_match_kind_spec (gfc_typespec *, bool); 200 match gfc_match_old_kind_spec (gfc_typespec *); 201 match gfc_match_decl_type_spec (gfc_typespec *, int); 202 203 match gfc_match_end (gfc_statement *); 204 match gfc_match_data_decl (void); 205 match gfc_match_formal_arglist (gfc_symbol *, int, int); 206 match gfc_match_procedure (void); 207 match gfc_match_generic (void); 208 match gfc_match_function_decl (void); 209 match gfc_match_entry (void); 210 match gfc_match_subroutine (void); 211 match gfc_match_submod_proc (void); 212 match gfc_match_map (void); 213 match gfc_match_union (void); 214 match gfc_match_structure_decl (void); 215 match gfc_match_derived_decl (void); 216 match gfc_match_final_decl (void); 217 218 match gfc_match_implicit_none (void); 219 match gfc_match_implicit (void); 220 221 void gfc_set_constant_character_len (int, gfc_expr *, int); 222 223 /* Matchers for attribute declarations. */ 224 match gfc_match_allocatable (void); 225 match gfc_match_asynchronous (void); 226 match gfc_match_codimension (void); 227 match gfc_match_contiguous (void); 228 match gfc_match_dimension (void); 229 match gfc_match_external (void); 230 match gfc_match_gcc_attributes (void); 231 match gfc_match_import (void); 232 match gfc_match_intent (void); 233 match gfc_match_intrinsic (void); 234 match gfc_match_optional (void); 235 match gfc_match_parameter (void); 236 match gfc_match_pointer (void); 237 match gfc_match_protected (void); 238 match gfc_match_private (gfc_statement *); 239 match gfc_match_public (gfc_statement *); 240 match gfc_match_save (void); 241 match gfc_match_modproc (void); 242 match gfc_match_target (void); 243 match gfc_match_value (void); 244 match gfc_match_volatile (void); 245 246 /* decl.c. */ 247 248 /* Fortran 2003 c interop. 249 TODO: some of these should be moved to another file rather than decl.c */ 250 void set_com_block_bind_c (gfc_common_head *, int); 251 bool set_verify_bind_c_sym (gfc_symbol *, int); 252 bool set_verify_bind_c_com_block (gfc_common_head *, int); 253 bool get_bind_c_idents (void); 254 match gfc_match_bind_c_stmt (void); 255 match gfc_match_suffix (gfc_symbol *, gfc_symbol **); 256 match gfc_match_bind_c (gfc_symbol *, bool); 257 match gfc_get_type_attr_spec (symbol_attribute *, char*); 258 259 /* primary.c. */ 260 match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **); 261 match gfc_match_variable (gfc_expr **, int); 262 match gfc_match_equiv_variable (gfc_expr **); 263 match gfc_match_actual_arglist (int, gfc_actual_arglist **); 264 match gfc_match_literal_constant (gfc_expr **, int); 265 266 /* expr.c -- FIXME: this one should be eliminated by moving the 267 matcher to matchexp.c and a call to a new function in expr.c that 268 only makes sure the init expr. is valid. */ 269 bool gfc_reduce_init_expr (gfc_expr *expr); 270 match gfc_match_init_expr (gfc_expr **); 271 272 /* array.c. */ 273 match gfc_match_array_spec (gfc_array_spec **, bool, bool); 274 match gfc_match_array_ref (gfc_array_ref *, gfc_array_spec *, int, int); 275 match gfc_match_array_constructor (gfc_expr **); 276 277 /* interface.c. */ 278 match gfc_match_abstract_interface (void); 279 match gfc_match_generic_spec (interface_type *, char *, gfc_intrinsic_op *); 280 match gfc_match_interface (void); 281 match gfc_match_end_interface (void); 282 283 /* io.c. */ 284 match gfc_match_format (void); 285 match gfc_match_open (void); 286 match gfc_match_close (void); 287 match gfc_match_endfile (void); 288 match gfc_match_backspace (void); 289 match gfc_match_rewind (void); 290 match gfc_match_flush (void); 291 match gfc_match_inquire (void); 292 match gfc_match_read (void); 293 match gfc_match_wait (void); 294 match gfc_match_write (void); 295 match gfc_match_print (void); 296 297 /* matchexp.c. */ 298 match gfc_match_defined_op_name (char *, int); 299 match gfc_match_expr (gfc_expr **); 300 301 /* module.c. */ 302 match gfc_match_use (void); 303 match gfc_match_submodule (void); 304 void gfc_use_modules (void); 305 306 #endif /* GFC_MATCH_H */ 307 308