1
0
mirror of synced 2025-02-17 19:19:19 +01:00

Allow code optimizer to be turned off without tripping on asserts.

This commit is contained in:
Jennifer Taylor 2021-07-15 00:13:45 +00:00
parent 5ebb0a3524
commit a8f8b82768

View File

@ -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