python / python/pythoncapi-compat
upgrade_pythoncapi.py: Wrong transformations for Py_Is
オープン
まだ誰も着手していません。
- 主要言語
- C
- スター
- 110
- フォーク
- 39
- 平均マージ
- 8分
- マージ済み PR(30日)
- 2
説明
Consider an example:
if (((PyObject*)obj)->data == Py_None) {
111;
}
if (Py_None == ((PyObject*)obj)->data) {
111;
}
After upgrade_pythoncapi.py I got:
#include "pythoncapi_compat.h"
if (((PyObject*)obj)->Py_IsNone(data)) {
111;
}
if (Py_None == ((PyObject*)obj)->data) {
111;
}
Real world example:
https://github.com/aleaxit/gmpy/blob/eb8dfcbd84abcfcb36b4adcb0d5c6d050731dd75/src/gmpy2_xmpz_misc.c#L237
I'm not sure if this is a bug. This kind of issues is not easy to avoid, using regexps for code transformations. Have you considered to use something like the pycparser?
Thanks for the project.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
upgrade_pythoncapi.py から始めて、issue にある 2 つの C の例を再現し、その後、参照されている gmpy2_xmpz_misc.c のケースと出力を比較します。メンバーアクセスを壊さずに両方のオペランド順序を変換で処理できるか確認します。意図した Py_IsNone 変換を使って有効な C が生成されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, python
- 領域
- tooling
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100