diff options
Diffstat (limited to 'src/mir/mir_builder.cpp')
-rw-r--r-- | src/mir/mir_builder.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp index 13d17d91..aa42cbc1 100644 --- a/src/mir/mir_builder.cpp +++ b/src/mir/mir_builder.cpp @@ -170,6 +170,29 @@ void MirBuilder::define_variable(unsigned int idx) return temp; } } +::MIR::Param MirBuilder::get_result_in_param(const Span& sp, const ::HIR::TypeRef& ty, bool allow_missing_value) +{ + if( allow_missing_value && !block_active() ) + { + return new_temporary(ty); + } + + auto rv = get_result(sp); + if( auto* e = rv.opt_Constant() ) + { + return mv$(*e); + } + else if( auto* e = rv.opt_Use() ) + { + return mv$(*e); + } + else + { + auto temp = new_temporary(ty); + push_stmt_assign( sp, ::MIR::LValue(temp.clone()), mv$(rv) ); + return temp; + } +} void MirBuilder::set_result(const Span& sp, ::MIR::RValue val) { if(m_result_valid) { |