From a485837b528f268e88e6b65a62f252466cdb5923 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Wed, 28 Feb 2024 11:58:24 +0800 Subject: mark vars in for-loop const by default, because Lua 5.5 did it. --- src/yuescript/yue_compiler.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 30800e6..7a4aa62 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -75,7 +75,7 @@ static std::unordered_set Metamethods = { "close"s // Lua 5.4 }; -const std::string_view version = "0.21.8"sv; +const std::string_view version = "0.22.0"sv; const std::string_view extension = "yue"sv; class CompileError : public std::logic_error { @@ -6892,7 +6892,7 @@ private: auto x = nameList; str_list temp; str_list vars; - str_list varBefore, varAfter; + str_list varBefore, varConstAfter, varAfter; bool extraScope = false; std::list>> destructPairs; for (auto _item : nameList->items.objects()) { @@ -6901,6 +6901,7 @@ private: case id(): transformVariable(static_cast(item), vars); varAfter.push_back(vars.back()); + varConstAfter.push_back(vars.back()); break; case id(): { auto desVar = getUnusedName("_des_"sv); @@ -7034,6 +7035,7 @@ private: pushScope(); for (const auto& var : vars) forceAddToScope(var); for (const auto& var : varAfter) addToScope(var); + for (const auto& var : varConstAfter) markVarConst(var); if (!destructPairs.empty()) { temp.clear(); for (auto& pair : destructPairs) { @@ -7048,6 +7050,7 @@ private: assignment->expList.set(expList); assignment->action.set(assign); transformAssignment(assignment, temp); + markDestructureConst(assignment); } out.back().append(join(temp)); } @@ -7118,6 +7121,7 @@ private: _buf << indent() << "for "sv << varName << " = "sv << start << ", "sv << stop << (step.empty() ? Empty : ", "s + step) << " do"sv << nll(var); pushScope(); forceAddToScope(varName); + markVarConst(varName); out.push_back(clearBuf()); } -- cgit v1.2.3-55-g6feb