Argument Clinic: move converters defined in several files to libclinic
まだ誰も着手していません。
- 主要言語
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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