Skip to content

"if else" condition generates "uncompyle6.semantics.pysource.SourceWalkerError: Deparsing stopped due to parse error" #321

Open
@josephernest

Description

@josephernest

If you compile this test.py into a .pyc (with import py_compile; py_compile.compile("test.py")):

def f():
    L = []
    if len(L) > 1:
        if 1:
            pass
        else:
            pass
    else:
        pass

then decompiling it with uncompyle6 with

with open('test_decompiled.py', 'w') as f:
    uncompyle6.decompile_file(r'__pycache__\test.cpython-37.pyc', f)

generates this error:

uncompyle6.semantics.pysource.SourceWalkerError: Deparsing stopped due to parse error

Here is the full error:

# uncompyle6 version 3.7.1
# Python bytecode 3.7 (3394)
# Decompiled from: Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: test-class.py
# Compiled at: 2020-06-16 19:00:25
# Size of source mod 2**32: 131 bytes


def f--- This code section failed: ---

 L.   2         0  BUILD_LIST_0          0 
                2  STORE_FAST               'L'

 L.   3         4  LOAD_GLOBAL              len
                6  LOAD_FAST                'L'
                8  CALL_FUNCTION_1       1  '1 positional argument'
               10  LOAD_CONST               1
               12  COMPARE_OP               >
               14  POP_JUMP_IF_FALSE    18  'to 18'

 L.   5        16  JUMP_FORWARD         18  'to 18'
             18_0  COME_FROM            16  '16'
             18_1  COME_FROM            14  '14'

Parse error at or near `COME_FROM' instruction at offset 18_0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Control FlowProblem has to do with bad control-flow detectionPython 3.7Volunteer wantedVolunteer wanted to fix if a bug or to implement if a new feature.Works on decompyle3

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions