summaryrefslogtreecommitdiff
path: root/src/mir/mir.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mir/mir.hpp')
-rw-r--r--src/mir/mir.hpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mir/mir.hpp b/src/mir/mir.hpp
index c24aac51..ebef039a 100644
--- a/src/mir/mir.hpp
+++ b/src/mir/mir.hpp
@@ -402,6 +402,19 @@ struct BasicBlock
};
+struct EnumCache; // Defined in trans/enumerate.cpp
+class EnumCachePtr
+{
+ const EnumCache* p;
+public:
+ EnumCachePtr(const EnumCache* p=nullptr): p(p) {}
+ ~EnumCachePtr();
+ EnumCachePtr(EnumCachePtr&& x): p(x.p) { x.p = nullptr; }
+ EnumCachePtr& operator=(EnumCachePtr&& x) { this->~EnumCachePtr(); p = x.p; x.p = nullptr; return *this; }
+ operator bool() { return p; }
+ const EnumCache& operator*() const { return *p; }
+ const EnumCache* operator->() const { return p; }
+};
class Function
{
public:
@@ -410,6 +423,9 @@ public:
::std::vector<bool> drop_flags;
::std::vector<BasicBlock> blocks;
+
+ // Cache filled/used by enumerate
+ mutable EnumCachePtr trans_enum_state;
};
};