diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2018-11-09 16:40:36 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2018-11-09 16:41:19 -0800 |
| commit | 69aaea030e08e083151aa25b8080eddd0d4c1683 (patch) | |
| tree | 6cd90a65e6828f60cc052c4a1b33a4a4c0d65570 /nomsu_decompiler.moon | |
| parent | a2f07415c5284bf94c146cea6eed4a15f171b9ab (diff) | |
No longer passing `tree` to every compile action. Now, you can just
return a LuaCode object, and it will automatically get a source from
`tree` if it didn't already have a source. Plus some fixes/cleanup.
Diffstat (limited to 'nomsu_decompiler.moon')
| -rw-r--r-- | nomsu_decompiler.moon | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/nomsu_decompiler.moon b/nomsu_decompiler.moon index df1c4d6..828df06 100644 --- a/nomsu_decompiler.moon +++ b/nomsu_decompiler.moon @@ -31,7 +31,7 @@ escape = (s)-> tree_to_inline_nomsu = (tree)-> switch tree.type when "Action" - nomsu = NomsuCode(tree.source) + nomsu = NomsuCode\from(tree.source) if tree.target inline_target = tree_to_inline_nomsu(tree.target) if tree.target.type == "Action" @@ -61,10 +61,10 @@ tree_to_inline_nomsu = (tree)-> inner_nomsu = tree_to_inline_nomsu(tree[1]) unless tree[1].type == "List" or tree[1].type == "Dict" or tree[1].type == "Var" inner_nomsu\parenthesize! - return NomsuCode(tree.source, "\\", inner_nomsu) + return NomsuCode\from(tree.source, "\\", inner_nomsu) when "Block" - nomsu = NomsuCode(tree.source, ":") + nomsu = NomsuCode\from(tree.source, ":") for i,line in ipairs tree nomsu\append(i == 1 and " " or "; ") nomsu\append tree_to_inline_nomsu(line) @@ -86,12 +86,12 @@ tree_to_inline_nomsu = (tree)-> elseif bit.type == "Var" and type(tree[i+1]) == 'string' and not match(tree[i+1], "^[ \n\t,.:;#(){}[%]]") interp_nomsu\parenthesize! nomsu\append "\\", interp_nomsu - nomsu = NomsuCode(tree.source) + nomsu = NomsuCode\from(tree.source) add_text(nomsu, tree) - return NomsuCode(tree.source, '"', nomsu, '"') + return NomsuCode\from(tree.source, '"', nomsu, '"') when "List", "Dict" - nomsu = NomsuCode(tree.source, (tree.type == "List" and "[" or "{")) + nomsu = NomsuCode\from(tree.source, (tree.type == "List" and "[" or "{")) for i, item in ipairs tree nomsu\append ", " if i > 1 nomsu\append tree_to_inline_nomsu(item) @@ -101,7 +101,7 @@ tree_to_inline_nomsu = (tree)-> when "DictEntry" key, value = tree[1], tree[2] nomsu = if key.type == "Text" and #key == 1 and is_identifier(key[1]) - NomsuCode(key.source, key[1]) + NomsuCode\from(key.source, key[1]) else tree_to_inline_nomsu(key) nomsu\parenthesize! if key.type == "Action" or key.type == "Block" assert(value.type != "Block", "Didn't expect to find a Block as a value in a dict") @@ -113,7 +113,7 @@ tree_to_inline_nomsu = (tree)-> return nomsu when "IndexChain" - nomsu = NomsuCode(tree.source) + nomsu = NomsuCode\from(tree.source) for i, bit in ipairs tree nomsu\append "." if i > 1 local bit_nomsu @@ -127,10 +127,10 @@ tree_to_inline_nomsu = (tree)-> return nomsu when "Number" - return NomsuCode(tree.source, tostring(tree[1])) + return NomsuCode\from(tree.source, tostring(tree[1])) when "Var" - return NomsuCode(tree.source, "%", tree[1]) + return NomsuCode\from(tree.source, "%", tree[1]) when "FileChunks" error("Can't inline a FileChunks") @@ -146,7 +146,7 @@ tree_to_inline_nomsu = (tree)-> error("Unknown type: #{tree.type}") tree_to_nomsu = (tree)-> - nomsu = NomsuCode(tree.source) + nomsu = NomsuCode\from(tree.source) -- For concision: recurse = (t)-> @@ -166,7 +166,7 @@ tree_to_nomsu = (tree)-> indented = tree_to_nomsu(t) if t.type == "Action" if indented\is_multiline! - return NomsuCode(t.source, "(..)\n ", indented) + return NomsuCode\from(t.source, "(..)\n ", indented) else indented\parenthesize! return indented @@ -234,7 +234,7 @@ tree_to_nomsu = (tree)-> if i < #tree -- number of lines > 2 (TODO: improve this) nomsu\append(line_nomsu\match('\n[^\n]*\n') and "\n\n" or "\n") - return NomsuCode(tree.source, ":\n ", nomsu) + return NomsuCode\from(tree.source, ":\n ", nomsu) when "Text" -- Multi-line text has more generous wrap margins @@ -274,7 +274,7 @@ tree_to_nomsu = (tree)-> if interp_nomsu\is_multiline! nomsu\append "\n.." add_text(tree) - return NomsuCode(tree.source, '"\\\n ..', nomsu, '"') + return NomsuCode\from(tree.source, '"\\\n ..', nomsu, '"') when "List", "Dict" if #tree == 0 @@ -290,14 +290,14 @@ tree_to_nomsu = (tree)-> if i < #tree nomsu\append((item_nomsu\is_multiline! or nomsu\trailing_line_len! + #tostring(item_nomsu) >= MAX_LINE) and '\n' or ', ') return if tree.type == "List" then - NomsuCode(tree.source, "[..]\n ", nomsu) + NomsuCode\from(tree.source, "[..]\n ", nomsu) else - NomsuCode(tree.source, "{..}\n ", nomsu) + NomsuCode\from(tree.source, "{..}\n ", nomsu) when "DictEntry" key, value = tree[1], tree[2] nomsu = if key.type == "Text" and #key == 1 and is_identifier(key[1]) - NomsuCode(key.source, key[1]) + NomsuCode\from(key.source, key[1]) else tree_to_inline_nomsu(key) nomsu\parenthesize! if key.type == "Block" value_nomsu = tree_to_nomsu(value) |
