Use typed property in RegexIterator

This commit is contained in:
Máté Kocsis 2021-04-20 00:40:22 +02:00
parent 8c97fc88f3
commit a92f5cbe32
4 changed files with 8 additions and 8 deletions

View File

@ -1884,8 +1884,9 @@ PHP_METHOD(RegexIterator, accept)
case REGIT_MODE_REPLACE: {
zval *replacement = zend_read_property(intern->std.ce, Z_OBJ_P(ZEND_THIS), "replacement", sizeof("replacement")-1, 1, &rv);
zend_string *replacement_str = zval_try_get_string(replacement);
if (UNEXPECTED(!replacement_str)) {
return;
RETURN_THROWS();
}
result = php_pcre_replace_impl(intern->u.regex.pce, subject, ZSTR_VAL(subject), ZSTR_LEN(subject), replacement_str, -1, &count);

View File

@ -320,8 +320,7 @@ class InfiniteIterator extends IteratorIterator
class RegexIterator extends FilterIterator
{
/** @var string|null */
public $replacement;
public ?string $replacement = null;
public function __construct(Iterator $iterator, string $pattern, int $mode = self::MATCH, int $flags = 0, int $pregFlags = 0) {}

View File

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: a2f4e91b58d1af4954a2665a8fac10a4e0d9e31d */
* Stub hash: faf45a8d4e731dccfc161514f233a78d98b716e9 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_EmptyIterator_current, 0, 0, 0)
ZEND_END_ARG_INFO()
@ -784,7 +784,7 @@ static zend_class_entry *register_class_RegexIterator(zend_class_entry *class_en
zval property_replacement_default_value;
ZVAL_NULL(&property_replacement_default_value);
zend_string *property_replacement_name = zend_string_init("replacement", sizeof("replacement") - 1, 1);
zend_declare_property_ex(class_entry, property_replacement_name, &property_replacement_default_value, ZEND_ACC_PUBLIC, NULL);
zend_declare_typed_property(class_entry, property_replacement_name, &property_replacement_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));
zend_string_release(property_replacement_name);
return class_entry;

View File

@ -11,7 +11,7 @@ class foo extends ArrayIterator {
$h = new foo;
$i = new RegexIterator($h, '/^test(.*)/', RegexIterator::REPLACE);
$i->replacement = 42;
$i->replacement = "42";
var_dump($i->replacement);
foreach ($i as $name=>$value) {
var_dump($name, $value);
@ -19,7 +19,7 @@ foreach ($i as $name=>$value) {
var_dump($i->replacement);
?>
--EXPECT--
int(42)
string(2) "42"
string(5) "test3"
string(2) "42"
int(42)
string(2) "42"