Skip to content

Commit f98f822

Browse files
committed
extract class name from assign statement if anonymous class is being assigned
1 parent 97394fb commit f98f822

File tree

3 files changed

+34
-29
lines changed

3 files changed

+34
-29
lines changed

moonscript/transform.lua

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -463,24 +463,26 @@ Statement = Transformer({
463463
t = ntype(value)
464464
end
465465
if types.cascading[t] then
466+
local ret
467+
ret = function(stm)
468+
if types.is_value(stm) then
469+
return {
470+
"assign",
471+
names,
472+
{
473+
stm
474+
}
475+
}
476+
else
477+
return stm
478+
end
479+
end
466480
transformed = build.group({
467481
{
468482
"declare",
469483
names
470484
},
471-
self.transform.statement(value, function(stm)
472-
if types.is_value(stm) then
473-
return {
474-
"assign",
475-
names,
476-
{
477-
stm
478-
}
479-
}
480-
else
481-
return stm
482-
end
483-
end)
485+
self.transform.statement(value, ret, node)
484486
})
485487
end
486488
end
@@ -897,7 +899,7 @@ Statement = Transformer({
897899
if_stm
898900
})
899901
end,
900-
class = function(self, node, ret)
902+
class = function(self, node, ret, parent_assign)
901903
local _, name, parent_val, body = unpack(node)
902904
local statements = { }
903905
local properties = { }
@@ -974,10 +976,10 @@ Statement = Transformer({
974976
smart_node(constructor)
975977
constructor.arrow = "fat"
976978
end
977-
local real_name
978-
local _exp_0 = ntype(name)
979+
local real_name = name or parent_assign and parent_assign[2][1]
980+
local _exp_0 = ntype(real_name)
979981
if "chain" == _exp_0 then
980-
local last = name[#name]
982+
local last = real_name[#real_name]
981983
local _exp_1 = ntype(last)
982984
if "dot" == _exp_1 then
983985
real_name = {
@@ -996,7 +998,7 @@ Statement = Transformer({
996998
real_name = {
997999
"string",
9981000
'"',
999-
name
1001+
real_name
10001002
}
10011003
end
10021004
local cls = build.table({

moonscript/transform.moon

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,15 @@ Statement = Transformer {
209209
t = ntype value
210210

211211
if types.cascading[t]
212+
ret = (stm) ->
213+
if types.is_value stm
214+
{"assign", names, {stm}}
215+
else
216+
stm
217+
212218
build.group {
213219
{"declare", names}
214-
@transform.statement value, (stm) ->
215-
if types.is_value stm
216-
{"assign", names, {stm}}
217-
else
218-
stm
220+
@transform.statement value, ret, node
219221
}
220222

221223
transformed or node
@@ -456,7 +458,7 @@ Statement = Transformer {
456458
if_stm
457459
}
458460

459-
class: (node, ret) =>
461+
class: (node, ret, parent_assign) =>
460462
_, name, parent_val, body = unpack node
461463

462464
-- split apart properties and statements
@@ -505,9 +507,10 @@ Statement = Transformer {
505507
smart_node constructor
506508
constructor.arrow = "fat"
507509

508-
real_name = switch ntype(name)
510+
real_name = name or parent_assign and parent_assign[2][1]
511+
real_name = switch ntype real_name
509512
when "chain"
510-
last = name[#name]
513+
last = real_name[#real_name]
511514
switch ntype last
512515
when "dot"
513516
{"string", '"', last[2]}
@@ -518,7 +521,7 @@ Statement = Transformer {
518521
when "nil"
519522
"nil"
520523
else
521-
{"string", '"', name}
524+
{"string", '"', real_name}
522525

523526
cls = build.table {
524527
{"__init", constructor}

tests/outputs/class.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ do
768768
end
769769
end,
770770
__base = _base_0,
771-
__name = nil,
771+
__name = "a",
772772
__parent = _parent_0
773773
}, {
774774
__index = function(cls, name)
@@ -885,7 +885,7 @@ do
885885
end
886886
end,
887887
__base = _base_0,
888-
__name = nil,
888+
__name = "d",
889889
__parent = _parent_0
890890
}, {
891891
__index = function(cls, name)

0 commit comments

Comments
 (0)