From e549ca891fc42b78d97df3c46fb83f28bb74e01b Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 11 Feb 2022 11:14:00 +0800 Subject: add a missed local variable check. --- src/yuescript/yue_compiler.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 33d4dcb..6617ec5 100755 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -2023,17 +2023,9 @@ private: throw std::logic_error(_info.errorMessage("can not apply update to a metatable"sv, leftExp)); } BLOCK_START - BREAK_IF(chain->items.size() < 2); - if (chain->items.size() == 2) { - if (auto callable = ast_cast(chain->items.front())) { - ast_node* var = callable->item.as(); - if (auto self = callable->item.as()) { - var = self->name.as(); - } - BREAK_IF(var); - } - } if (op == "#"sv) { + auto varName = singleVariableFrom(chain); + BREAK_IF(!varName.empty() && isLocal(varName)); auto objVar = getUnusedName("_obj_"sv); auto newAssignment = x->new_ptr(); newAssignment->expList.set(toAst(objVar, x)); @@ -2044,6 +2036,16 @@ private: chain->items.clear(); chain->items.push_back(toAst(objVar, x)); } else { + BREAK_IF(chain->items.size() < 2); + if (chain->items.size() == 2) { + if (auto callable = ast_cast(chain->items.front())) { + ast_node* var = callable->item.as(); + if (auto self = callable->item.as()) { + var = self->name.as(); + } + BREAK_IF(var && isLocal(_parser.toString(var))); + } + } auto tmpChain = x->new_ptr(); ast_ptr ptr(chain->items.back()); for (auto item : chain->items.objects()) { -- cgit v1.2.3-55-g6feb