(root)/
gcc-13.2.0/
gcc/
fortran/
parse.h
       1  /* Parser header
       2     Copyright (C) 2003-2023 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_PARSE_H
      23  #define GFC_PARSE_H
      24  
      25  /* Enum for what the compiler is currently doing.  */
      26  enum gfc_compile_state
      27  {
      28    COMP_NONE, COMP_PROGRAM, COMP_MODULE, COMP_SUBMODULE, COMP_SUBROUTINE,
      29    COMP_FUNCTION, COMP_BLOCK_DATA, COMP_INTERFACE, COMP_DERIVED,
      30    COMP_DERIVED_CONTAINS, COMP_BLOCK, COMP_ASSOCIATE, COMP_IF,
      31    COMP_STRUCTURE, COMP_UNION, COMP_MAP,
      32    COMP_DO, COMP_SELECT, COMP_FORALL, COMP_WHERE, COMP_CONTAINS, COMP_ENUM,
      33    COMP_SELECT_TYPE, COMP_SELECT_RANK, COMP_OMP_STRUCTURED_BLOCK, COMP_CRITICAL,
      34    COMP_DO_CONCURRENT, COMP_OMP_STRICTLY_STRUCTURED_BLOCK
      35  };
      36  
      37  /* Stack element for the current compilation state.  These structures
      38     are allocated as automatic variables.  */
      39  typedef struct gfc_state_data
      40  {
      41    gfc_compile_state state;
      42    gfc_symbol *sym;              /* Block name associated with this level */
      43    gfc_symtree *do_variable;     /* For DO blocks the iterator variable.  */
      44  
      45    struct gfc_code *construct;
      46    struct gfc_code *head, *tail;
      47    struct gfc_state_data *previous;
      48  
      49    /* Block-specific state data.  */
      50    union
      51    {
      52      gfc_st_label *end_do_label;
      53      gfc_oacc_declare *oacc_declare_clauses;
      54    }
      55    ext;
      56  }
      57  gfc_state_data;
      58  
      59  extern gfc_state_data *gfc_state_stack;
      60  
      61  #define gfc_current_block() (gfc_state_stack->sym)
      62  #define gfc_current_state() (gfc_state_stack->state)
      63  #define gfc_comp_struct(s) \
      64    ((s) == COMP_DERIVED || (s) == COMP_STRUCTURE || (s) == COMP_MAP)
      65  
      66  int gfc_check_do_variable (gfc_symtree *);
      67  bool gfc_find_state (gfc_compile_state);
      68  gfc_state_data *gfc_enclosing_unit (gfc_compile_state *);
      69  const char *gfc_ascii_statement (gfc_statement, bool strip_sentinel = false) ;
      70  match gfc_match_enum (void);
      71  match gfc_match_enumerator_def (void);
      72  void gfc_free_enum_history (void);
      73  extern bool gfc_matching_function;
      74  match gfc_match_prefix (gfc_typespec *);
      75  bool is_oacc (gfc_state_data *);
      76  #endif  /* GFC_PARSE_H  */