Skip to content

Commit e4c4e8e

Browse files
committed
update super for new chain ast
1 parent 2f71fbc commit e4c4e8e

File tree

2 files changed

+40
-34
lines changed

2 files changed

+40
-34
lines changed

moonscript/transform.lua

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,29 +1099,21 @@ Statement = Transformer({
10991099
end
11001100
return self:set("super", function(block, chain)
11011101
if chain then
1102-
local slice
1103-
do
1104-
local _accum_0 = { }
1105-
local _len_0 = 1
1106-
for _index_0 = 3, #chain do
1107-
local item = chain[_index_0]
1108-
_accum_0[_len_0] = item
1109-
_len_0 = _len_0 + 1
1110-
end
1111-
slice = _accum_0
1112-
end
1102+
local chain_tail = {
1103+
unpack(chain, 3)
1104+
}
11131105
local new_chain = {
11141106
"chain",
11151107
parent_cls_name
11161108
}
1117-
local head = slice[1]
1109+
local head = chain_tail[1]
11181110
if head == nil then
11191111
return parent_cls_name
11201112
end
11211113
local _exp_1 = head[1]
11221114
if "call" == _exp_1 then
11231115
local calling_name = block:get("current_block")
1124-
slice[1] = {
1116+
chain_tail[1] = {
11251117
"call",
11261118
{
11271119
"self",
@@ -1140,21 +1132,23 @@ Statement = Transformer({
11401132
})
11411133
end
11421134
elseif "colon" == _exp_1 then
1143-
local call = head[3]
1144-
insert(new_chain, {
1145-
"dot",
1146-
head[2]
1147-
})
1148-
slice[1] = {
1149-
"call",
1150-
{
1151-
"self",
1152-
unpack(call[2])
1135+
local call = chain_tail[2]
1136+
if call and call[1] == "call" then
1137+
chain_tail[1] = {
1138+
"dot",
1139+
head[2]
11531140
}
1154-
}
1141+
chain_tail[2] = {
1142+
"call",
1143+
{
1144+
"self",
1145+
unpack(call[2])
1146+
}
1147+
}
1148+
end
11551149
end
1156-
for _index_0 = 1, #slice do
1157-
local item = slice[_index_0]
1150+
for _index_0 = 1, #chain_tail do
1151+
local item = chain_tail[_index_0]
11581152
insert(new_chain, item)
11591153
end
11601154
return new_chain

moonscript/transform.moon

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -661,10 +661,10 @@ Statement = Transformer {
661661

662662
@set "super", (block, chain) ->
663663
if chain
664-
slice = [item for item in *chain[3,]]
664+
chain_tail = { unpack chain, 3 }
665665
new_chain = {"chain", parent_cls_name}
666666

667-
head = slice[1]
667+
head = chain_tail[1]
668668

669669
if head == nil
670670
return parent_cls_name
@@ -673,7 +673,7 @@ Statement = Transformer {
673673
-- calling super, inject calling name and self into chain
674674
when "call"
675675
calling_name = block\get"current_block"
676-
slice[1] = {"call", {"self", unpack head[2]}}
676+
chain_tail[1] = {"call", {"self", unpack head[2]}}
677677

678678
if ntype(calling_name) == "key_literal"
679679
insert new_chain, {"dot", calling_name[2]}
@@ -682,11 +682,23 @@ Statement = Transformer {
682682

683683
-- colon call on super, replace class with self as first arg
684684
when "colon"
685-
call = head[3]
686-
insert new_chain, {"dot", head[2]}
687-
slice[1] = { "call", { "self", unpack call[2] } }
688-
689-
insert new_chain, item for item in *slice
685+
call = chain_tail[2]
686+
-- calling chain tail
687+
if call and call[1] == "call"
688+
chain_tail[1] = {
689+
"dot"
690+
head[2]
691+
}
692+
693+
chain_tail[2] = {
694+
"call"
695+
{
696+
"self"
697+
unpack call[2]
698+
}
699+
}
700+
701+
insert new_chain, item for item in *chain_tail
690702

691703
new_chain
692704
else

0 commit comments

Comments
 (0)