diff options
author | Li Jin <dragon-fly@qq.com> | 2022-04-07 09:43:16 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2022-04-07 09:43:16 +0800 |
commit | 105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b (patch) | |
tree | 5b4a73aee0cc42b1a091c6755be2c7fd565e5f41 | |
parent | d48b2856191f8c1efbe89f1a4000753575253b54 (diff) | |
download | yuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.tar.gz yuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.tar.bz2 yuescript-105f3b04b83ac7d8c546e5e0c2a815a626e8cf0b.zip |
fix class initializing procedure.
-rw-r--r-- | spec/outputs/class.lua | 2 | ||||
-rw-r--r-- | src/3rdParty/lua/Makefile | 2 | ||||
-rwxr-xr-x | 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 | |||
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); |