From 1008d1cb81a86c6a2d2467032815eefe150b2e6c Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 17 Mar 2019 15:53:22 +0800 Subject: Expand - Return part of catch blocks --- src/expand/mod.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/expand/mod.cpp') diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index fd188345..fd851c89 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -564,7 +564,10 @@ struct CExpandExpr: auto loop_name = mv$(m_try_stack.back()); m_try_stack.pop_back(); - auto break_node = AST::ExprNodeP(new AST::ExprNode_Flow(AST::ExprNode_Flow::BREAK, loop_name, mv$(node.m_inner))); + auto core_crate = (crate.m_load_std == ::AST::Crate::LOAD_NONE ? "" : "core"); + auto path_Ok = ::AST::Path(core_crate, {::AST::PathNode("result"), ::AST::PathNode("Result"), ::AST::PathNode("Ok")}); + auto ok_node = ::AST::ExprNodeP(new ::AST::ExprNode_CallPath( mv$(path_Ok), ::make_vec1(mv$(node.m_inner)) )); + auto break_node = AST::ExprNodeP(new AST::ExprNode_Flow(AST::ExprNode_Flow::BREAK, loop_name, mv$(ok_node))); this->replacement = AST::ExprNodeP(new AST::ExprNode_Loop(loop_name, mv$(break_node))); } void visit(::AST::ExprNode_Asm& node) override { -- cgit v1.2.3