mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Export the zend_string_concat3() API
This commit is contained in:
parent
696ae335e3
commit
d030ddb2cd
5 changed files with 32 additions and 33 deletions
|
@ -30,7 +30,6 @@
|
||||||
#include "zend_closures.h"
|
#include "zend_closures.h"
|
||||||
#include "zend_inheritance.h"
|
#include "zend_inheritance.h"
|
||||||
#include "zend_ini.h"
|
#include "zend_ini.h"
|
||||||
#include "zend_smart_str.h"
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
@ -4315,14 +4314,11 @@ static int get_default_via_ast(zval *default_value_zval, const char *default_val
|
||||||
zend_ast *ast;
|
zend_ast *ast;
|
||||||
zend_arena *ast_arena;
|
zend_arena *ast_arena;
|
||||||
|
|
||||||
smart_str code = {0};
|
zend_string *code = zend_string_concat3(
|
||||||
smart_str_appends(&code, "<?php ");
|
"<?php ", sizeof("<?php ") - 1, default_value, strlen(default_value), ";", 1);
|
||||||
smart_str_appends(&code, default_value);
|
|
||||||
smart_str_appendc(&code, ';');
|
|
||||||
smart_str_0(&code);
|
|
||||||
|
|
||||||
ast = zend_compile_string_to_ast(code.s, &ast_arena, "");
|
ast = zend_compile_string_to_ast(code, &ast_arena, "");
|
||||||
smart_str_free(&code);
|
zend_string_release(code);
|
||||||
|
|
||||||
if (!ast) {
|
if (!ast) {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
|
|
|
@ -852,21 +852,8 @@ uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag) /* {{{ */
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
zend_string *zend_concat3(char *str1, size_t str1_len, char *str2, size_t str2_len, char *str3, size_t str3_len) /* {{{ */
|
|
||||||
{
|
|
||||||
size_t len = str1_len + str2_len + str3_len;
|
|
||||||
zend_string *res = zend_string_alloc(len, 0);
|
|
||||||
|
|
||||||
memcpy(ZSTR_VAL(res), str1, str1_len);
|
|
||||||
memcpy(ZSTR_VAL(res) + str1_len, str2, str2_len);
|
|
||||||
memcpy(ZSTR_VAL(res) + str1_len + str2_len, str3, str3_len);
|
|
||||||
ZSTR_VAL(res)[len] = '\0';
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
zend_string *zend_concat_names(char *name1, size_t name1_len, char *name2, size_t name2_len) {
|
zend_string *zend_concat_names(char *name1, size_t name1_len, char *name2, size_t name2_len) {
|
||||||
return zend_concat3(name1, name1_len, "\\", 1, name2, name2_len);
|
return zend_string_concat3(name1, name1_len, "\\", 1, name2, name2_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
zend_string *zend_prefix_with_ns(zend_string *name) {
|
zend_string *zend_prefix_with_ns(zend_string *name) {
|
||||||
|
@ -7173,7 +7160,7 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
|
||||||
}
|
}
|
||||||
if (op_array && op_array->function_name) {
|
if (op_array && op_array->function_name) {
|
||||||
if (op_array->scope) {
|
if (op_array->scope) {
|
||||||
ZVAL_NEW_STR(zv, zend_concat3(
|
ZVAL_NEW_STR(zv, zend_string_concat3(
|
||||||
ZSTR_VAL(op_array->scope->name), ZSTR_LEN(op_array->scope->name),
|
ZSTR_VAL(op_array->scope->name), ZSTR_LEN(op_array->scope->name),
|
||||||
"::", 2,
|
"::", 2,
|
||||||
ZSTR_VAL(op_array->function_name), ZSTR_LEN(op_array->function_name)));
|
ZSTR_VAL(op_array->function_name), ZSTR_LEN(op_array->function_name)));
|
||||||
|
@ -8566,7 +8553,7 @@ void zend_compile_const_expr_class_const(zend_ast **ast_ptr) /* {{{ */
|
||||||
zend_string_addref(class_name);
|
zend_string_addref(class_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
name = zend_concat3(
|
name = zend_string_concat3(
|
||||||
ZSTR_VAL(class_name), ZSTR_LEN(class_name), "::", 2, ZSTR_VAL(const_name), ZSTR_LEN(const_name));
|
ZSTR_VAL(class_name), ZSTR_LEN(class_name), "::", 2, ZSTR_VAL(const_name), ZSTR_LEN(const_name));
|
||||||
|
|
||||||
zend_ast_destroy(ast);
|
zend_ast_destroy(ast);
|
||||||
|
|
|
@ -461,3 +461,19 @@ ZEND_API zend_bool ZEND_FASTCALL I_WRAP_SONAME_FNNAME_ZU(NONE,zend_string_equal_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ZEND_API zend_string *zend_string_concat3(
|
||||||
|
const char *str1, size_t str1_len,
|
||||||
|
const char *str2, size_t str2_len,
|
||||||
|
const char *str3, size_t str3_len)
|
||||||
|
{
|
||||||
|
size_t len = str1_len + str2_len + str3_len;
|
||||||
|
zend_string *res = zend_string_alloc(len, 0);
|
||||||
|
|
||||||
|
memcpy(ZSTR_VAL(res), str1, str1_len);
|
||||||
|
memcpy(ZSTR_VAL(res) + str1_len, str2, str2_len);
|
||||||
|
memcpy(ZSTR_VAL(res) + str1_len + str2_len, str3, str3_len);
|
||||||
|
ZSTR_VAL(res)[len] = '\0';
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
|
@ -34,6 +34,11 @@ ZEND_API zend_ulong ZEND_FASTCALL zend_string_hash_func(zend_string *str);
|
||||||
ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len);
|
ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len);
|
||||||
ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str);
|
ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str);
|
||||||
|
|
||||||
|
ZEND_API zend_string *zend_string_concat3(
|
||||||
|
const char *str1, size_t str1_len,
|
||||||
|
const char *str2, size_t str2_len,
|
||||||
|
const char *str3, size_t str3_len);
|
||||||
|
|
||||||
ZEND_API void zend_interned_strings_init(void);
|
ZEND_API void zend_interned_strings_init(void);
|
||||||
ZEND_API void zend_interned_strings_dtor(void);
|
ZEND_API void zend_interned_strings_dtor(void);
|
||||||
ZEND_API void zend_interned_strings_activate(void);
|
ZEND_API void zend_interned_strings_activate(void);
|
||||||
|
|
|
@ -92,19 +92,14 @@ static uint32_t add_static_slot(HashTable *hash,
|
||||||
int *cache_size)
|
int *cache_size)
|
||||||
{
|
{
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
zend_string *key;
|
|
||||||
size_t key_len;
|
|
||||||
zval *class_name = &op_array->literals[op1];
|
zval *class_name = &op_array->literals[op1];
|
||||||
zval *prop_name = &op_array->literals[op2];
|
zval *prop_name = &op_array->literals[op2];
|
||||||
zval *pos, tmp;
|
zval *pos, tmp;
|
||||||
|
|
||||||
key_len = Z_STRLEN_P(class_name) + sizeof("::") - 1 + Z_STRLEN_P(prop_name);
|
zend_string *key = zend_string_concat3(
|
||||||
key = zend_string_alloc(key_len, 0);
|
Z_STRVAL_P(class_name), Z_STRLEN_P(class_name),
|
||||||
memcpy(ZSTR_VAL(key), Z_STRVAL_P(class_name), Z_STRLEN_P(class_name));
|
"::", sizeof("::") - 1,
|
||||||
memcpy(ZSTR_VAL(key) + Z_STRLEN_P(class_name), "::", sizeof("::") - 1);
|
Z_STRVAL_P(prop_name), Z_STRLEN_P(prop_name));
|
||||||
memcpy(ZSTR_VAL(key) + Z_STRLEN_P(class_name) + sizeof("::") - 1,
|
|
||||||
Z_STRVAL_P(prop_name),
|
|
||||||
Z_STRLEN_P(prop_name) + 1);
|
|
||||||
|
|
||||||
ZSTR_H(key) = zend_string_hash_func(key);
|
ZSTR_H(key) = zend_string_hash_func(key);
|
||||||
ZSTR_H(key) += kind;
|
ZSTR_H(key) += kind;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue