aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nomsu_decompiler.lua17
-rw-r--r--nomsu_decompiler.moon14
2 files changed, 25 insertions, 6 deletions
diff --git a/nomsu_decompiler.lua b/nomsu_decompiler.lua
index 02f2426..472be27 100644
--- a/nomsu_decompiler.lua
+++ b/nomsu_decompiler.lua
@@ -49,9 +49,10 @@ tree_to_inline_nomsu = function(tree)
local _exp_0 = tree.type
if "Action" == _exp_0 then
local nomsu = NomsuCode:from(tree.source)
- local num_args = 0
+ local num_args, num_words = 0, 0
for i, bit in ipairs(tree) do
if type(bit) == "string" then
+ num_words = num_words + 1
local clump_words
if type(tree[i - 1]) == 'string' then
clump_words = is_operator(bit) ~= is_operator(tree[i - 1])
@@ -83,6 +84,9 @@ tree_to_inline_nomsu = function(tree)
nomsu:add(arg_nomsu)
end
end
+ if num_args == 1 and num_words == 0 then
+ nomsu:append("()")
+ end
return nomsu
elseif "MethodCall" == _exp_0 then
local target_nomsu = tree_to_inline_nomsu(tree[1])
@@ -355,11 +359,12 @@ tree_to_nomsu = function(tree)
elseif "Action" == _exp_0 then
local next_space = ""
local word_buffer = { }
- local num_args = 0
+ local num_args, num_words = 0, 0
for i, bit in ipairs(tree) do
local _continue_0 = false
repeat
if type(bit) == "string" then
+ num_words = num_words + 1
if #word_buffer > 0 and is_operator(bit) == is_operator(word_buffer[#word_buffer]) then
table.insert(word_buffer, " ")
end
@@ -425,6 +430,12 @@ tree_to_nomsu = function(tree)
nomsu:add(next_space, words)
next_space = " "
end
+ if num_args == 1 and num_words == 0 then
+ if next_space ~= " " then
+ nomsu:append(next_space)
+ end
+ nomsu:append("()")
+ end
return nomsu
elseif "MethodCall" == _exp_0 then
local target_nomsu = recurse(tree[1])
@@ -575,7 +586,7 @@ tree_to_nomsu = function(tree)
end
else
item_nomsu = tree_to_inline_nomsu(item)
- if #item_nomsu:text() > MAX_LINE then
+ if nomsu:trailing_line_len() + #item_nomsu:text() > MAX_LINE then
if i > 1 then
sep = '\n'
end
diff --git a/nomsu_decompiler.moon b/nomsu_decompiler.moon
index bc5c986..03e9956 100644
--- a/nomsu_decompiler.moon
+++ b/nomsu_decompiler.moon
@@ -33,9 +33,10 @@ tree_to_inline_nomsu = (tree)->
switch tree.type
when "Action"
nomsu = NomsuCode\from(tree.source)
- num_args = 0
+ num_args, num_words = 0, 0
for i,bit in ipairs tree
if type(bit) == "string"
+ num_words += 1
clump_words = if type(tree[i-1]) == 'string'
is_operator(bit) != is_operator(tree[i-1])
else bit == "'"
@@ -54,6 +55,8 @@ tree_to_inline_nomsu = (tree)->
if bit.type == "Action" or bit.type == "MethodCall"
arg_nomsu\parenthesize!
nomsu\add arg_nomsu
+ if num_args == 1 and num_words == 0
+ nomsu\append "()"
return nomsu
when "MethodCall"
@@ -253,10 +256,11 @@ tree_to_nomsu = (tree)->
when "Action"
next_space = ""
word_buffer = {}
- num_args = 0
+ num_args, num_words = 0, 0
for i,bit in ipairs tree
-- TODO: properly wrap super long chains of words
if type(bit) == "string"
+ num_words += 1
if #word_buffer > 0 and is_operator(bit) == is_operator(word_buffer[#word_buffer])
table.insert word_buffer, " "
table.insert word_buffer, bit
@@ -314,6 +318,10 @@ tree_to_nomsu = (tree)->
nomsu\add next_space, words
next_space = " "
+ if num_args == 1 and num_words == 0
+ if next_space != " "
+ nomsu\append next_space
+ nomsu\append "()"
return nomsu
when "MethodCall"
@@ -439,7 +447,7 @@ tree_to_nomsu = (tree)->
sep = '\n' if i > 1
else
item_nomsu = tree_to_inline_nomsu(item)
- if #item_nomsu\text! > MAX_LINE
+ if nomsu\trailing_line_len! + #item_nomsu\text! > MAX_LINE
sep = '\n' if i > 1
item_nomsu = tree_to_nomsu(item)
nomsu\add sep