1
0
mirror of https://github.com/exaloop/codon.git synced 2025-06-03 15:03:52 +08:00
codon/compiler/sir/util/context.h
Mark Henderson d010f889dd
Namespace update to codon (#2)
* namespace seq to codon

* using namespace seq -> codon

* seq:: to codon::

Co-authored-by: ‘markhend’ <‘markhend@gmail.com’>
2021-10-04 13:10:59 -04:00

37 lines
848 B
C++

#pragma once
#include <vector>
namespace codon {
namespace ir {
namespace util {
/// Base for SIR visitor contexts.
template <typename Frame> class SIRContext {
private:
std::vector<Frame> frames;
public:
/// Emplaces a frame onto the stack.
/// @param args a parameter pack of the arguments
template <typename... Args> void emplaceFrame(Args... args) {
frames.emplace_back(args...);
}
/// Replaces a frame.
/// @param newFrame the new frame
void replaceFrame(Frame newFrame) {
frames.pop_back();
frames.push_back(newFrame);
}
/// @return all frames
std::vector<Frame> &getFrames() { return frames; }
/// @return the current frame
Frame &getFrame() { return frames.back(); }
/// Pops a frame.
void popFrame() { return frames.pop_back(); }
};
} // namespace util
} // namespace ir
} // namespace codon