From 8279fa0231a5f4f2d34c46863462ab7228b9a338 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 19 Mar 2024 09:12:47 +0800 Subject: fix anonymous function args order. --- src/yuescript/yue_compiler.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index d416dbd..de41b45 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -3653,7 +3653,7 @@ private: } } - std::optional> upValueFuncFrom(Exp_t* exp, str_list* ensureArgList = nullptr) { + std::optional> upValueFuncFrom(Exp_t* exp, str_list* ensureArgListInTheEnd = nullptr) { if (_funcLevel <= 1) return std::nullopt; auto result = exp->traverse([&](ast_node* node) { switch (node->get_id()) { @@ -3725,25 +3725,33 @@ private: } if (!upVarsAssignedOrCaptured) { auto x = exp; - if (usedVar) { - args.push_back("..."s); - } - if (ensureArgList) { + if (ensureArgListInTheEnd) { std::unordered_set vars; for (const auto& arg : args) { vars.insert(arg); } - for (const auto& arg : *ensureArgList) { + for (const auto& arg : *ensureArgListInTheEnd) { vars.erase(arg); } str_list finalArgs; for (const auto& arg : vars) { finalArgs.push_back(arg); } - for (const auto& arg : *ensureArgList) { + finalArgs.sort(); + for (const auto& arg : *ensureArgListInTheEnd) { finalArgs.push_back(arg); } + if (usedVar) { + if (finalArgs.back() != "..."sv) { + finalArgs.push_back("..."s); + } + } args = std::move(finalArgs); + } else { + args.sort(); + if (usedVar) { + args.push_back("..."s); + } } auto funLit = toAst("("s + join(args, ","sv) + ")-> nil"s, x); funLit->body->content.set(stmt.get()); @@ -8070,7 +8078,7 @@ private: auto chainValue = static_cast(value->item.get()); if (auto callable = ast_cast(chainValue->items.front()); callable && chainValue->items.size() == 1) { if (auto self = callable->item.as()) { - if (auto selfVar = self->name.as()) { + if (self->name.as()) { classTextName = "\"self\""; } } else if (auto var = callable->item.as()) { -- cgit v1.2.3-55-g6feb