summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-20 15:37:41 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-20 15:37:41 +0800
commitea8a0292728e2469135ceec585ceac7eecbd131d (patch)
tree0af23e697d02808e5cb4d3420fffc7e95a0e569a
parent8df12b977534b11b4016b0fc4080141a4bea689e (diff)
downloadmrust-ea8a0292728e2469135ceec585ceac7eecbd131d.tar.gz
MIR Gen - Emit trailing return value
-rw-r--r--src/mir/from_hir.cpp10
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)));
}