summaryrefslogtreecommitdiff
path: root/src/hir/expr_ptr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/expr_ptr.cpp')
-rw-r--r--src/hir/expr_ptr.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/hir/expr_ptr.cpp b/src/hir/expr_ptr.cpp
index 1f4cb1c3..fcef34bd 100644
--- a/src/hir/expr_ptr.cpp
+++ b/src/hir/expr_ptr.cpp
@@ -7,6 +7,7 @@
*/
#include <hir/expr_ptr.hpp>
#include <hir/expr.hpp>
+#include <hir/expr_state.hpp>
::HIR::ExprPtr::ExprPtr(::std::unique_ptr< ::HIR::ExprNode> v):
node( mv$(v) )
@@ -32,3 +33,56 @@
this->ptr = nullptr;
return rv;
}
+
+::HIR::ExprStatePtr::ExprStatePtr(ExprState x):
+ ptr(new ExprState( ::std::move(x) ))
+{
+}
+::HIR::ExprStatePtr::~ExprStatePtr()
+{
+ delete ptr;
+ ptr = nullptr;
+}
+
+
+const ::MIR::Function* HIR::ExprPtr::get_mir_opt() const
+{
+ if(!this->m_mir)
+ return nullptr;
+ return &*this->m_mir;
+}
+const ::MIR::Function& HIR::ExprPtr::get_mir_or_error(const Span& sp) const
+{
+ if(!this->m_mir)
+ BUG(sp, "No MIR");
+ return *this->m_mir;
+}
+::MIR::Function& HIR::ExprPtr::get_mir_or_error_mut(const Span& sp)
+{
+ if(!this->m_mir)
+ BUG(sp, "No MIR");
+ return *this->m_mir;
+}
+const ::MIR::Function* HIR::ExprPtr::get_ext_mir() const
+{
+ if(this->node)
+ return nullptr;
+ if(!this->m_mir)
+ return nullptr;
+ return &*this->m_mir;
+}
+::MIR::Function* HIR::ExprPtr::get_ext_mir_mut()
+{
+ if(this->node)
+ return nullptr;
+ if(!this->m_mir)
+ return nullptr;
+ return &*this->m_mir;
+}
+void HIR::ExprPtr::set_mir(::MIR::FunctionPointer mir)
+{
+ assert( !this->m_mir );
+ m_mir = ::std::move(mir);
+}
+
+