diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-20 15:37:41 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-20 15:37:41 +0800 |
commit | ea8a0292728e2469135ceec585ceac7eecbd131d (patch) | |
tree | 0af23e697d02808e5cb4d3420fffc7e95a0e569a | |
parent | 8df12b977534b11b4016b0fc4080141a4bea689e (diff) | |
download | mrust-ea8a0292728e2469135ceec585ceac7eecbd131d.tar.gz |
MIR Gen - Emit trailing return value
-rw-r--r-- | src/mir/from_hir.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp index 001fe62e..7069ef85 100644 --- a/src/mir/from_hir.cpp +++ b/src/mir/from_hir.cpp @@ -22,7 +22,9 @@ namespace { class ExprVisitor_Conv: public MirConverter { + public: MirBuilder m_builder; + private: const ::std::vector< ::HIR::TypeRef>& m_variable_types; struct LoopDesc { @@ -1205,6 +1207,14 @@ namespace { ::HIR::ExprNode& root_node = const_cast<::HIR::ExprNode&>(*ptr); root_node.visit( ev ); + if( ev.m_builder.has_result() ) { + ev.m_builder.push_stmt_assign( ::MIR::LValue::make_Return({}), ev.m_builder.get_result(root_node.span()) ); + } + if( ev.m_builder.block_active() ) + { + ev.m_builder.end_block( ::MIR::Terminator::make_Return({}) ); + } + return ::MIR::FunctionPointer(new ::MIR::Function(mv$(fcn))); } |