13#ifndef FORTRAN_LOWER_STATEMENTCONTEXT_H
14#define FORTRAN_LOWER_STATEMENTCONTEXT_H
16#include "llvm/ADT/STLExtras.h"
17#include "llvm/ADT/SmallVector.h"
49 if (cleanupProhibited)
57 assert(cufs.empty() &&
"invalid StatementContext destructor call");
60 using CleanupFunction = std::function<void()>;
64 assert(!cufs.empty() &&
"invalid pushScope statement context");
70 assert(!cufs.empty() &&
"invalid attachCleanup statement context");
72 CleanupFunction oldCleanup = *cufs.back();
84 assert(!cufs.empty() &&
"invalid finalize statement context");
96 void pop() { cufs.pop_back(); }
104 bool hasCode()
const {
105 return !cufs.empty() && llvm::any_of(cufs, [](
auto &opt) ->
bool {
106 return opt.has_value();
112 StatementContext(
const StatementContext &) =
delete;
113 StatementContext &operator=(
const StatementContext &) =
delete;
114 StatementContext(StatementContext &&) =
delete;
123 mlir::Region ®ion, StatementContext &context);
Definition: StatementContext.h:46
void finalizeAndKeep()
Make cleanup calls. Retain the stack top list for a repeat call.
Definition: StatementContext.h:83
void finalizeAndReset()
Make cleanup calls. Clear the stack top list.
Definition: StatementContext.h:90
void pop()
Pop the stack top list.
Definition: StatementContext.h:96
void attachCleanup(CleanupFunction cuf)
Append a cleanup function to the "list" of cleanup functions.
Definition: StatementContext.h:69
void pushScope()
Push a context subscope.
Definition: StatementContext.h:63
void finalizeAndPop()
Make cleanup calls. Pop the stack top list.
Definition: StatementContext.h:99
Definition: FIRBuilder.h:55
Definition: AbstractConverter.h:59
void genCleanUpInRegionIfAny(mlir::Location loc, fir::FirOpBuilder &builder, mlir::Region ®ion, StatementContext &context)
Definition: Bridge.cpp:6221
Definition: ConvertVariable.h:26
Definition: AbstractConverter.h:31
Definition: AbstractConverter.h:27