aboutsummaryrefslogtreecommitdiff
path: root/nomsu_decompiler.moon
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2018-12-14 19:23:26 -0800
committerBruce Hill <bruce@bruce-hill.com>2018-12-14 19:25:03 -0800
commit83a40b7493b19e4b55167784e073e92733344b87 (patch)
tree758bc8986c6985fad9aabfab5a713318ef180410 /nomsu_decompiler.moon
parenta7adc8cbff9347606fc9c0e8d00d4af2b6b838f5 (diff)
Updating to support multiple method calls.
Diffstat (limited to 'nomsu_decompiler.moon')
-rw-r--r--nomsu_decompiler.moon18
1 files changed, 14 insertions, 4 deletions
diff --git a/nomsu_decompiler.moon b/nomsu_decompiler.moon
index cb031e0..f522832 100644
--- a/nomsu_decompiler.moon
+++ b/nomsu_decompiler.moon
@@ -57,7 +57,11 @@ tree_to_inline_nomsu = (tree)->
return nomsu
when "MethodCall"
- return NomsuCode\from(tree.source, tree_to_inline_nomsu(tree[1]), "|", tree_to_inline_nomsu(tree[2]))
+ nomsu = NomsuCode\from(tree.source, tree_to_inline_nomsu(tree[1]), "|")
+ for i=2,#tree
+ nomsu\add "; " if i > 2
+ nomsu\add tree_to_inline_nomsu(tree[i])
+ return nomsu
when "EscapedNomsu"
inner_nomsu = tree_to_inline_nomsu(tree[1])
@@ -139,8 +143,7 @@ tree_to_inline_nomsu = (tree)->
return NomsuCode\from(tree.source, s)
when "Var"
- -- TODO: remove this hack:
- varname = tree[1]\gsub("_", " ")
+ varname = tree[1]
if varname == "" or is_identifier(varname)
return NomsuCode\from(tree.source, "$", varname)
else
@@ -265,7 +268,14 @@ tree_to_nomsu = (tree)->
target_nomsu\parenthesize!
nomsu\add target_nomsu
nomsu\add(target_nomsu\is_multiline! and "\n..|" or "|")
- nomsu\add tree_to_nomsu(tree[2])
+ inner_nomsu = NomsuCode!
+ for i=2,#tree
+ inner_nomsu\add "\n" if i > 2
+ inner_nomsu\add tree_to_nomsu(tree[i])
+ if #tree == 2 and nomsu\trailing_line_len! + #inner_nomsu\text!\match("^[^\n]*") < MAX_LINE
+ nomsu\add inner_nomsu
+ else
+ nomsu\add "\n ", inner_nomsu
return nomsu
when "EscapedNomsu"