From a89680fe48dd1520843d7629e2006f732e313200 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 28 Jul 2023 15:54:12 +0800 Subject: made a little optimization for try-catch syntax. --- src/yuescript/yue_compiler.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 4d8ed86..ed5e849 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -72,7 +72,7 @@ static std::unordered_set Metamethods = { "close"s // Lua 5.4 }; -const std::string_view version = "0.17.12"sv; +const std::string_view version = "0.17.13"sv; const std::string_view extension = "yue"sv; class CompileError : public std::logic_error { @@ -7951,6 +7951,20 @@ private: body->content.set(tryNode->catchBlock->body); funLit->body.set(body); } + if (auto tryBlock = tryNode->func.as()) { + BLOCK_START + BREAK_IF(tryBlock->statements.size() != 1); + auto stmt = static_cast(tryBlock->statements.front()); + auto expListAssign = stmt->content.as(); + BREAK_IF(expListAssign->action); + auto value = singleValueFrom(expListAssign->expList); + BREAK_IF(!value); + auto chainValue = value->item.as(); + BREAK_IF(!chainValue); + BREAK_IF(!isChainValueCall(chainValue)); + tryNode->func.set(expListAssign->expList->exprs.front()); + BLOCK_END + } if (auto tryBlock = tryNode->func.as()) { auto tryExp = toAst("->"sv, x); auto funLit = simpleSingleValueFrom(tryExp)->value.to(); -- cgit v1.2.3-55-g6feb