Add stubs for PCRE extension

Closes GH-4501.
This commit is contained in:
Stephen Reay 2019-08-10 19:52:50 +07:00 committed by Nikita Popov
parent 31d7f9763b
commit 66b750d07e
4 changed files with 138 additions and 88 deletions

View File

@ -20,6 +20,7 @@
#include "php_ini.h"
#include "php_globals.h"
#include "php_pcre.h"
#include "php_pcre_arginfo.h"
#include "ext/standard/info.h"
#include "ext/standard/basic_functions.h"
#include "zend_smart_str.h"
@ -2910,70 +2911,6 @@ static PHP_FUNCTION(preg_last_error)
/* {{{ module definition structures */
/* {{{ arginfo */
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_match, 0, 0, 2)
ZEND_ARG_INFO(0, pattern)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(1, subpatterns) /* array */
ZEND_ARG_INFO(0, flags)
ZEND_ARG_INFO(0, offset)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_match_all, 0, 0, 2)
ZEND_ARG_INFO(0, pattern)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(1, subpatterns) /* array */
ZEND_ARG_INFO(0, flags)
ZEND_ARG_INFO(0, offset)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace, 0, 0, 3)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, replace)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(0, limit)
ZEND_ARG_INFO(1, count)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace_callback, 0, 0, 3)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, callback)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(0, limit)
ZEND_ARG_INFO(1, count)
ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace_callback_array, 0, 0, 2)
ZEND_ARG_INFO(0, pattern)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(0, limit)
ZEND_ARG_INFO(1, count)
ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_split, 0, 0, 2)
ZEND_ARG_INFO(0, pattern)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_INFO(0, limit)
ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_quote, 0, 0, 1)
ZEND_ARG_INFO(0, str)
ZEND_ARG_INFO(0, delim_char)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_grep, 0, 0, 2)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, input) /* array */
ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_preg_last_error, 0)
ZEND_END_ARG_INFO()
/* }}} */
static const zend_function_entry pcre_functions[] = {
PHP_FE(preg_match, arginfo_preg_match)
PHP_FE(preg_match_all, arginfo_preg_match_all)

View File

@ -0,0 +1,52 @@
<?php
/** @return int|false */
function preg_match(string $pattern, string $subject, &$subpatterns = null, int $flags = 0, int $offset = 0) {}
/** @return int|false */
function preg_match_all(string $pattern, string $subject, &$subpatterns = null, int $flags = 0, int $offset = 0) {}
/**
* @param string|array $regex
* @param string|array $replace
* @param string|array $subject
* @return string|array|null|false
*/
function preg_replace($regex, $replace, $subject, int $limit = -1, &$count = null) {}
/**
* @param string|array $regex
* @param string|array $replace
* @param string|array $subject
* @return string|array|null|false
*/
function preg_filter($regex, $replace, $subject, int $limit = -1, &$count = null) {}
/**
* @param string|array $regex
* @param string|array $subject
* @return string|array|null
*
* TODO: $callback should be `callable`
*/
function preg_replace_callback($regex, $callback, $subject, int $limit = -1, &$count = null, int $flags = 0) {}
/**
* @param string|array $subject
* @return string|array|null
*/
function preg_replace_callback_array(array $pattern, $subject, int $limit = -1, &$count = null, int $flags = 0) {}
/**
* @return array|false
*/
function preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0) {}
function preg_quote(string $str, ?string $delim_char = null): string {}
/** @return array|false */
function preg_grep(string $regex, array $input, int $flags = 0) {}
function preg_last_error(): int {}

View File

@ -0,0 +1,59 @@
/* This is a generated file, edit the .stub.php file instead. */
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_match, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0)
ZEND_ARG_INFO(1, subpatterns)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
ZEND_END_ARG_INFO()
#define arginfo_preg_match_all arginfo_preg_match
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace, 0, 0, 3)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, replace)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
ZEND_ARG_INFO(1, count)
ZEND_END_ARG_INFO()
#define arginfo_preg_filter arginfo_preg_replace
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace_callback, 0, 0, 3)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, callback)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
ZEND_ARG_INFO(1, count)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_replace_callback_array, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, pattern, IS_ARRAY, 0)
ZEND_ARG_INFO(0, subject)
ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
ZEND_ARG_INFO(1, count)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_split, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, subject, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_preg_quote, 0, 1, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, delim_char, IS_STRING, 1)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_preg_grep, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, regex, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, input, IS_ARRAY, 0)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_preg_last_error, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()

