diff --git a/decompyle3/semantics/n_actions.py b/decompyle3/semantics/n_actions.py index fb24d189..aa585a86 100644 --- a/decompyle3/semantics/n_actions.py +++ b/decompyle3/semantics/n_actions.py @@ -246,7 +246,7 @@ def n_delete_subscript(self, node): def n_dict(self, node): """ - prettyprint a dict + Prettyprint a dict. 'dict' is something like k = {'a': 1, 'b': 42}" We will use source-code line breaks to guide us when to break. """ diff --git a/test/bytecode_3.7/run/05_long_literals.pyc b/test/bytecode_3.7/run/05_long_literals.pyc index 82a0e315..8ec24f1b 100644 Binary files a/test/bytecode_3.7/run/05_long_literals.pyc and b/test/bytecode_3.7/run/05_long_literals.pyc differ diff --git a/test/bytecode_3.8/run/05_long_literals.pyc b/test/bytecode_3.8/run/05_long_literals.pyc index 542f7cb4..d137ba66 100644 Binary files a/test/bytecode_3.8/run/05_long_literals.pyc and b/test/bytecode_3.8/run/05_long_literals.pyc differ diff --git a/test/simple_source/expression/05_long_literals.py b/test/simple_source/expression/05_long_literals.py index 3f42687f..9d0a0bf0 100644 --- a/test/simple_source/expression/05_long_literals.py +++ b/test/simple_source/expression/05_long_literals.py @@ -17,635 +17,57 @@ assert len(x) == 3 assert isinstance(x, list) and all(x) +# fmt: off # Try a long list. This should not be slow # as it has been in the past. x = [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ] assert all(x) -assert len(x) == 309 and isinstance(x, list) +assert len(x) == 300 and isinstance(x, list) # Try a long set. This should not be slow # as it has been in the past. x = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, } assert x == {1} and isinstance(x, set) @@ -654,633 +76,76 @@ a = 1 # First, a list x = [ - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, ] assert all(x) -assert len(x) == 309 and isinstance(x, list) +assert len(x) == 300 and isinstance(x, list) + +# Next, a set x = { - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, - a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, } -# Next, a set assert x == {1} and isinstance(x, set) # Check some dictionary keys. @@ -1306,8 +171,8 @@ # Try a long dictionary. # This should not be slow as it has been in the past values = { - "valuea": a + 1, - "value2": 2 + 1, + "value1": x, # Note this is LOAD_NAME + "value2": 2 + 1, # Constant should be folded into "LOAD_CONST" "value3": 3 + 1, "value4": 4 + 1, "value5": 5 + 1, @@ -1810,4 +675,46 @@ "value502": 502 + 1, } -assert list(values.values()) == list(range(2, 502 + 2)) +assert list(values.values())[1:] == list(range(3, 502 + 2)) + +# Try a long dictionary that fails because we have a binary op. +# We can get a expr32 grouping speedup +# which is slower than if this were all constant. +# The above was not implemented at the time this test was written. +values = { + "value1": a + 1, # This is a binary op not consant + "value2": 2, + "value3": 3, + "value4": 4, + "value5": 5, + "value6": 6, + "value7": 7, + "value8": 8, + "value9": 9, + "value10": 10, + "value11": 11, + "value12": 12, + "value13": 13, + "value14": 14, + "value15": 15, + "value16": 16, + "value17": 17, + "value18": 18, + "value19": 19, + "value20": 20, + "value21": 21, + "value22": 22, + "value23": 23, + "value24": 24, + "value25": 25, + "value26": 26, + "value27": 27, + "value28": 28, + "value29": 29, + "value30": 30, + "value31": 31, + "value32": 32, + "value33": 33, +} + +assert list(values.values())[1:] == list(range(2, 34))