Skip to content

Declare ext/standard constants in stubs - part 7 #9505

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion ext/standard/basic_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,6 @@ PHP_MINIT_FUNCTION(basic) /* {{{ */

register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU);
register_html_constants(INIT_FUNC_ARGS_PASSTHRU);
register_string_constants(INIT_FUNC_ARGS_PASSTHRU);

BASIC_MINIT_SUBMODULE(var)
BASIC_MINIT_SUBMODULE(file)
Expand Down
87 changes: 87 additions & 0 deletions ext/standard/basic_functions.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,93 @@
const LOG_PERROR = UNKNOWN;
#endif

/* string.c */

/**
* @var int
* @cvalue PHP_STR_PAD_LEFT
*/
const STR_PAD_LEFT = UNKNOWN;
/**
* @var int
* @cvalue PHP_STR_PAD_RIGHT
*/
const STR_PAD_RIGHT = UNKNOWN;
/**
* @var int
* @cvalue PHP_STR_PAD_BOTH
*/
const STR_PAD_BOTH = UNKNOWN;
/**
* @var int
* @cvalue PHP_PATHINFO_DIRNAME
*/
const PATHINFO_DIRNAME = UNKNOWN;
/**
* @var int
* @cvalue PHP_PATHINFO_BASENAME
*/
const PATHINFO_BASENAME = UNKNOWN;
/**
* @var int
* @cvalue PHP_PATHINFO_EXTENSION
*/
const PATHINFO_EXTENSION = UNKNOWN;
/**
* @var int
* @cvalue PHP_PATHINFO_FILENAME
*/
const PATHINFO_FILENAME = UNKNOWN;
/**
* @var int
* @cvalue PHP_PATHINFO_ALL
*/
const PATHINFO_ALL = UNKNOWN;

/**
* If last members of struct lconv equal CHAR_MAX, no grouping is done
* @var int
* @cvalue CHAR_MAX
*/
const CHAR_MAX = UNKNOWN;
/**
* @var int
* @cvalue LC_CTYPE
*/
const LC_CTYPE = UNKNOWN;
/**
* @var int
* @cvalue LC_NUMERIC
*/
const LC_NUMERIC = UNKNOWN;
/**
* @var int
* @cvalue LC_TIME
*/
const LC_TIME = UNKNOWN;
/**
* @var int
* @cvalue LC_COLLATE
*/
const LC_COLLATE = UNKNOWN;
/**
* @var int
* @cvalue LC_MONETARY
*/
const LC_MONETARY = UNKNOWN;
/**
* @var int
* @cvalue LC_ALL
*/
const LC_ALL = UNKNOWN;
#ifdef LC_MESSAGES
/**
* @var int
* @cvalue LC_MESSAGES
*/
const LC_MESSAGES = UNKNOWN;
#endif

/** @undocumentable */
#[AllowDynamicProperties]
final class __PHP_Incomplete_Class
Expand Down
20 changes: 19 additions & 1 deletion ext/standard/basic_functions_arginfo.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 11 additions & 1 deletion ext/standard/php_string.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,16 @@ PHPAPI bool php_binary_string_shuffle(const php_random_algo *algo, php_random_st
# define php_mb_reset() php_ignore_value(mblen(NULL, 0))
#endif

void register_string_constants(INIT_FUNC_ARGS);
#define PHP_STR_PAD_LEFT 0
#define PHP_STR_PAD_RIGHT 1
#define PHP_STR_PAD_BOTH 2
#define PHP_PATHINFO_DIRNAME 1
#define PHP_PATHINFO_BASENAME 2
#define PHP_PATHINFO_EXTENSION 4
#define PHP_PATHINFO_FILENAME 8
#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME)

#define PHP_STR_STRSPN 0
#define PHP_STR_STRCSPN 1

#endif /* PHP_STRING_H */
57 changes: 9 additions & 48 deletions ext/standard/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,45 +50,6 @@
#include <emmintrin.h>
#endif

#define STR_PAD_LEFT 0
#define STR_PAD_RIGHT 1
#define STR_PAD_BOTH 2
#define PHP_PATHINFO_DIRNAME 1
#define PHP_PATHINFO_BASENAME 2
#define PHP_PATHINFO_EXTENSION 4
#define PHP_PATHINFO_FILENAME 8
#define PHP_PATHINFO_ALL (PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME)

#define STR_STRSPN 0
#define STR_STRCSPN 1

/* {{{ register_string_constants */
void register_string_constants(INIT_FUNC_ARGS)
{
REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PATHINFO_FILENAME", PHP_PATHINFO_FILENAME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PATHINFO_ALL", PHP_PATHINFO_ALL, CONST_CS | CONST_PERSISTENT);

/* If last members of struct lconv equal CHAR_MAX, no grouping is done */
REGISTER_LONG_CONSTANT("CHAR_MAX", CHAR_MAX, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_CTYPE", LC_CTYPE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_NUMERIC", LC_NUMERIC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_TIME", LC_TIME, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_COLLATE", LC_COLLATE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_MONETARY", LC_MONETARY, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("LC_ALL", LC_ALL, CONST_CS | CONST_PERSISTENT);
# ifdef LC_MESSAGES
REGISTER_LONG_CONSTANT("LC_MESSAGES", LC_MESSAGES, CONST_CS | CONST_PERSISTENT);
# endif

}
/* }}} */

/* this is read-only, so it's ok */
ZEND_SET_ALIGNED(16, static const char hexconvtab[]) = "0123456789abcdef";

Expand Down Expand Up @@ -288,13 +249,13 @@ static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) /
RETURN_LONG(0);
}

if (behavior == STR_STRSPN) {
if (behavior == PHP_STR_STRSPN) {
RETURN_LONG(php_strspn(ZSTR_VAL(s11) + start /*str1_start*/,
ZSTR_VAL(s22) /*str2_start*/,
ZSTR_VAL(s11) + start + len /*str1_end*/,
ZSTR_VAL(s22) + ZSTR_LEN(s22) /*str2_end*/));
} else {
ZEND_ASSERT(behavior == STR_STRCSPN);
ZEND_ASSERT(behavior == PHP_STR_STRCSPN);
RETURN_LONG(php_strcspn(ZSTR_VAL(s11) + start /*str1_start*/,
ZSTR_VAL(s22) /*str2_start*/,
ZSTR_VAL(s11) + start + len /*str1_end*/,
Expand All @@ -306,14 +267,14 @@ static void php_spn_common_handler(INTERNAL_FUNCTION_PARAMETERS, int behavior) /
/* {{{ Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars) */
PHP_FUNCTION(strspn)
{
php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, STR_STRSPN);
php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_STR_STRSPN);
}
/* }}} */

/* {{{ Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars) */
PHP_FUNCTION(strcspn)
{
php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, STR_STRCSPN);
php_spn_common_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_STR_STRCSPN);
}
/* }}} */

Expand Down Expand Up @@ -5550,7 +5511,7 @@ PHP_FUNCTION(str_pad)
size_t num_pad_chars; /* Number of padding characters (total - input size) */
char *pad_str = " "; /* Pointer to padding string */
size_t pad_str_len = 1;
zend_long pad_type_val = STR_PAD_RIGHT; /* The padding type value */
zend_long pad_type_val = PHP_STR_PAD_RIGHT; /* The padding type value */
size_t i, left_pad=0, right_pad=0;
zend_string *result = NULL; /* Resulting string */

Expand All @@ -5573,7 +5534,7 @@ PHP_FUNCTION(str_pad)
RETURN_THROWS();
}

if (pad_type_val < STR_PAD_LEFT || pad_type_val > STR_PAD_BOTH) {
if (pad_type_val < PHP_STR_PAD_LEFT || pad_type_val > PHP_STR_PAD_BOTH) {
zend_argument_value_error(4, "must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH");
RETURN_THROWS();
}
Expand All @@ -5584,17 +5545,17 @@ PHP_FUNCTION(str_pad)

/* We need to figure out the left/right padding lengths. */
switch (pad_type_val) {
case STR_PAD_RIGHT:
case PHP_STR_PAD_RIGHT:
left_pad = 0;
right_pad = num_pad_chars;
break;

case STR_PAD_LEFT:
case PHP_STR_PAD_LEFT:
left_pad = num_pad_chars;
right_pad = 0;
break;

case STR_PAD_BOTH:
case PHP_STR_PAD_BOTH:
left_pad = num_pad_chars / 2;
right_pad = num_pad_chars - left_pad;
break;
Expand Down