The **const** modifier needs to be added to read-only parameters of all ZendAPI and PHPAPI functions
まだ誰も着手していません。
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.1k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
Many functions in the php source code receive the zval parameter. The value of the parameter is not modified in the function implementation. These parameters are read-only, but the const modifier is not added.
As a result, C/C++underlying developers do not know whether the function is a read-only operation or a write operation, and will pollute all downstream functions. If these PHPAPI or ZEND_API functions are used in a C++function, even if the function is designed to be read-only, the const modifier cannot be used, or only unsafe const_cast can be used to cast.
An example:
class Variant {
protected:
zval val;
void destroy() {
zval_ptr_dtor(&val);
}
public:
Variant(const zval *v) noexcept {
ZVAL_COPY_VALUE(&val, v);
}
const zval *const_ptr() const {
return &val;
}
// fast_equal_check_function should be `fast_equal_check_function(const zval *op1, const zval *op2)`
bool equals(const Variant &v) const {
return fast_equal_check_function(const_ptr(), v.const_ptr());
}
}
Problem function:
- fast_equal_check_function
- php_debug_zval_dump
- php_var_dump
- php_var_unserialize
- concat_function
- add_function
- is_equal_function
- zval_get_string
- zval_get_double // version 8.1
... a lot more functions
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、fast_equal_check_function、php_debug_zval_dump、php_var_dump、php_var_unserialize、concat_function、add_function、is_equal_function、zval_get_string、zval_get_double の PHPAPI および ZEND_API の宣言と実装を探します。変更されていない zval パラメーターを特定し、該当するシグネチャを影響を受けるすべての関数で一貫して更新してから、PHP のソースが引き続きビルドできることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c
- 領域
- compilers
- issue の種類
- リファクタリング
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 35/100