From a70206b2d6611944f61c8ba17ca4396bb8054254 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Wed, 25 Apr 2012 19:07:43 -0400 Subject: [PATCH] Removed empty block prints --- prettify.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/prettify.py b/prettify.py index 5e359f4..2a47681 100644 --- a/prettify.py +++ b/prettify.py @@ -29,9 +29,17 @@ def prettify_code(codeobj, indent=0): codes.append((code, arg)) else: codes.append((code, None)) - _print_codestring(codes, indent) -def _print_codestring(codes, indent): + lines = _parse_codestring(codes) + for i, line in enumerate(lines): + added_indent, code = line[0], line[1:] + if code[-1].endswith(":") and lines[i+1][0] <= added_indent: + continue + _print(indent + added_indent, *code) + +def _parse_codestring(codes): + indent = 0 + lines = [] stack = [] print_buffer = [] block_dedent_at = [] @@ -50,9 +58,8 @@ def _print_codestring(codes, indent): block_dedent_at.remove(x) for x in block_else_at: if i >= x: - _print(indent, "else:") + lines.append((indent, "else:")) indent += 4 - _print(indent, "pass") block_else_at.remove(x) _print(indent, i, opname, arg, debug=True) if opname in OP_HASLOAD: @@ -70,7 +77,7 @@ def _print_codestring(codes, indent): elif opname == "BUILD_MAP": _push(stack, "{}") elif opname == "STORE_FAST": - _print(indent, arg, "=", _pop(stack)) + lines.append((indent, arg, "=", _pop(stack))) elif opname == "STORE_MAP": key, value = _pop(stack), _pop(stack) pair = ": ".join((key, value)) @@ -85,7 +92,7 @@ def _print_codestring(codes, indent): new_tos = tos + "." + arg _push(stack, new_tos) elif opname == "POP_TOP": - _print(indent, _pop(stack)) + lines.append((indent, _pop(stack))) elif opname == "CALL_FUNCTION": numargs, numkwargs = arg args = [] @@ -101,17 +108,17 @@ def _print_codestring(codes, indent): elif opname == "PRINT_ITEM": print_buffer.append(_pop(stack)) elif opname == "PRINT_NEWLINE": - _print(indent, "print", ", ".join(print_buffer)) + lines.append((indent, "print", ", ".join(print_buffer))) print_buffer = [] elif opname == "RETURN_VALUE": - _print(indent, "return", _pop(stack)) + lines.append((indent, "return", _pop(stack))) elif opname == "COMPARE_OP": tos, tos1 = _pop(stack), _pop(stack) compare = " ".join((tos1, arg, tos)) _push(stack, compare) elif opname == "POP_JUMP_IF_FALSE": test = _pop(stack) - _print(indent, "if {0}:".format(test)) + lines.append((indent, "if {0}:".format(test))) block_dedent_at.append(arg) block_else_at.append(arg) indent += 4 @@ -121,6 +128,7 @@ def _print_codestring(codes, indent): block_dedent_at.append(i + arg) else: raise NotImplementedError(opname, arg, stack) + return lines def _get_func_args(func): codeobj = func.__code__