diff options
author | Li Jin <dragon-fly@qq.com> | 2021-12-17 16:38:41 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2021-12-17 16:38:41 +0800 |
commit | 2138d176edfe1f8ba3ecee211f15825e97f0570a (patch) | |
tree | 9769ce3fe4234a17309fd26e8527da6f26a0197e | |
parent | 59852b14368bd3609b1c6e3e469cd4af111e4562 (diff) | |
download | yuescript-2138d176edfe1f8ba3ecee211f15825e97f0570a.tar.gz yuescript-2138d176edfe1f8ba3ecee211f15825e97f0570a.tar.bz2 yuescript-2138d176edfe1f8ba3ecee211f15825e97f0570a.zip |
fix an new issue found by the example from issue #72
-rw-r--r-- | spec/inputs/class.yue | 4 | ||||
-rw-r--r-- | spec/outputs/class.lua | 22 | ||||
-rwxr-xr-x | src/yuescript/yue_compiler.cpp | 3 |
3 files changed, 28 insertions, 1 deletions
diff --git a/spec/inputs/class.yue b/spec/inputs/class.yue index ea971e1..82dbef6 100644 --- a/spec/inputs/class.yue +++ b/spec/inputs/class.yue | |||
@@ -231,4 +231,8 @@ class extends lapis.Application | |||
231 | 231 | ||
232 | class A using B, C, D | 232 | class A using B, C, D |
233 | 233 | ||
234 | class Example | ||
235 | @field1 = 1 | ||
236 | @field2 = @field1 + 1 | ||
237 | |||
234 | nil | 238 | nil |
diff --git a/spec/outputs/class.lua b/spec/outputs/class.lua index 20b18ea..85845d3 100644 --- a/spec/outputs/class.lua +++ b/spec/outputs/class.lua | |||
@@ -1054,4 +1054,26 @@ do | |||
1054 | _base_0.__class = _class_0 | 1054 | _base_0.__class = _class_0 |
1055 | A = _class_0 | 1055 | A = _class_0 |
1056 | end | 1056 | end |
1057 | do | ||
1058 | local _class_0 | ||
1059 | local _base_0 = { } | ||
1060 | _base_0.__index = _base_0 | ||
1061 | _class_0 = setmetatable({ | ||
1062 | __init = function() end, | ||
1063 | __base = _base_0, | ||
1064 | __name = "Example" | ||
1065 | }, { | ||
1066 | __index = _base_0, | ||
1067 | __call = function(cls, ...) | ||
1068 | local _self_0 = setmetatable({ }, _base_0) | ||
1069 | cls.__init(_self_0, ...) | ||
1070 | return _self_0 | ||
1071 | end | ||
1072 | }) | ||
1073 | _base_0.__class = _class_0 | ||
1074 | local self = _class_0; | ||
1075 | self.field1 = 1 | ||
1076 | self.field2 = self.field1 + 1 | ||
1077 | Example = _class_0 | ||
1078 | end | ||
1057 | return nil | 1079 | return nil |
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index e93324e..15a785a 100755 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp | |||
@@ -60,7 +60,7 @@ using namespace parserlib; | |||
60 | 60 | ||
61 | typedef std::list<std::string> str_list; | 61 | typedef std::list<std::string> str_list; |
62 | 62 | ||
63 | const std::string_view version = "0.9.3"sv; | 63 | const std::string_view version = "0.9.4"sv; |
64 | const std::string_view extension = "yue"sv; | 64 | const std::string_view extension = "yue"sv; |
65 | 65 | ||
66 | class YueCompilerImpl { | 66 | class YueCompilerImpl { |
@@ -5141,6 +5141,7 @@ private: | |||
5141 | auto exp = ast_cast<Exp_t>(assign->values.objects().front()); | 5141 | auto exp = ast_cast<Exp_t>(assign->values.objects().front()); |
5142 | BREAK_IF(!exp); | 5142 | BREAK_IF(!exp); |
5143 | auto value = singleValueFrom(exp); | 5143 | auto value = singleValueFrom(exp); |
5144 | BREAK_IF(!value); | ||
5144 | clsDecl = value->getByPath<SimpleValue_t, ClassDecl_t>(); | 5145 | clsDecl = value->getByPath<SimpleValue_t, ClassDecl_t>(); |
5145 | BLOCK_END | 5146 | BLOCK_END |
5146 | } else if (auto expList = expListFrom(statement)) { | 5147 | } else if (auto expList = expListFrom(statement)) { |