//===-- lib/Semantics/check-purity.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_PURITY_H_ #define FORTRAN_SEMANTICS_CHECK_PURITY_H_ #include "flang/Semantics/semantics.h" #include namespace Fortran::parser { struct ExecutableConstruct; struct SubroutineSubprogram; struct FunctionSubprogram; struct PrefixSpec; } // namespace Fortran::parser namespace Fortran::semantics { class PurityChecker : public virtual BaseChecker { public: explicit PurityChecker(SemanticsContext &c) : context_{c} {} void Enter(const parser::ExecutableConstruct &); void Enter(const parser::SubroutineSubprogram &); void Leave(const parser::SubroutineSubprogram &); void Enter(const parser::FunctionSubprogram &); void Leave(const parser::FunctionSubprogram &); private: bool InPureSubprogram() const; bool HasPurePrefix(const std::list &) const; void Entered(parser::CharBlock, const std::list &); void Left(); SemanticsContext &context_; int depth_{0}; int pureDepth_{-1}; }; } // namespace Fortran::semantics #endif