diff options
author | Li Jin <dragon-fly@qq.com> | 2023-06-29 14:23:44 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2023-06-29 14:24:40 +0800 |
commit | dce38caac22a024026d19f556aefe0669f97403c (patch) | |
tree | 8b90a10585139dec76b596d714e213fc9393603b /src/yuescript/yue_compiler.cpp | |
parent | 3edfe65c36d716ca0d1a4d15e78c84c94cb144d0 (diff) | |
download | yuescript-dce38caac22a024026d19f556aefe0669f97403c.tar.gz yuescript-dce38caac22a024026d19f556aefe0669f97403c.tar.bz2 yuescript-dce38caac22a024026d19f556aefe0669f97403c.zip |
fix assignment to in-expression with discrete values issue from #140v0.17.3
Diffstat (limited to '')
-rw-r--r-- | src/yuescript/yue_compiler.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index c1426f9..efd0aed 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp | |||
@@ -72,7 +72,7 @@ static std::unordered_set<std::string> Metamethods = { | |||
72 | "close"s // Lua 5.4 | 72 | "close"s // Lua 5.4 |
73 | }; | 73 | }; |
74 | 74 | ||
75 | const std::string_view version = "0.17.2"sv; | 75 | const std::string_view version = "0.17.3"sv; |
76 | const std::string_view extension = "yue"sv; | 76 | const std::string_view extension = "yue"sv; |
77 | 77 | ||
78 | class CompileError : public std::logic_error { | 78 | class CompileError : public std::logic_error { |
@@ -5429,7 +5429,13 @@ private: | |||
5429 | for (auto exp : discrete->values.objects()) { | 5429 | for (auto exp : discrete->values.objects()) { |
5430 | transformExp(static_cast<Exp_t*>(exp), tmp, ExpUsage::Closure); | 5430 | transformExp(static_cast<Exp_t*>(exp), tmp, ExpUsage::Closure); |
5431 | } | 5431 | } |
5432 | _buf << indent() << "return "sv; | 5432 | if (usage == ExpUsage::Assignment) { |
5433 | str_list tmpList; | ||
5434 | transformExp(static_cast<Exp_t*>(assignList->exprs.front()), tmpList, ExpUsage::Closure); | ||
5435 | _buf << indent() << tmpList.back() << " = "sv; | ||
5436 | } else { | ||
5437 | _buf << indent() << "return "sv; | ||
5438 | } | ||
5433 | if (unary_exp->inExp->not_) { | 5439 | if (unary_exp->inExp->not_) { |
5434 | _buf << "not ("sv; | 5440 | _buf << "not ("sv; |
5435 | } | 5441 | } |