Argument Clinic: move converters defined in several files to libclinic
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 35.9k
- PR 合併指標
- PR 指標待擷取
描述
Several custom converters are defined in more than one C file:
pid_t— inposixmodule.c,_posixsubprocess.candresource.c.Py_off_t— inposixmodule.cand_ssl.c; thePy_off_ttype and the converter function are duplicated as well, and_iohas yet another copy of the type.HANDLE— in_multiprocessing/multiprocessing.c,overlapped.c,msvcrtmodule.c,_testconsole.cand_winapi.c.DWORD— inoverlapped.c,winreg.cand_winapi.c.BOOL— inoverlapped.cand_winapi.c.
The copies are not always equivalent: two of the pid_t converters compare the result with -1 instead of (pid_t)-1, and DWORD in _winapi.c uses the format unit "k", which accepts negative values, while in other modules it rejects them.
The registry of converters is global, so the definition in the file which is processed first can be used in other files. The generated code therefore depends on the order of processing — removing the definition of HANDLE from one module silently changes the code generated for others.
Other converters are defined only in posixmodule.c, although the corresponding C functions are already shared, so other modules convert the argument in the "impl" function instead of declaring its type:
uid_tandgid_t—_Py_Uid_Converter()and_Py_Gid_Converter()are declared inposixmodule.hand are called by hand inpwd.getpwuid(),grp.getgrgid()and_posixsubprocess.fork_exec().
There is no converter for time_t at all: time.gmtime(), time.localtime() and time.ctime() parse their argument with a hand-written helper, and _datetime calls _PyTime_ObjectToTime_t() directly.
I am going to move these converters to Tools/clinic/libclinic/converters.py.
Linked PRs
- gh-156262
- gh-156294
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 Tools/clinic/libclinic/converters.py 開始,接著檢查 posixmodule.c、_posixsubprocess.c、resource.c、_ssl.c、_io 以及 issue 中列出的 Windows 模組中的 converter 定義和共用宣告。檢查 Argument Clinic 如何處理模組,並比較產生的程式碼;當 converter 集中化,且不改變其接受的值或產生的行為時,即視為完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- c, python
- 領域
- build-system, tooling
- Issue 類型
- 重構
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 描述清楚
- 新手友好度
- 25/100