aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2022-04-07 09:43:16 +0800
committerLi Jin <dragon-fly@qq.com>2022-04-07 09:43:16 +0800
commit105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b (patch)
tree5b4a73aee0cc42b1a091c6755be2c7fd565e5f41
parentd48b2856191f8c1efbe89f1a4000753575253b54 (diff)
downloadyuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.tar.gz
yuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.tar.bz2
yuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.zip
fix class initializing procedure.
-rw-r--r--spec/outputs/class.lua2
-rw-r--r--src/3rdParty/lua/Makefile2
-rwxr-xr-xsrc/yuescript/yue_compiler.cpp22
3 files changed, 13 insertions, 13 deletions
diff --git a/spec/outputs/class.lua b/spec/outputs/class.lua
index f0482f9..696e74c 100644
--- a/spec/outputs/class.lua
+++ b/spec/outputs/class.lua
@@ -1114,7 +1114,7 @@ do
1114 } 1114 }
1115 for _index_0 = 1, #_list_0 do 1115 for _index_0 = 1, #_list_0 do
1116 local _mixin_0 = _list_0[_index_0] 1116 local _mixin_0 = _list_0[_index_0]
1117 for _key_0, _val_0 in pairs(_mixin_0.__class and _mixin_0.__base or _mixin_0) do 1117 for _key_0, _val_0 in pairs(_mixin_0.__base or _mixin_0) do
1118 if _base_0[_key_0] == nil then 1118 if _base_0[_key_0] == nil then
1119 _base_0[_key_0] = _val_0 1119 _base_0[_key_0] = _val_0
1120 end 1120 end
diff --git a/src/3rdParty/lua/Makefile b/src/3rdParty/lua/Makefile
index f78c0b8..1907381 100644
--- a/src/3rdParty/lua/Makefile
+++ b/src/3rdParty/lua/Makefile
@@ -79,7 +79,7 @@ echo:
79 @echo "PLAT= $(PLAT)" 79 @echo "PLAT= $(PLAT)"
80 @echo "CC= $(CC)" 80 @echo "CC= $(CC)"
81 @echo "CFLAGS= $(CFLAGS)" 81 @echo "CFLAGS= $(CFLAGS)"
82 @echo "LDFLAGS= $(SYSLDFLAGS)" 82 @echo "LDFLAGS= $(LDFLAGS)"
83 @echo "LIBS= $(LIBS)" 83 @echo "LIBS= $(LIBS)"
84 @echo "AR= $(AR)" 84 @echo "AR= $(AR)"
85 @echo "RANLIB= $(RANLIB)" 85 @echo "RANLIB= $(RANLIB)"
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index 3c2f809..5afeaba 100755
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -5399,6 +5399,17 @@ private:
5399 _buf << indent(1) << "end"sv << nll(classDecl); 5399 _buf << indent(1) << "end"sv << nll(classDecl);
5400 _buf << indent() << "})"sv << nll(classDecl); 5400 _buf << indent() << "})"sv << nll(classDecl);
5401 _buf << indent() << baseVar << ".__class = "sv << classVar << nll(classDecl); 5401 _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 }
5402 if (!statements.empty()) { 5413 if (!statements.empty()) {
5403 _buf << indent() << "local self = "sv << classVar << ';' << nll(classDecl); 5414 _buf << indent() << "local self = "sv << classVar << ';' << nll(classDecl);
5404 } 5415 }
@@ -5411,17 +5422,6 @@ private:
5411 if (!assignItem.empty()) { 5422 if (!assignItem.empty()) {
5412 _buf << indent() << assignItem << " = "sv << classVar << nll(classDecl); 5423 _buf << indent() << assignItem << " = "sv << classVar << nll(classDecl);
5413 } 5424 }
5414 temp.push_back(clearBuf());
5415 if (classDecl->mixes) {
5416 auto mixin = getUnusedName("_mixin_"sv);
5417 auto key = getUnusedName("_key_"sv);
5418 auto val = getUnusedName("_val_"sv);
5419 auto mixins = _parser.toString(classDecl->mixes);
5420 _buf << "for "sv << mixin << " in *{"sv << mixins << "}\n"sv;
5421 _buf << "\tfor "sv << key << ',' << val << " in pairs "sv << mixin << ".__class and "sv << mixin << ".__base or "sv << mixin << '\n';
5422 _buf << "\t\t"sv << baseVar << '[' << key << "]="sv << val << " if "sv << baseVar << '[' << key << "]==nil"sv;
5423 transformBlock(toAst<Block_t>(clearBuf(), x), temp, ExpUsage::Common);
5424 }
5425 switch (usage) { 5425 switch (usage) {
5426 case ExpUsage::Return: { 5426 case ExpUsage::Return: {
5427 _buf << indent() << "return "sv << classVar << nlr(classDecl); 5427 _buf << indent() << "return "sv << classVar << nlr(classDecl);