From f38c4f94c9ba0499d923e59483d6381b97cce926 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 19 Dec 2024 11:26:23 +0800 Subject: Fixed MoonScript issue # 459. Supported local/const/close hoist in class body. --- spec/inputs/class.yue | 15 +++++++++++++ spec/outputs/class.lua | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) (limited to 'spec') diff --git a/spec/inputs/class.yue b/spec/inputs/class.yue index 49537c2..3c73ebc 100644 --- a/spec/inputs/class.yue +++ b/spec/inputs/class.yue @@ -242,4 +242,19 @@ class Foo :add : +do + global xa, xb + class CX + xa = 1 + xb = 1 + new: => + +do + class CY + xa = 1 + local xb = 2 + new: => print xa, xb, xc, xd + const xc = 3 + close xd = : => + nil diff --git a/spec/outputs/class.lua b/spec/outputs/class.lua index 442ff4b..aaea33c 100644 --- a/spec/outputs/class.lua +++ b/spec/outputs/class.lua @@ -1229,4 +1229,64 @@ do _base_0.__class = _class_0 Foo = _class_0 end +do + local CX + do + local _class_0 + local _base_0 = { } + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + _class_0 = setmetatable({ + __init = function(self) end, + __base = _base_0, + __name = "CX" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + local self = _class_0; + xa = 1 + xb = 1 + CX = _class_0 + end +end +do + local CY + local _class_0 + local xa, xb, xc, xd + local _base_0 = { } + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + _class_0 = setmetatable({ + __init = function(self) + return print(xa, xb, xc, xd) + end, + __base = _base_0, + __name = "CY" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + local self = _class_0; + xa = 1 + xb = 2 + xc = 3 + xd = setmetatable({ }, { + __close = function(self) end + }) + local _close_0 = xd + CY = _class_0 +end return nil -- cgit v1.2.3-55-g6feb