From 77537e2059497acb2bbcf5b49dacd43160717b88 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 9 Nov 2019 20:00:01 +0800 Subject: MIR Gen - Delete HIR once MIR is created (replace with a small node) --- src/mir/from_hir.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mir/from_hir.cpp b/src/mir/from_hir.cpp index 697f8141..1c1a9c69 100644 --- a/src/mir/from_hir.cpp +++ b/src/mir/from_hir.cpp @@ -2597,12 +2597,21 @@ void HIR_GenerateMIR_Expr(const ::HIR::Crate& crate, const ::HIR::ItemPath& path void HIR_GenerateMIR(::HIR::Crate& crate) { - ::MIR::OuterVisitor ov { crate, [&](const auto& res, const auto& p, auto& expr_ptr, const auto& args, const auto& ty){ + ::MIR::OuterVisitor ov { crate, [&](const auto& res, const auto& p, ::HIR::ExprPtr& expr_ptr, const auto& args, const auto& ty){ if( !expr_ptr.get_mir_opt() ) { expr_ptr.set_mir( LowerMIR(res, p, expr_ptr, ty, args) ); } } }; ov.visit_crate(crate); + + // Once MIR is generated, free the HIR expression tree (replace each node with an empty tuple node) + ::MIR::OuterVisitor ov_free(crate, [&](const auto& res, const auto& p, ::HIR::ExprPtr& expr_ptr, const auto& args, const auto& ty){ + if( expr_ptr ) + { + expr_ptr.reset(new ::HIR::ExprNode_Tuple(expr_ptr->m_span, {})); + } + }); + ov_free.visit_crate(crate); } -- cgit v1.2.3