From a8f8b82768cf2501c86a0e1d3ec6f7a3b54e3e83 Mon Sep 17 00:00:00 2001 From: Jennifer Taylor Date: Thu, 15 Jul 2021 00:13:45 +0000 Subject: [PATCH] Allow code optimizer to be turned off without tripping on asserts. --- bemani/format/afp/decompile.py | 55 +++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/bemani/format/afp/decompile.py b/bemani/format/afp/decompile.py index 3e098f1..9bc973c 100644 --- a/bemani/format/afp/decompile.py +++ b/bemani/format/afp/decompile.py @@ -3685,31 +3685,38 @@ class ByteCodeDecompiler(VerboseOutput): statements = list(statements) if self.optimize: - while True: - self.vprint("Running optimizer pass...") - any_changed = False - for func in [ - self.__collapse_identical_labels, - self.__eliminate_useless_continues, - self.__eliminate_unused_labels, - self.__remove_useless_gotos, - self.__remove_goto_return, - self.__eliminate_useless_returns, - self.__convert_loops, - self.__swap_empty_ifs, - self.__drop_unneeded_else, - self.__swap_ugly_ifexprs, - self.__rearrange_compound_ifs, - self.__convert_switches, - ]: - statements, changed = func(statements) - any_changed = any_changed or changed + funcs = [ + self.__collapse_identical_labels, + self.__eliminate_useless_continues, + self.__eliminate_unused_labels, + self.__remove_useless_gotos, + self.__remove_goto_return, + self.__eliminate_useless_returns, + self.__convert_loops, + self.__swap_empty_ifs, + self.__drop_unneeded_else, + self.__swap_ugly_ifexprs, + self.__rearrange_compound_ifs, + self.__convert_switches, + ] + else: + # These are required for some sanity checks to pass. + funcs = [ + self.__eliminate_unused_labels, + ] - if not any_changed: - self.vprint("Optimizer did not change anything.") - break - else: - self.vprint("Optimizer changed code, running another pass.") + while True: + self.vprint("Running optimizer pass...") + any_changed = False + for func in funcs: + statements, changed = func(statements) + any_changed = any_changed or changed + + if not any_changed: + self.vprint("Optimizer did not change anything.") + break + else: + self.vprint("Optimizer changed code, running another pass.") return statements