aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2024-03-25 08:25:06 +0800
committerLi Jin <dragon-fly@qq.com>2024-03-25 08:25:06 +0800
commit21004f1fb9b2f6129a231a6c8d99179f0d6e3edf (patch)
treed94c69b9758e0e8ff38dc5f23bc888d084846110 /src
parent4e3656da3711fd045fdf90dec7084bd4556c5b7f (diff)
downloadyuescript-21004f1fb9b2f6129a231a6c8d99179f0d6e3edf.tar.gz
yuescript-21004f1fb9b2f6129a231a6c8d99179f0d6e3edf.tar.bz2
yuescript-21004f1fb9b2f6129a231a6c8d99179f0d6e3edf.zip
remove one more redundant 'do' block from destructuring.
Diffstat (limited to 'src')
-rw-r--r--src/yuescript/yue_compiler.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index 14cb3e6..9208d5d 100644
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -2170,7 +2170,7 @@ private:
2170 if (!destruct.inlineAssignment && destruct.items.size() == 1) { 2170 if (!destruct.inlineAssignment && destruct.items.size() == 1) {
2171 auto& pair = destruct.items.front(); 2171 auto& pair = destruct.items.front();
2172 if (pair.targetVar.empty() && pair.defVal) { 2172 if (pair.targetVar.empty() && pair.defVal) {
2173 extraScope = true; 2173 if (needScope) extraScope = true;
2174 auto objVar = getUnusedName("_tmp_"sv); 2174 auto objVar = getUnusedName("_tmp_"sv);
2175 auto objExp = toAst<Exp_t>(objVar, pair.target); 2175 auto objExp = toAst<Exp_t>(objVar, pair.target);
2176 leftPairs.push_back({pair.target, objExp.get()}); 2176 leftPairs.push_back({pair.target, objExp.get()});
@@ -2221,8 +2221,10 @@ private:
2221 if (isLocalValue) { 2221 if (isLocalValue) {
2222 objVar = destruct.valueVar; 2222 objVar = destruct.valueVar;
2223 } else { 2223 } else {
2224 temp.push_back(indent() + "do"s + nll(x)); 2224 if (needScope) {
2225 pushScope(); 2225 temp.push_back(indent() + "do"s + nll(x));
2226 pushScope();
2227 }
2226 objVar = getUnusedName("_obj_"sv); 2228 objVar = getUnusedName("_obj_"sv);
2227 auto newAssignment = assignmentFrom(toAst<Exp_t>(objVar, x), destruct.value, x); 2229 auto newAssignment = assignmentFrom(toAst<Exp_t>(objVar, x), destruct.value, x);
2228 transformAssignment(newAssignment, temp); 2230 transformAssignment(newAssignment, temp);
@@ -2234,9 +2236,11 @@ private:
2234 auto newAssignment = assignmentFrom(pair.target, valueExp, x); 2236 auto newAssignment = assignmentFrom(pair.target, valueExp, x);
2235 transformAssignment(newAssignment, temp, optionalDestruct); 2237 transformAssignment(newAssignment, temp, optionalDestruct);
2236 if (!isLocalValue) { 2238 if (!isLocalValue) {
2237 popScope(); 2239 if (needScope) {
2238 _buf << indent() << "end"sv << nlr(x); 2240 popScope();
2239 temp.push_back(clearBuf()); 2241 _buf << indent() << "end"sv << nlr(x);
2242 temp.push_back(clearBuf());
2243 }
2240 } 2244 }
2241 } else { 2245 } else {
2242 str_list defs; 2246 str_list defs;
@@ -2249,7 +2253,7 @@ private:
2249 defs.push_back(item.targetVar); 2253 defs.push_back(item.targetVar);
2250 } 2254 }
2251 } else if (item.defVal) { 2255 } else if (item.defVal) {
2252 extraScope = true; 2256 if (needScope) extraScope = true;
2253 auto objVar = getUnusedName("_tmp_"sv); 2257 auto objVar = getUnusedName("_tmp_"sv);
2254 addToScope(objVar); 2258 addToScope(objVar);
2255 auto objExp = toAst<Exp_t>(objVar, item.target); 2259 auto objExp = toAst<Exp_t>(objVar, item.target);
@@ -2285,9 +2289,11 @@ private:
2285 } 2289 }
2286 temp.push_back(indent() + "local "s + join(defs, ", "sv) + nll(x)); 2290 temp.push_back(indent() + "local "s + join(defs, ", "sv) + nll(x));
2287 } 2291 }
2288 extraScope = true; 2292 if (needScope) {
2289 temp.push_back(indent() + "do"s + nll(x)); 2293 extraScope = true;
2290 pushScope(); 2294 temp.push_back(indent() + "do"s + nll(x));
2295 pushScope();
2296 }
2291 auto valVar = getUnusedName("_obj_"sv); 2297 auto valVar = getUnusedName("_obj_"sv);
2292 auto targetVar = toAst<Exp_t>(valVar, destruct.value); 2298 auto targetVar = toAst<Exp_t>(valVar, destruct.value);
2293 auto newAssignment = assignmentFrom(targetVar, destruct.value, destruct.value); 2299 auto newAssignment = assignmentFrom(targetVar, destruct.value, destruct.value);
@@ -2298,7 +2304,7 @@ private:
2298 } 2304 }
2299 } 2305 }
2300 if (destruct.inlineAssignment) { 2306 if (destruct.inlineAssignment) {
2301 if (!extraScope) { 2307 if (needScope && !extraScope) {
2302 extraScope = true; 2308 extraScope = true;
2303 temp.push_back(indent() + "do"s + nll(x)); 2309 temp.push_back(indent() + "do"s + nll(x));
2304 pushScope(); 2310 pushScope();