summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2022-04-07 09:57:17 +0800
committerLi Jin <dragon-fly@qq.com>2022-04-07 09:57:17 +0800
commit599a89c2194110592bff2d91ecf9304be3e8ba4d (patch)
tree9d20316739643d32ceea7cfd125d49391fc3666c /src
parent105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b (diff)
downloadyuescript-0.10.10.tar.gz
yuescript-0.10.10.tar.bz2
yuescript-0.10.10.zip
fix class initializing procedure again.v0.10.10
Diffstat (limited to 'src')
-rwxr-xr-xsrc/yuescript/yue_compiler.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index 5afeaba..936809f 100755
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -5337,6 +5337,16 @@ private:
5337 } else { 5337 } else {
5338 temp.back() += "{ }"s + nll(classDecl); 5338 temp.back() += "{ }"s + nll(classDecl);
5339 } 5339 }
5340 if (classDecl->mixes) {
5341 auto mixin = getUnusedName("_mixin_"sv);
5342 auto key = getUnusedName("_key_"sv);
5343 auto val = getUnusedName("_val_"sv);
5344 auto mixins = _parser.toString(classDecl->mixes);
5345 _buf << "for "sv << mixin << " in *{"sv << mixins << "}\n"sv;
5346 _buf << "\tfor "sv << key << ',' << val << " in pairs "sv << mixin << ".__base or "sv << mixin << '\n';
5347 _buf << "\t\t"sv << baseVar << '[' << key << "]="sv << val << " if "sv << baseVar << '[' << key << "]==nil"sv;
5348 transformBlock(toAst<Block_t>(clearBuf(), x), temp, ExpUsage::Common);
5349 }
5340 transformAssignment(toAst<ExpListAssign_t>(baseVar + ".__index ?\?= "s + baseVar, classDecl), temp); 5350 transformAssignment(toAst<ExpListAssign_t>(baseVar + ".__index ?\?= "s + baseVar, classDecl), temp);
5341 str_list tmp; 5351 str_list tmp;
5342 if (usage == ExpUsage::Assignment) { 5352 if (usage == ExpUsage::Assignment) {
@@ -5399,17 +5409,6 @@ private:
5399 _buf << indent(1) << "end"sv << nll(classDecl); 5409 _buf << indent(1) << "end"sv << nll(classDecl);
5400 _buf << indent() << "})"sv << nll(classDecl); 5410 _buf << indent() << "})"sv << nll(classDecl);
5401 _buf << indent() << baseVar << ".__class = "sv << classVar << nll(classDecl); 5411 _buf << indent() << baseVar << ".__class = "sv << classVar << nll(classDecl);
5402 temp.push_back(clearBuf());
5403 if (classDecl->mixes) {
5404 auto mixin = getUnusedName("_mixin_"sv);
5405 auto key = getUnusedName("_key_"sv);
5406 auto val = getUnusedName("_val_"sv);
5407 auto mixins = _parser.toString(classDecl->mixes);
5408 _buf << "for "sv << mixin << " in *{"sv << mixins << "}\n"sv;
5409 _buf << "\tfor "sv << key << ',' << val << " in pairs "sv << mixin << ".__base or "sv << mixin << '\n';
5410 _buf << "\t\t"sv << baseVar << '[' << key << "]="sv << val << " if "sv << baseVar << '[' << key << "]==nil"sv;
5411 transformBlock(toAst<Block_t>(clearBuf(), x), temp, ExpUsage::Common);
5412 }
5413 if (!statements.empty()) { 5412 if (!statements.empty()) {
5414 _buf << indent() << "local self = "sv << classVar << ';' << nll(classDecl); 5413 _buf << indent() << "local self = "sv << classVar << ';' << nll(classDecl);
5415 } 5414 }