From 105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 7 Apr 2022 09:43:16 +0800 Subject: fix class initializing procedure. --- spec/outputs/class.lua | 2 +- src/3rdParty/lua/Makefile | 2 +- src/yuescript/yue_compiler.cpp | 22 +++++++++++----------- 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 } for _index_0 = 1, #_list_0 do local _mixin_0 = _list_0[_index_0] - for _key_0, _val_0 in pairs(_mixin_0.__class and _mixin_0.__base or _mixin_0) do + for _key_0, _val_0 in pairs(_mixin_0.__base or _mixin_0) do if _base_0[_key_0] == nil then _base_0[_key_0] = _val_0 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: @echo "PLAT= $(PLAT)" @echo "CC= $(CC)" @echo "CFLAGS= $(CFLAGS)" - @echo "LDFLAGS= $(SYSLDFLAGS)" + @echo "LDFLAGS= $(LDFLAGS)" @echo "LIBS= $(LIBS)" @echo "AR= $(AR)" @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: _buf << indent(1) << "end"sv << nll(classDecl); _buf << indent() << "})"sv << nll(classDecl); _buf << indent() << baseVar << ".__class = "sv << classVar << nll(classDecl); + temp.push_back(clearBuf()); + if (classDecl->mixes) { + auto mixin = getUnusedName("_mixin_"sv); + auto key = getUnusedName("_key_"sv); + auto val = getUnusedName("_val_"sv); + auto mixins = _parser.toString(classDecl->mixes); + _buf << "for "sv << mixin << " in *{"sv << mixins << "}\n"sv; + _buf << "\tfor "sv << key << ',' << val << " in pairs "sv << mixin << ".__base or "sv << mixin << '\n'; + _buf << "\t\t"sv << baseVar << '[' << key << "]="sv << val << " if "sv << baseVar << '[' << key << "]==nil"sv; + transformBlock(toAst(clearBuf(), x), temp, ExpUsage::Common); + } if (!statements.empty()) { _buf << indent() << "local self = "sv << classVar << ';' << nll(classDecl); } @@ -5411,17 +5422,6 @@ private: if (!assignItem.empty()) { _buf << indent() << assignItem << " = "sv << classVar << nll(classDecl); } - temp.push_back(clearBuf()); - if (classDecl->mixes) { - auto mixin = getUnusedName("_mixin_"sv); - auto key = getUnusedName("_key_"sv); - auto val = getUnusedName("_val_"sv); - auto mixins = _parser.toString(classDecl->mixes); - _buf << "for "sv << mixin << " in *{"sv << mixins << "}\n"sv; - _buf << "\tfor "sv << key << ',' << val << " in pairs "sv << mixin << ".__class and "sv << mixin << ".__base or "sv << mixin << '\n'; - _buf << "\t\t"sv << baseVar << '[' << key << "]="sv << val << " if "sv << baseVar << '[' << key << "]==nil"sv; - transformBlock(toAst(clearBuf(), x), temp, ExpUsage::Common); - } switch (usage) { case ExpUsage::Return: { _buf << indent() << "return "sv << classVar << nlr(classDecl); -- cgit v1.2.3-55-g6feb