diff options
author | John Hodge (Mutabah) <acessdev@gmail.com> | 2018-09-30 21:35:32 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-30 21:35:32 +0800 |
commit | bd3d69813cc54439fdc0db33943fa1254db3df06 (patch) | |
tree | 389b3f9fff419bd38275fddbf63fcbf3142d2f1c /src/hir/expr_ptr.cpp | |
parent | d85ac84278fa0322f1df0b16a45a1cdde83cba57 (diff) | |
parent | fe8018c3b2e2be2c3153a5c1a1bb73cd9c6ca370 (diff) | |
download | mrust-bd3d69813cc54439fdc0db33943fa1254db3df06.tar.gz |
Merge pull request #84 from thepowersgang/ondemand-generation
Generate MIR when required for constant evaluation
Diffstat (limited to 'src/hir/expr_ptr.cpp')
-rw-r--r-- | src/hir/expr_ptr.cpp | 54 |
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); +} + + |