Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Error when decompiling loop inside if-else

オープン
#322 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python

調査の方向性

Reproduce the issue from the shown code.py by running python3 -m compileall . and decompiling the generated Python 3.8 pyc. Start by tracing how the decompiler handles the JUMP_FORWARD at offset 10 and its COME_FROM entries; done means the loop inside the if-else decompiles without a parse error.

索引モデルが issue の本文から書いたものです。

説明

Control Flow Python 3.7 Volunteer wanted Works on decompyle3

I was trying to decompile a pyc that I had, but it had a few errors. I managed to manually decompile it though and narrowed it down to code that looks like this:

def func(val):
    if val == 0:
        while True:
            pass
    else:
        pass

When I compile this with python3 -m compileall . and then attempt to decompile, I get a 'parse error':

# uncompyle6 version 3.7.2
# Python bytecode 3.8 (3413)
# Decompiled from: Python 3.7.7 (default, Jun 28 2020, 13:00:53) 
# [GCC 9.3.0]
# Embedded file name: ./code.py
# Compiled at: 2020-06-28 16:30:43
# Size of source mod 2**32: 92 bytes
Instruction context:
   
 L.   4         8  JUMP_BACK             8  'to 8'
->                10  JUMP_FORWARD         12  'to 12'
                12_0  COME_FROM            10  '10'


def func--- This code section failed: ---

 L.   2         0  LOAD_FAST                'val'
                2  LOAD_CONST               0
                4  COMPARE_OP               ==
                6  POP_JUMP_IF_FALSE    12  'to 12'

 L.   4         8  JUMP_BACK             8  'to 8'
               10  JUMP_FORWARD         12  'to 12'
             12_0  COME_FROM            10  '10'
             12_1  COME_FROM             6  '6'

Parse error at or near `JUMP_FORWARD' instruction at offset 10

# file __pycache__/code.cpython-38.pyc
# Deparsing stopped due to parse error

Here is the disassembly of that code:

  1           0 LOAD_CONST               0 (<code object func at 0x7ffac2d20b30, file "code.py", line 1>)
              2 LOAD_CONST               1 ('func')
              4 MAKE_FUNCTION            0
              6 STORE_NAME               0 (func)
              8 LOAD_CONST               2 (None)
             10 RETURN_VALUE

Disassembly of <code object func at 0x7ffac2d20b30, file "code.py", line 1>:
  2           0 LOAD_FAST                0 (val)
              2 LOAD_CONST               1 (0)
              4 COMPARE_OP               2 (==)
              6 POP_JUMP_IF_FALSE       12

  4     >>    8 JUMP_ABSOLUTE            8
             10 JUMP_FORWARD             0 (to 12)

  6     >>   12 LOAD_CONST               0 (None)
             14 RETURN_VALUE

Hopefully this issue can be fixed!

主要言語
Python
スター
4.3k
フォーク
465
平均マージ
4日 11時間
マージ済み PR(30日)
3

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

rocky/python-uncompyle6 のほかの issue

rocky/python-uncompyle6 の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。