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 @@ class YueCompilerImpl { 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 @@ class YueCompilerImpl { _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 << ')';