1/* Parser header 2 Copyright (C) 2003-2015 Free Software Foundation, Inc. 3 Contributed by Steven Bosscher 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 3, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING3. If not see 19<http://www.gnu.org/licenses/>. */ 20 21 22#ifndef GFC_PARSE_H 23#define GFC_PARSE_H 24 25/* Enum for what the compiler is currently doing. */ 26typedef enum 27{ 28 COMP_NONE, COMP_PROGRAM, COMP_MODULE, COMP_SUBROUTINE, COMP_FUNCTION, 29 COMP_BLOCK_DATA, COMP_INTERFACE, COMP_DERIVED, COMP_DERIVED_CONTAINS, 30 COMP_BLOCK, COMP_ASSOCIATE, COMP_IF, 31 COMP_DO, COMP_SELECT, COMP_FORALL, COMP_WHERE, COMP_CONTAINS, COMP_ENUM, 32 COMP_SELECT_TYPE, COMP_OMP_STRUCTURED_BLOCK, COMP_CRITICAL, COMP_DO_CONCURRENT 33} 34gfc_compile_state; 35 36/* Stack element for the current compilation state. These structures 37 are allocated as automatic variables. */ 38typedef struct gfc_state_data 39{ 40 gfc_compile_state state; 41 gfc_symbol *sym; /* Block name associated with this level */ 42 gfc_symtree *do_variable; /* For DO blocks the iterator variable. */ 43 44 struct gfc_code *construct; 45 struct gfc_code *head, *tail; 46 struct gfc_state_data *previous; 47 48 /* Block-specific state data. */ 49 union 50 { 51 gfc_st_label *end_do_label; 52 gfc_omp_clauses *oacc_declare_clauses; 53 } 54 ext; 55} 56gfc_state_data; 57 58extern gfc_state_data *gfc_state_stack; 59 60#define gfc_current_block() (gfc_state_stack->sym) 61#define gfc_current_state() (gfc_state_stack->state) 62 63int gfc_check_do_variable (gfc_symtree *); 64bool gfc_find_state (gfc_compile_state); 65gfc_state_data *gfc_enclosing_unit (gfc_compile_state *); 66const char *gfc_ascii_statement (gfc_statement); 67match gfc_match_enum (void); 68match gfc_match_enumerator_def (void); 69void gfc_free_enum_history (void); 70extern bool gfc_matching_function; 71match gfc_match_prefix (gfc_typespec *); 72bool is_oacc (gfc_state_data *); 73#endif /* GFC_PARSE_H */ 74