//===-- lib/Semantics/check-do-forall.h -------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef FORTRAN_SEMANTICS_CHECK_DO_FORALL_H_
#define FORTRAN_SEMANTICS_CHECK_DO_FORALL_H_

#include "flang/Common/idioms.h"
#include "flang/Semantics/semantics.h"

namespace Fortran::parser {
struct AssignmentStmt;
struct CallStmt;
struct ConnectSpec;
struct CycleStmt;
struct DoConstruct;
struct ExitStmt;
struct Expr;
struct ForallAssignmentStmt;
struct ForallConstruct;
struct ForallStmt;
struct InquireSpec;
struct IoControlSpec;
struct OutputImpliedDo;
struct StatVariable;
} // namespace Fortran::parser

namespace Fortran::semantics {

// To specify different statement types used in semantic checking.
ENUM_CLASS(StmtType, CYCLE, EXIT)

// Perform semantic checks on DO and FORALL constructs and statements.
class DoForallChecker : public virtual BaseChecker {
public:
  explicit DoForallChecker(SemanticsContext &context) : context_{context} {}
  void Leave(const parser::AssignmentStmt &);
  void Leave(const parser::CallStmt &);
  void Leave(const parser::ConnectSpec &);
  void Enter(const parser::CycleStmt &);
  void Enter(const parser::DoConstruct &);
  void Leave(const parser::DoConstruct &);
  void Enter(const parser::ForallConstruct &);
  void Leave(const parser::ForallConstruct &);
  void Enter(const parser::ForallStmt &);
  void Leave(const parser::ForallStmt &);
  void Leave(const parser::ForallAssignmentStmt &s);
  void Enter(const parser::ExitStmt &);
  void Enter(const parser::Expr &);
  void Leave(const parser::Expr &);
  void Leave(const parser::InquireSpec &);
  void Leave(const parser::IoControlSpec &);
  void Leave(const parser::OutputImpliedDo &);
  void Leave(const parser::StatVariable &);

private:
  SemanticsContext &context_;
  int exprDepth_{0};

  void SayBadLeave(
      StmtType, const char *enclosingStmt, const ConstructNode &) const;
  void CheckDoConcurrentExit(StmtType, const ConstructNode &) const;
  void CheckForBadLeave(StmtType, const ConstructNode &) const;
  void CheckNesting(StmtType, const parser::Name *) const;
};
} // namespace Fortran::semantics
#endif
