diff options
author | Li Jin <dragon-fly@qq.com> | 2024-02-28 11:58:24 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2024-02-28 11:58:24 +0800 |
commit | a485837b528f268e88e6b65a62f252466cdb5923 (patch) | |
tree | 5940b1352bc0f38815abda9d8933763c45fb2668 /src | |
parent | 5ef5cff3efd030eb440133b5e4b2925bb9fe8ead (diff) | |
download | yuescript-a485837b528f268e88e6b65a62f252466cdb5923.tar.gz yuescript-a485837b528f268e88e6b65a62f252466cdb5923.tar.bz2 yuescript-a485837b528f268e88e6b65a62f252466cdb5923.zip |
mark vars in for-loop const by default, because Lua 5.5 did it.
Diffstat (limited to 'src')
-rw-r--r-- | src/yuescript/yue_compiler.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
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<std::string> Metamethods = { | |||
75 | "close"s // Lua 5.4 | 75 | "close"s // Lua 5.4 |
76 | }; | 76 | }; |
77 | 77 | ||
78 | const std::string_view version = "0.21.8"sv; | 78 | const std::string_view version = "0.22.0"sv; |
79 | const std::string_view extension = "yue"sv; | 79 | const std::string_view extension = "yue"sv; |
80 | 80 | ||
81 | class CompileError : public std::logic_error { | 81 | class CompileError : public std::logic_error { |
@@ -6892,7 +6892,7 @@ private: | |||
6892 | auto x = nameList; | 6892 | auto x = nameList; |
6893 | str_list temp; | 6893 | str_list temp; |
6894 | str_list vars; | 6894 | str_list vars; |
6895 | str_list varBefore, varAfter; | 6895 | str_list varBefore, varConstAfter, varAfter; |
6896 | bool extraScope = false; | 6896 | bool extraScope = false; |
6897 | std::list<std::pair<ast_node*, ast_ptr<false, ast_node>>> destructPairs; | 6897 | std::list<std::pair<ast_node*, ast_ptr<false, ast_node>>> destructPairs; |
6898 | for (auto _item : nameList->items.objects()) { | 6898 | for (auto _item : nameList->items.objects()) { |
@@ -6901,6 +6901,7 @@ private: | |||
6901 | case id<Variable_t>(): | 6901 | case id<Variable_t>(): |
6902 | transformVariable(static_cast<Variable_t*>(item), vars); | 6902 | transformVariable(static_cast<Variable_t*>(item), vars); |
6903 | varAfter.push_back(vars.back()); | 6903 | varAfter.push_back(vars.back()); |
6904 | varConstAfter.push_back(vars.back()); | ||
6904 | break; | 6905 | break; |
6905 | case id<TableLit_t>(): { | 6906 | case id<TableLit_t>(): { |
6906 | auto desVar = getUnusedName("_des_"sv); | 6907 | auto desVar = getUnusedName("_des_"sv); |
@@ -7034,6 +7035,7 @@ private: | |||
7034 | pushScope(); | 7035 | pushScope(); |
7035 | for (const auto& var : vars) forceAddToScope(var); | 7036 | for (const auto& var : vars) forceAddToScope(var); |
7036 | for (const auto& var : varAfter) addToScope(var); | 7037 | for (const auto& var : varAfter) addToScope(var); |
7038 | for (const auto& var : varConstAfter) markVarConst(var); | ||
7037 | if (!destructPairs.empty()) { | 7039 | if (!destructPairs.empty()) { |
7038 | temp.clear(); | 7040 | temp.clear(); |
7039 | for (auto& pair : destructPairs) { | 7041 | for (auto& pair : destructPairs) { |
@@ -7048,6 +7050,7 @@ private: | |||
7048 | assignment->expList.set(expList); | 7050 | assignment->expList.set(expList); |
7049 | assignment->action.set(assign); | 7051 | assignment->action.set(assign); |
7050 | transformAssignment(assignment, temp); | 7052 | transformAssignment(assignment, temp); |
7053 | markDestructureConst(assignment); | ||
7051 | } | 7054 | } |
7052 | out.back().append(join(temp)); | 7055 | out.back().append(join(temp)); |
7053 | } | 7056 | } |
@@ -7118,6 +7121,7 @@ private: | |||
7118 | _buf << indent() << "for "sv << varName << " = "sv << start << ", "sv << stop << (step.empty() ? Empty : ", "s + step) << " do"sv << nll(var); | 7121 | _buf << indent() << "for "sv << varName << " = "sv << start << ", "sv << stop << (step.empty() ? Empty : ", "s + step) << " do"sv << nll(var); |
7119 | pushScope(); | 7122 | pushScope(); |
7120 | forceAddToScope(varName); | 7123 | forceAddToScope(varName); |
7124 | markVarConst(varName); | ||
7121 | out.push_back(clearBuf()); | 7125 | out.push_back(clearBuf()); |
7122 | } | 7126 | } |
7123 | 7127 | ||