From c1a599fccfd3c37ad2afc743b2a49cc5290fcb9f Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 28 Jul 2022 14:45:31 +0800 Subject: add missing operator checks for update assignment. --- src/yuescript/yue_compiler.cpp | 9 +++++++-- src/yuescript/yue_parser.cpp | 10 ++-------- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 1a389b0..6213631 100755 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -2431,6 +2431,7 @@ private: chain->items.clear(); chain->items.dup(tmpChain->items); auto op = _parser.toString(update->op); + checkOperatorAvailable(op, update->op); if (op == "??"sv) { auto defs = getPreDefineLine(assignment); temp.push_back(defs); @@ -5802,8 +5803,7 @@ private: out.push_back(join(temp)); } - void transformBinaryOperator(BinaryOperator_t* node, str_list& out) { - auto op = _parser.toString(node); + void checkOperatorAvailable(const std::string& op, ast_node* node) { if (op == "&"sv || op == "~"sv || op == "|"sv || @@ -5817,6 +5817,11 @@ private: throw std::logic_error(_info.errorMessage("floor division is not available when not targeting Lua version 5.3 or higher"sv, node)); } } + } + + void transformBinaryOperator(BinaryOperator_t* node, str_list& out) { + auto op = _parser.toString(node); + checkOperatorAvailable(op, node); out.push_back(op == "!="sv ? "~="s : op); } diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp index 94ce550..31a2560 100755 --- a/src/yuescript/yue_parser.cpp +++ b/src/yuescript/yue_parser.cpp @@ -328,19 +328,13 @@ YueParser::YueParser() { update_op = expr("..") | - expr("+") | - expr("-") | - expr("*") | expr("//") | - expr("/") | - expr("%") | expr("or") | expr("and") | - expr("&") | - expr("|") | expr(">>") | expr("<<") | - expr("??"); + expr("??") | + set("+-*/%&|"); Update = Space >> update_op >> expr("=") >> Exp; -- cgit v1.2.3-55-g6feb