From 9af15048c75e845d9f6f647a3ebe2f538fac995c Mon Sep 17 00:00:00 2001 From: Li Jin Date: Wed, 6 Apr 2022 18:03:49 +0800 Subject: allow doing mixin with a class and a table. --- spec/inputs/class.yue | 2 +- spec/outputs/class.lua | 7 +++++-- src/yuescript/yue_compiler.cpp | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/spec/inputs/class.yue b/spec/inputs/class.yue index 82dbef6..c7be481 100644 --- a/spec/inputs/class.yue +++ b/spec/inputs/class.yue @@ -229,7 +229,7 @@ do class extends lapis.Application "/": => json: { status: true } -class A using B, C, D +class A using B, C, D, {value: 123} class Example @field1 = 1 diff --git a/spec/outputs/class.lua b/spec/outputs/class.lua index bb14ad8..f0482f9 100644 --- a/spec/outputs/class.lua +++ b/spec/outputs/class.lua @@ -1107,11 +1107,14 @@ do local _list_0 = { B, C, - D + D, + { + value = 123 + } } for _index_0 = 1, #_list_0 do local _mixin_0 = _list_0[_index_0] - for _key_0, _val_0 in pairs(_mixin_0.__base) do + for _key_0, _val_0 in pairs(_mixin_0.__class and _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/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 3e9c048..3c2f809 100755 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp @@ -5418,7 +5418,7 @@ private: 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\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); } -- cgit v1.2.3-55-g6feb