From 5ef5cff3efd030eb440133b5e4b2925bb9fe8ead Mon Sep 17 00:00:00 2001 From: Li Jin Date: Mon, 5 Feb 2024 14:52:29 +0800 Subject: fix an empty check case. --- spec/inputs/in_expression.yue | 4 +++- spec/outputs/in_expression.lua | 6 ++++++ src/yuescript/yue_compiler.cpp | 26 +++++++++++++++++--------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/spec/inputs/in_expression.yue b/spec/inputs/in_expression.yue index 0b2a87a..e854083 100644 --- a/spec/inputs/in_expression.yue +++ b/spec/inputs/in_expression.yue @@ -72,6 +72,8 @@ do 2 x: 3 } - + print a in [] + a = 1 + print a in {} nil diff --git a/spec/outputs/in_expression.lua b/spec/outputs/in_expression.lua index b99be8a..3ccab0c 100644 --- a/spec/outputs/in_expression.lua +++ b/spec/outputs/in_expression.lua @@ -206,5 +206,11 @@ do b = not _find_0 end end + print((function() + local _val_0 = a + return false + end)()) + local a = 1 + print((false)) end return nil diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 5cdbfda..30800e6 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.7"sv; +const std::string_view version = "0.21.8"sv; const std::string_view extension = "yue"sv; class CompileError : public std::logic_error { @@ -6162,10 +6162,14 @@ private: if (unary_exp->inExp->not_) { _buf << "not ("sv; } - for (const auto& exp : tmp) { - _buf << exp << " == "sv << newVar; - if (exp != tmp.back()) { - _buf << " or "sv; + if (tmp.empty()) { + _buf << "false"sv; + } else { + for (const auto& exp : tmp) { + _buf << exp << " == "sv << newVar; + if (exp != tmp.back()) { + _buf << " or "sv; + } } } if (unary_exp->inExp->not_) { @@ -6203,10 +6207,14 @@ private: _buf << "not "sv; } _buf << '('; - for (const auto& exp : tmp) { - _buf << exp << " == "sv << varName; - if (exp != tmp.back()) { - _buf << " or "sv; + if (tmp.empty()) { + _buf << "false"sv; + } else { + for (const auto& exp : tmp) { + _buf << exp << " == "sv << varName; + if (exp != tmp.back()) { + _buf << " or "sv; + } } } _buf << ')'; -- cgit v1.2.3-55-g6feb