python / python/pythoncapi-compat

upgrade_pythoncapi.py: Wrong transformations for Py_Is

未關閉
#86 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
C
星號
110
分支
39
平均合併
8 分鐘
30 天內合併 PR
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.

貢獻指南

這個儲存庫沒有索引到貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 upgrade_pythoncapi.py 開始,重現 issue 中的兩個 C 範例,然後將輸出與參考的 gmpy2_xmpz_misc.c 案例進行比較。檢查該轉換是否能處理兩種運算元順序而不破壞成員存取;當使用預期的 Py_IsNone 轉換產生有效的 C 時,即表示完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
c, python
領域
tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。