FreeTensor
Loading...
Searching...
No Matches
track_stmt.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_TRACK_STMT_H
2#define FREE_TENSOR_TRACK_STMT_H
3
4#include <vector>
5
6#include <maybe_void.h>
7#include <stmt.h>
8
9namespace freetensor {
10
24template <class BaseClass> class TrackStmt : public BaseClass {
25 std::vector<Stmt> stmtStack_;
26
27 protected:
28 void pushStmt(const Stmt &op) { stmtStack_.emplace_back(op); }
29 void popStmt(const Stmt &) { stmtStack_.pop_back(); }
30
31 const Stmt &curStmt() const {
32 ASSERT(!stmtStack_.empty());
33 return stmtStack_.back();
34 }
35
36 typename BaseClass::StmtRetType visitStmt(const Stmt &op) override {
37 pushStmt(op);
38 MAYBE_VOID(ret, BaseClass::visitStmt(op));
39 popStmt(op);
40 if constexpr (!std::is_same_v<typename BaseClass::StmtRetType, void>) {
41 return ret;
42 }
43 }
44};
45
46} // namespace freetensor
47
48#endif // FREE_TENSOR_TRACK_STMT_H
Definition: track_stmt.h:24
void popStmt(const Stmt &)
Definition: track_stmt.h:29
void pushStmt(const Stmt &op)
Definition: track_stmt.h:28
BaseClass::StmtRetType visitStmt(const Stmt &op) override
Definition: track_stmt.h:36
const Stmt & curStmt() const
Definition: track_stmt.h:31
#define ASSERT(expr)
Definition: except.h:152
#define MAYBE_VOID(name, expr)
Definition: maybe_void.h:25
Definition: allocator.h:9