summaryrefslogtreecommitdiff
path: root/unrpyc
diff options
context:
space:
mode:
Diffstat (limited to 'unrpyc')
-rw-r--r--unrpyc/Makefile11
-rw-r--r--unrpyc/decompiler.py22
2 files changed, 12 insertions, 21 deletions
diff --git a/unrpyc/Makefile b/unrpyc/Makefile
index 6e28df4..77a0838 100644
--- a/unrpyc/Makefile
+++ b/unrpyc/Makefile
@@ -1,4 +1,6 @@
-all: script.json.gz
+all: script.json.gz imachine.json.gz
+
+imachine.json.gz: imachine.json
script.json.gz: script.json
gzip -9c script.json > script.json.gz
@@ -8,15 +10,15 @@ script.json: $(patsubst %.rpyc,%.json,$(wildcard *.rpyc))
cat script-*.json > script.json
sed -i -e 's/^/{/;s/,$$/}/' script.json
-script-%.json.o: script-%.rpyc *.py
+%.json.o: %.rpyc *.py
python unrpyc.py --clobber $< $@
-script-%.json: script-%.json.o
+%.json: %.json.o
node fix.js $< $@
sed -i -e 's/^{//;s/}$$/,/' $@
clean:
- rm -f *.json.o *.json script.json.gz
+ rm -f *.json.o *.json *.gz
test: all
jshint --show-non-errors *.json
@@ -25,3 +27,4 @@ install: all
install -t ../www/scripts script.json script.json.gz
.PHONY: all clean test install
+.PRECIOUS: imachine.json.o
diff --git a/unrpyc/decompiler.py b/unrpyc/decompiler.py
index 5a9b3bb..c66e280 100644
--- a/unrpyc/decompiler.py
+++ b/unrpyc/decompiler.py
@@ -63,7 +63,6 @@ def print_atl(f, atl_block, indent_level):
return
if not atl_block.statements:
indent(f, indent_level)
- f.write('pass\n')
for stmt in atl_block.statements:
indent(f, indent_level)
@@ -380,21 +379,19 @@ def print_Menu(f, stmt, indent_level):
f.write('}]\n')
def print_Pass(f, stmt, indent_level):
- f.write("pass\n")
+ f.write("\n")
def print_Call(f, stmt, indent_level):
- f.write("call ")
+ f.write("[")
if stmt.expression:
f.write("expression %s" % (stmt.label, ))
else:
- f.write(stmt.label)
+ f.write('"%s"' % stmt.label)
if stmt.arguments is not None:
- if stmt.expression:
- f.write("pass ")
print_args(f, stmt.arguments)
- f.write('\n')
+ f.write('],\n')
def print_If(f, stmt, indent_level):
f.write("if %s:\n" % (stmt.entries[0][0], ))
@@ -429,21 +426,12 @@ def print_args(f, arginfo):
if arginfo is None:
return
- f.write("(")
-
- first = True
for (name, val) in arginfo.arguments:
- if first:
- first = False
- else:
- f.write(", ")
-
+ f.write(', ')
if name is not None:
f.write("%s = " % (name, ))
f.write(val)
- f.write(")")
-
# TODO positional?
def print_params(f, paraminfo):
f.write("(")