#include "zend_closures.h"
#include "zend_inheritance.h"
#include "zend_ini.h"
-#include "zend_smart_str.h"
#include <stdarg.h>
zend_ast *ast;
zend_arena *ast_arena;
- smart_str code = {0};
- smart_str_appends(&code, "<?php ");
- smart_str_appends(&code, default_value);
- smart_str_appendc(&code, ';');
- smart_str_0(&code);
+ zend_string *code = zend_string_concat3(
+ "<?php ", sizeof("<?php ") - 1, default_value, strlen(default_value), ";", 1);
- ast = zend_compile_string_to_ast(code.s, &ast_arena, "");
- smart_str_free(&code);
+ ast = zend_compile_string_to_ast(code, &ast_arena, "");
+ zend_string_release(code);
if (!ast) {
return FAILURE;
}
/* }}} */
-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) {
- 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) {
}
if (op_array && op_array->function_name) {
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),
"::", 2,
ZSTR_VAL(op_array->function_name), ZSTR_LEN(op_array->function_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));
zend_ast_destroy(ast);
#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;
+}
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_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_dtor(void);
ZEND_API void zend_interned_strings_activate(void);
int *cache_size)
{
uint32_t ret;
- zend_string *key;
- size_t key_len;
zval *class_name = &op_array->literals[op1];
zval *prop_name = &op_array->literals[op2];
zval *pos, tmp;
- key_len = Z_STRLEN_P(class_name) + sizeof("::") - 1 + Z_STRLEN_P(prop_name);
- key = zend_string_alloc(key_len, 0);
- memcpy(ZSTR_VAL(key), Z_STRVAL_P(class_name), Z_STRLEN_P(class_name));
- memcpy(ZSTR_VAL(key) + 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) + 1);
+ zend_string *key = zend_string_concat3(
+ Z_STRVAL_P(class_name), Z_STRLEN_P(class_name),
+ "::", sizeof("::") - 1,
+ Z_STRVAL_P(prop_name), Z_STRLEN_P(prop_name));
ZSTR_H(key) = zend_string_hash_func(key);
ZSTR_H(key) += kind;