1 /* All matcher functions. 2 Copyright (C) 2003-2013 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 63 /* Statement matchers. */ 64 match gfc_match_program (void); 65 match gfc_match_pointer_assignment (void); 66 match gfc_match_assignment (void); 67 match gfc_match_if (gfc_statement *); 68 match gfc_match_else (void); 69 match gfc_match_elseif (void); 70 match gfc_match_critical (void); 71 match gfc_match_block (void); 72 match gfc_match_associate (void); 73 match gfc_match_do (void); 74 match gfc_match_cycle (void); 75 match gfc_match_exit (void); 76 match gfc_match_lock (void); 77 match gfc_match_pause (void); 78 match gfc_match_stop (void); 79 match gfc_match_error_stop (void); 80 match gfc_match_continue (void); 81 match gfc_match_assign (void); 82 match gfc_match_goto (void); 83 match gfc_match_sync_all (void); 84 match gfc_match_sync_images (void); 85 match gfc_match_sync_memory (void); 86 match gfc_match_unlock (void); 87 88 match gfc_match_allocate (void); 89 match gfc_match_nullify (void); 90 match gfc_match_deallocate (void); 91 match gfc_match_return (void); 92 match gfc_match_call (void); 93 94 /* We want to use this function to check for a common-block-name 95 that can exist in a bind statement, so removed the "static" 96 declaration of the function in match.c. 97 98 TODO: should probably rename this now that it'll be globally seen to 99 gfc_match_common_name. */ 100 match match_common_name (char *name); 101 102 match gfc_match_common (void); 103 match gfc_match_block_data (void); 104 match gfc_match_namelist (void); 105 match gfc_match_module (void); 106 match gfc_match_equivalence (void); 107 match gfc_match_st_function (void); 108 match gfc_match_case (void); 109 match gfc_match_select (void); 110 match gfc_match_select_type (void); 111 match gfc_match_type_is (void); 112 match gfc_match_class_is (void); 113 match gfc_match_where (gfc_statement *); 114 match gfc_match_elsewhere (void); 115 match gfc_match_forall (gfc_statement *); 116 117 /* Other functions. */ 118 119 gfc_common_head *gfc_get_common (const char *, int); 120 121 /* openmp.c. */ 122 123 /* OpenMP directive matchers. */ 124 match gfc_match_omp_eos (void); 125 match gfc_match_omp_atomic (void); 126 match gfc_match_omp_barrier (void); 127 match gfc_match_omp_critical (void); 128 match gfc_match_omp_do (void); 129 match gfc_match_omp_flush (void); 130 match gfc_match_omp_master (void); 131 match gfc_match_omp_ordered (void); 132 match gfc_match_omp_parallel (void); 133 match gfc_match_omp_parallel_do (void); 134 match gfc_match_omp_parallel_sections (void); 135 match gfc_match_omp_parallel_workshare (void); 136 match gfc_match_omp_sections (void); 137 match gfc_match_omp_single (void); 138 match gfc_match_omp_task (void); 139 match gfc_match_omp_taskwait (void); 140 match gfc_match_omp_taskyield (void); 141 match gfc_match_omp_threadprivate (void); 142 match gfc_match_omp_workshare (void); 143 match gfc_match_omp_end_nowait (void); 144 match gfc_match_omp_end_single (void); 145 146 /* decl.c. */ 147 148 match gfc_match_data (void); 149 match gfc_match_null (gfc_expr **); 150 match gfc_match_kind_spec (gfc_typespec *, bool); 151 match gfc_match_old_kind_spec (gfc_typespec *); 152 match gfc_match_decl_type_spec (gfc_typespec *, int); 153 154 match gfc_match_end (gfc_statement *); 155 match gfc_match_data_decl (void); 156 match gfc_match_formal_arglist (gfc_symbol *, int, int); 157 match gfc_match_procedure (void); 158 match gfc_match_generic (void); 159 match gfc_match_function_decl (void); 160 match gfc_match_entry (void); 161 match gfc_match_subroutine (void); 162 match gfc_match_derived_decl (void); 163 match gfc_match_final_decl (void); 164 165 match gfc_match_implicit_none (void); 166 match gfc_match_implicit (void); 167 168 void gfc_set_constant_character_len (int, gfc_expr *, int); 169 170 /* Matchers for attribute declarations. */ 171 match gfc_match_allocatable (void); 172 match gfc_match_asynchronous (void); 173 match gfc_match_codimension (void); 174 match gfc_match_contiguous (void); 175 match gfc_match_dimension (void); 176 match gfc_match_external (void); 177 match gfc_match_gcc_attributes (void); 178 match gfc_match_import (void); 179 match gfc_match_intent (void); 180 match gfc_match_intrinsic (void); 181 match gfc_match_optional (void); 182 match gfc_match_parameter (void); 183 match gfc_match_pointer (void); 184 match gfc_match_protected (void); 185 match gfc_match_private (gfc_statement *); 186 match gfc_match_public (gfc_statement *); 187 match gfc_match_save (void); 188 match gfc_match_modproc (void); 189 match gfc_match_target (void); 190 match gfc_match_value (void); 191 match gfc_match_volatile (void); 192 193 /* decl.c. */ 194 195 /* Fortran 2003 c interop. 196 TODO: some of these should be moved to another file rather than decl.c */ 197 void set_com_block_bind_c (gfc_common_head *, int); 198 gfc_try set_verify_bind_c_sym (gfc_symbol *, int); 199 gfc_try set_verify_bind_c_com_block (gfc_common_head *, int); 200 gfc_try get_bind_c_idents (void); 201 match gfc_match_bind_c_stmt (void); 202 match gfc_match_suffix (gfc_symbol *, gfc_symbol **); 203 match gfc_match_bind_c (gfc_symbol *, bool); 204 match gfc_get_type_attr_spec (symbol_attribute *, char*); 205 206 /* primary.c. */ 207 match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **); 208 match gfc_match_variable (gfc_expr **, int); 209 match gfc_match_equiv_variable (gfc_expr **); 210 match gfc_match_actual_arglist (int, gfc_actual_arglist **); 211 match gfc_match_literal_constant (gfc_expr **, int); 212 213 /* expr.c -- FIXME: this one should be eliminated by moving the 214 matcher to matchexp.c and a call to a new function in expr.c that 215 only makes sure the init expr. is valid. */ 216 gfc_try gfc_reduce_init_expr (gfc_expr *expr); 217 match gfc_match_init_expr (gfc_expr **); 218 219 /* array.c. */ 220 match gfc_match_array_spec (gfc_array_spec **, bool, bool); 221 match gfc_match_array_ref (gfc_array_ref *, gfc_array_spec *, int, int); 222 match gfc_match_array_constructor (gfc_expr **); 223 224 /* interface.c. */ 225 match gfc_match_abstract_interface (void); 226 match gfc_match_generic_spec (interface_type *, char *, gfc_intrinsic_op *); 227 match gfc_match_interface (void); 228 match gfc_match_end_interface (void); 229 230 /* io.c. */ 231 match gfc_match_format (void); 232 match gfc_match_open (void); 233 match gfc_match_close (void); 234 match gfc_match_endfile (void); 235 match gfc_match_backspace (void); 236 match gfc_match_rewind (void); 237 match gfc_match_flush (void); 238 match gfc_match_inquire (void); 239 match gfc_match_read (void); 240 match gfc_match_wait (void); 241 match gfc_match_write (void); 242 match gfc_match_print (void); 243 244 /* matchexp.c. */ 245 match gfc_match_defined_op_name (char *, int); 246 match gfc_match_expr (gfc_expr **); 247 248 /* module.c. */ 249 match gfc_match_use (void); 250 void gfc_use_modules (void); 251 252 #endif /* GFC_MATCH_H */ 253 254