diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-04-14 16:52:13 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-04-14 16:52:13 +0200 |
commit | bac5137e4ec7e64f1357d7de53764e79751b5c1a (patch) | |
tree | 6a2ffeb0d052d93111b38797f6f55dd4f20f1078 /Zend/zend_API.c | |
parent | d0006b5fac607a10b47a407beb32cab156351e8f (diff) | |
download | php-git-bac5137e4ec7e64f1357d7de53764e79751b5c1a.tar.gz |
Add zend_create_member_string() API
This is a recurring pattern.
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 1b132d64c9..6dab0d3f29 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3102,25 +3102,13 @@ get_function_via_handler: } /* }}} */ -static zend_string *zend_create_method_string(zend_string *class_name, zend_string *method_name) { - zend_string *callable_name = zend_string_alloc( - ZSTR_LEN(class_name) + ZSTR_LEN(method_name) + sizeof("::") - 1, 0); - char *ptr = ZSTR_VAL(callable_name); - memcpy(ptr, ZSTR_VAL(class_name), ZSTR_LEN(class_name)); - ptr += ZSTR_LEN(class_name); - memcpy(ptr, "::", sizeof("::") - 1); - ptr += sizeof("::") - 1; - memcpy(ptr, ZSTR_VAL(method_name), ZSTR_LEN(method_name) + 1); - return callable_name; -} - ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object) /* {{{ */ { try_again: switch (Z_TYPE_P(callable)) { case IS_STRING: if (object) { - return zend_create_method_string(object->ce->name, Z_STR_P(callable)); + return zend_create_member_string(object->ce->name, Z_STR_P(callable)); } return zend_string_copy(Z_STR_P(callable)); @@ -3139,9 +3127,9 @@ try_again: } if (Z_TYPE_P(obj) == IS_STRING) { - return zend_create_method_string(Z_STR_P(obj), Z_STR_P(method)); + return zend_create_member_string(Z_STR_P(obj), Z_STR_P(method)); } else if (Z_TYPE_P(obj) == IS_OBJECT) { - return zend_create_method_string(Z_OBJCE_P(obj)->name, Z_STR_P(method)); + return zend_create_member_string(Z_OBJCE_P(obj)->name, Z_STR_P(method)); } else { return ZSTR_KNOWN(ZEND_STR_ARRAY_CAPITALIZED); } |