aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2024-09-28 09:33:54 +0800
committerLi Jin <dragon-fly@qq.com>2024-09-28 09:33:54 +0800
commitd6d29a4288b96d42c7cabf424beb286bfbd24456 (patch)
tree6e29d7111725ca97077bb58d42b993200e13cea8
parent7575fe00aad91e0ba943e877ddcd838f76e095c0 (diff)
downloadyuescript-d6d29a4288b96d42c7cabf424beb286bfbd24456.tar.gz
yuescript-d6d29a4288b96d42c7cabf424beb286bfbd24456.tar.bz2
yuescript-d6d29a4288b96d42c7cabf424beb286bfbd24456.zip
Removed useless `do` block in `with`.
-rw-r--r--.gitignore3
-rw-r--r--src/yuescript/yue_compiler.cpp40
2 files changed, 23 insertions, 20 deletions
diff --git a/.gitignore b/.gitignore
index b67eda3..2fb7a59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ bin
11tup/*.lua 11tup/*.lua
12tup/t/*.lua 12tup/t/*.lua
13Yuescript.vcxproj.user 13Yuescript.vcxproj.user
14spec/generated \ No newline at end of file 14spec/generated
15.release_time \ No newline at end of file
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index c346891..b44b697 100644
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -75,7 +75,7 @@ static std::unordered_set<std::string> Metamethods = {
75 "close"s // Lua 5.4 75 "close"s // Lua 5.4
76}; 76};
77 77
78const std::string_view version = "0.25.2"sv; 78const std::string_view version = "0.25.3"sv;
79const std::string_view extension = "yue"sv; 79const std::string_view extension = "yue"sv;
80 80
81class CompileError : public std::logic_error { 81class CompileError : public std::logic_error {
@@ -9154,33 +9154,35 @@ private:
9154 transformIf(ifNode, temp, ExpUsage::Common); 9154 transformIf(ifNode, temp, ExpUsage::Common);
9155 } else { 9155 } else {
9156 bool transformed = false; 9156 bool transformed = false;
9157 if (auto block = with->body.as<Block_t>()) { 9157 if (assignList || returnValue) {
9158 if (!block->statements.empty()) { 9158 if (auto block = with->body.as<Block_t>()) {
9159 Statement_t* stmt = static_cast<Statement_t*>(block->statements.back()); 9159 if (!block->statements.empty()) {
9160 Statement_t* stmt = static_cast<Statement_t*>(block->statements.back());
9161 if (stmt->content.is<Return_t>()) {
9162 auto newBlock = with->body->new_ptr<Block_t>();
9163 newBlock->statements.dup(block->statements);
9164 newBlock->statements.pop_back();
9165 transform_plain_body(newBlock, temp, ExpUsage::Common);
9166 auto newBody = stmt->new_ptr<Body_t>();
9167 newBody->content.set(stmt);
9168 auto doNode = stmt->new_ptr<Do_t>();
9169 doNode->body.set(newBody);
9170 transformDo(doNode, temp, ExpUsage::Common);
9171 transformed = true;
9172 }
9173 }
9174 } else {
9175 auto stmt = with->body.to<Statement_t>();
9160 if (stmt->content.is<Return_t>()) { 9176 if (stmt->content.is<Return_t>()) {
9161 auto newBlock = with->body->new_ptr<Block_t>();
9162 newBlock->statements.dup(block->statements);
9163 newBlock->statements.pop_back();
9164 transform_plain_body(newBlock, temp, ExpUsage::Common);
9165 auto newBody = stmt->new_ptr<Body_t>(); 9177 auto newBody = stmt->new_ptr<Body_t>();
9166 newBody->content.set(stmt); 9178 newBody->content.set(stmt);
9167 auto doNode = stmt->new_ptr<Do_t>(); 9179 auto doNode = stmt->new_ptr<Do_t>();
9168 doNode->body.set(newBody); 9180 doNode->body.set(newBody);
9169 transformDo(doNode, temp, ExpUsage::Common); 9181 transformDo(doNode, temp, ExpUsage::Common);
9182 temp.back().insert(0, indent());
9170 transformed = true; 9183 transformed = true;
9171 } 9184 }
9172 } 9185 }
9173 } else {
9174 auto stmt = with->body.to<Statement_t>();
9175 if (stmt->content.is<Return_t>()) {
9176 auto newBody = stmt->new_ptr<Body_t>();
9177 newBody->content.set(stmt);
9178 auto doNode = stmt->new_ptr<Do_t>();
9179 doNode->body.set(newBody);
9180 transformDo(doNode, temp, ExpUsage::Common);
9181 temp.back().insert(0, indent());
9182 transformed = true;
9183 }
9184 } 9186 }
9185 if (!transformed) { 9187 if (!transformed) {
9186 transform_plain_body(with->body, temp, ExpUsage::Common); 9188 transform_plain_body(with->body, temp, ExpUsage::Common);