View File

@ -68,21 +68,21 @@ string(%d) "Extension [ <persistent> extension #%d pcre version %s ] {
Function [ <internal:pcre> function preg_match ] {
- Parameters [5] {
Parameter #0 [ <required> $pattern ]
Parameter #1 [ <required> $subject ]
Parameter #0 [ <required> string $pattern ]
Parameter #1 [ <required> string $subject ]
Parameter #2 [ <optional> &$subpatterns ]
Parameter #3 [ <optional> $flags ]
Parameter #4 [ <optional> $offset ]
Parameter #3 [ <optional> int $flags ]
Parameter #4 [ <optional> int $offset ]
}
}
Function [ <internal:pcre> function preg_match_all ] {
- Parameters [5] {
Parameter #0 [ <required> $pattern ]
Parameter #1 [ <required> $subject ]
Parameter #0 [ <required> string $pattern ]
Parameter #1 [ <required> string $subject ]
Parameter #2 [ <optional> &$subpatterns ]
Parameter #3 [ <optional> $flags ]
Parameter #4 [ <optional> $offset ]
Parameter #3 [ <optional> int $flags ]
Parameter #4 [ <optional> int $offset ]
}
}
Function [ <internal:pcre> function preg_replace ] {
@ -91,7 +91,7 @@ string(%d) "Extension [ <persistent> extension #%d pcre version %s ] {
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #3 [ <optional> int $limit ]
Parameter #4 [ <optional> &$count ]
}
}
@ -101,19 +101,19 @@ string(%d) "Extension [ <persistent> extension #%d pcre version %s ] {
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $callback ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #3 [ <optional> int $limit ]
Parameter #4 [ <optional> &$count ]
Parameter #5 [ <optional> $flags ]
Parameter #5 [ <optional> int $flags ]
}
}
Function [ <internal:pcre> function preg_replace_callback_array ] {
- Parameters [5] {
Parameter #0 [ <required> $pattern ]
Parameter #0 [ <required> array $pattern ]
Parameter #1 [ <required> $subject ]
Parameter #2 [ <optional> $limit ]
Parameter #2 [ <optional> int $limit ]
Parameter #3 [ <optional> &$count ]
Parameter #4 [ <optional> $flags ]
Parameter #4 [ <optional> int $flags ]
}
}
Function [ <internal:pcre> function preg_filter ] {
@ -122,38 +122,40 @@ string(%d) "Extension [ <persistent> extension #%d pcre version %s ] {
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #3 [ <optional> int $limit ]
Parameter #4 [ <optional> &$count ]
}
}
Function [ <internal:pcre> function preg_split ] {
- Parameters [4] {
Parameter #0 [ <required> $pattern ]
Parameter #1 [ <required> $subject ]
Parameter #2 [ <optional> $limit ]
Parameter #3 [ <optional> $flags ]
Parameter #0 [ <required> string $pattern ]
Parameter #1 [ <required> string $subject ]
Parameter #2 [ <optional> int $limit ]
Parameter #3 [ <optional> int $flags ]
}
}
Function [ <internal:pcre> function preg_quote ] {
- Parameters [2] {
Parameter #0 [ <required> $str ]
Parameter #1 [ <optional> $delim_char ]
Parameter #0 [ <required> string $str ]
Parameter #1 [ <optional> string or NULL $delim_char ]
}
- Return [ string ]
}
Function [ <internal:pcre> function preg_grep ] {
- Parameters [3] {
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $input ]
Parameter #2 [ <optional> $flags ]
Parameter #0 [ <required> string $regex ]
Parameter #1 [ <required> array $input ]
Parameter #2 [ <optional> int $flags ]
}
}
Function [ <internal:pcre> function preg_last_error ] {
- Parameters [0] {
}
- Return [ int ]
}
}
}