summaryrefslogtreecommitdiff
path: root/Zend/zend_compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r--Zend/zend_compile.c274
1 files changed, 137 insertions, 137 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index e24c3ca9b3..364f84e0c4 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -106,18 +106,18 @@ static zend_string *zend_build_runtime_definition_key(zend_string *name, unsigne
zend_string *filename = CG(active_op_array)->filename;
/* NULL, name length, filename length, last accepting char position length */
- result = zend_string_alloc(1 + name->len + filename->len + char_pos_len, 0);
- sprintf(result->val, "%c%s%s%s", '\0', name->val, filename->val, char_pos_buf);
+ result = zend_string_alloc(1 + ZSTR_LEN(name) + ZSTR_LEN(filename) + char_pos_len, 0);
+ sprintf(ZSTR_VAL(result), "%c%s%s%s", '\0', ZSTR_VAL(name), ZSTR_VAL(filename), char_pos_buf);
return zend_new_interned_string(result);
}
/* }}} */
static zend_bool zend_get_unqualified_name(const zend_string *name, const char **result, size_t *result_len) /* {{{ */
{
- const char *ns_separator = zend_memrchr(name->val, '\\', name->len);
+ const char *ns_separator = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
if (ns_separator != NULL) {
*result = ns_separator + 1;
- *result_len = name->val + name->len - *result;
+ *result_len = ZSTR_VAL(name) + ZSTR_LEN(name) - *result;
return 1;
}
@@ -147,8 +147,8 @@ static zend_bool zend_is_reserved_class_name(const zend_string *name) /* {{{ */
{
const struct reserved_class_name *reserved = reserved_class_names;
- const char *uqname = name->val;
- size_t uqname_len = name->len;
+ const char *uqname = ZSTR_VAL(name);
+ size_t uqname_len = ZSTR_LEN(name);
zend_get_unqualified_name(name, &uqname, &uqname_len);
for (; reserved->name; ++reserved) {
@@ -167,7 +167,7 @@ ZEND_API void zend_assert_valid_class_name(const zend_string *name) /* {{{ */
{
if (zend_is_reserved_class_name(name)) {
zend_error_noreturn(E_COMPILE_ERROR,
- "Cannot use '%s' as class name as it is reserved", name->val);
+ "Cannot use '%s' as class name as it is reserved", ZSTR_VAL(name));
}
}
/* }}} */
@@ -192,8 +192,8 @@ static zend_always_inline zend_uchar zend_lookup_builtin_type_by_name(const zend
const builtin_type_info *info = &builtin_types[0];
for (; info->name; ++info) {
- if (name->len == info->name_len
- && zend_binary_strcasecmp(name->val, name->len, info->name, info->name_len) == 0
+ if (ZSTR_LEN(name) == info->name_len
+ && zend_binary_strcasecmp(ZSTR_VAL(name), ZSTR_LEN(name), info->name, info->name_len) == 0
) {
return info->type;
}
@@ -375,10 +375,10 @@ static int lookup_cv(zend_op_array *op_array, zend_string* name) /* {{{ */{
zend_ulong hash_value = zend_string_hash_val(name);
while (i < op_array->last_var) {
- if (op_array->vars[i]->val == name->val ||
- (op_array->vars[i]->h == hash_value &&
- op_array->vars[i]->len == name->len &&
- memcmp(op_array->vars[i]->val, name->val, name->len) == 0)) {
+ if (ZSTR_VAL(op_array->vars[i]) == ZSTR_VAL(name) ||
+ (ZSTR_H(op_array->vars[i]) == hash_value &&
+ ZSTR_LEN(op_array->vars[i]) == ZSTR_LEN(name) &&
+ memcmp(ZSTR_VAL(op_array->vars[i]), ZSTR_VAL(name), ZSTR_LEN(name)) == 0)) {
zend_string_release(name);
return (int)(zend_intptr_t)ZEND_CALL_VAR_NUM(NULL, i);
}
@@ -479,7 +479,7 @@ static int zend_add_ns_func_name_literal(zend_op_array *op_array, zend_string *n
/* Lowercased unqualfied name */
if (zend_get_unqualified_name(name, &unqualified_name, &unqualified_name_len)) {
lc_name = zend_string_alloc(unqualified_name_len, 0);
- zend_str_tolower_copy(lc_name->val, unqualified_name, unqualified_name_len);
+ zend_str_tolower_copy(ZSTR_VAL(lc_name), unqualified_name, unqualified_name_len);
zend_add_literal_string(op_array, &lc_name);
}
@@ -508,16 +508,16 @@ static int zend_add_const_name_literal(zend_op_array *op_array, zend_string *nam
int ret = zend_add_literal_string(op_array, &name);
- size_t ns_len = 0, after_ns_len = name->len;
- const char *after_ns = zend_memrchr(name->val, '\\', name->len);
+ size_t ns_len = 0, after_ns_len = ZSTR_LEN(name);
+ const char *after_ns = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
if (after_ns) {
after_ns += 1;
- ns_len = after_ns - name->val - 1;
- after_ns_len = name->len - ns_len - 1;
+ ns_len = after_ns - ZSTR_VAL(name) - 1;
+ after_ns_len = ZSTR_LEN(name) - ns_len - 1;
/* lowercased namespace name & original constant name */
- tmp_name = zend_string_init(name->val, name->len, 0);
- zend_str_tolower(tmp_name->val, ns_len);
+ tmp_name = zend_string_init(ZSTR_VAL(name), ZSTR_LEN(name), 0);
+ zend_str_tolower(ZSTR_VAL(tmp_name), ns_len);
zend_add_literal_string(op_array, &tmp_name);
/* lowercased namespace name & lowercased constant name */
@@ -528,7 +528,7 @@ static int zend_add_const_name_literal(zend_op_array *op_array, zend_string *nam
return ret;
}
} else {
- after_ns = name->val;
+ after_ns = ZSTR_VAL(name);
}
/* original unqualified constant name */
@@ -537,7 +537,7 @@ static int zend_add_const_name_literal(zend_op_array *op_array, zend_string *nam
/* lowercased unqualified constant name */
tmp_name = zend_string_alloc(after_ns_len, 0);
- zend_str_tolower_copy(tmp_name->val, after_ns, after_ns_len);
+ zend_str_tolower_copy(ZSTR_VAL(tmp_name), after_ns, after_ns_len);
zend_add_literal_string(op_array, &tmp_name);
return ret;
@@ -699,10 +699,10 @@ zend_string *zend_concat3(char *str1, size_t str1_len, char *str2, size_t str2_l
size_t len = str1_len + str2_len + str3_len;
zend_string *res = zend_string_alloc(len, 0);
- memcpy(res->val, str1, str1_len);
- memcpy(res->val + str1_len, str2, str2_len);
- memcpy(res->val + str1_len + str2_len, str3, str3_len);
- res->val[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;
}
@@ -714,7 +714,7 @@ zend_string *zend_concat_names(char *name1, size_t name1_len, char *name2, size_
zend_string *zend_prefix_with_ns(zend_string *name) {
if (FC(current_namespace)) {
zend_string *ns = FC(current_namespace);
- return zend_concat_names(ns->val, ns->len, name->val, name->len);
+ return zend_concat_names(ZSTR_VAL(ns), ZSTR_LEN(ns), ZSTR_VAL(name), ZSTR_LEN(name));
} else {
return zend_string_copy(name);
}
@@ -726,7 +726,7 @@ void *zend_hash_find_ptr_lc(HashTable *ht, const char *str, size_t len) {
ALLOCA_FLAG(use_heap);
ZSTR_ALLOCA_ALLOC(lcname, len, use_heap);
- zend_str_tolower_copy(lcname->val, str, len);
+ zend_str_tolower_copy(ZSTR_VAL(lcname), str, len);
result = zend_hash_find_ptr(ht, lcname);
ZSTR_ALLOCA_FREE(lcname, use_heap);
@@ -740,9 +740,9 @@ zend_string *zend_resolve_non_class_name(
char *compound;
*is_fully_qualified = 0;
- if (name->val[0] == '\\') {
+ if (ZSTR_VAL(name)[0] == '\\') {
/* Remove \ prefix (only relevant if this is a string rather than a label) */
- return zend_string_init(name->val + 1, name->len - 1, 0);
+ return zend_string_init(ZSTR_VAL(name) + 1, ZSTR_LEN(name) - 1, 0);
}
if (type == ZEND_NAME_FQ) {
@@ -761,7 +761,7 @@ zend_string *zend_resolve_non_class_name(
if (case_sensitive) {
import_name = zend_hash_find_ptr(current_import_sub, name);
} else {
- import_name = zend_hash_find_ptr_lc(current_import_sub, name->val, name->len);
+ import_name = zend_hash_find_ptr_lc(current_import_sub, ZSTR_VAL(name), ZSTR_LEN(name));
}
if (import_name) {
@@ -770,19 +770,19 @@ zend_string *zend_resolve_non_class_name(
}
}
- compound = memchr(name->val, '\\', name->len);
+ compound = memchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
if (compound) {
*is_fully_qualified = 1;
}
if (compound && FC(imports)) {
/* If the first part of a qualified name is an alias, substitute it. */
- size_t len = compound - name->val;
- zend_string *import_name = zend_hash_find_ptr_lc(FC(imports), name->val, len);
+ size_t len = compound - ZSTR_VAL(name);
+ zend_string *import_name = zend_hash_find_ptr_lc(FC(imports), ZSTR_VAL(name), len);
if (import_name) {
return zend_concat_names(
- import_name->val, import_name->len, name->val + len + 1, name->len - len - 1);
+ ZSTR_VAL(import_name), ZSTR_LEN(import_name), ZSTR_VAL(name) + len + 1, ZSTR_LEN(name) - len - 1);
}
}
@@ -811,36 +811,36 @@ zend_string *zend_resolve_class_name(zend_string *name, uint32_t type) /* {{{ */
return zend_prefix_with_ns(name);
}
- if (type == ZEND_NAME_FQ || name->val[0] == '\\') {
+ if (type == ZEND_NAME_FQ || ZSTR_VAL(name)[0] == '\\') {
/* Remove \ prefix (only relevant if this is a string rather than a label) */
- if (name->val[0] == '\\') {
- name = zend_string_init(name->val + 1, name->len - 1, 0);
+ if (ZSTR_VAL(name)[0] == '\\') {
+ name = zend_string_init(ZSTR_VAL(name) + 1, ZSTR_LEN(name) - 1, 0);
} else {
zend_string_addref(name);
}
/* Ensure that \self, \parent and \static are not used */
if (ZEND_FETCH_CLASS_DEFAULT != zend_get_class_fetch_type(name)) {
- zend_error_noreturn(E_COMPILE_ERROR, "'\\%s' is an invalid class name", name->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "'\\%s' is an invalid class name", ZSTR_VAL(name));
}
return name;
}
if (FC(imports)) {
- compound = memchr(name->val, '\\', name->len);
+ compound = memchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
if (compound) {
/* If the first part of a qualified name is an alias, substitute it. */
- size_t len = compound - name->val;
+ size_t len = compound - ZSTR_VAL(name);
zend_string *import_name =
- zend_hash_find_ptr_lc(FC(imports), name->val, len);
+ zend_hash_find_ptr_lc(FC(imports), ZSTR_VAL(name), len);
if (import_name) {
return zend_concat_names(
- import_name->val, import_name->len, name->val + len + 1, name->len - len - 1);
+ ZSTR_VAL(import_name), ZSTR_LEN(import_name), ZSTR_VAL(name) + len + 1, ZSTR_LEN(name) - len - 1);
}
} else {
/* If an unqualified name is an alias, replace it. */
zend_string *import_name
- = zend_hash_find_ptr_lc(FC(imports), name->val, name->len);
+ = zend_hash_find_ptr_lc(FC(imports), ZSTR_VAL(name), ZSTR_LEN(name));
if (import_name) {
return zend_string_copy(import_name);
@@ -1017,11 +1017,11 @@ ZEND_API int do_bind_function(const zend_op_array *op_array, const zend_op *opli
&& old_function->type == ZEND_USER_FUNCTION
&& old_function->op_array.last > 0) {
zend_error_noreturn(error_level, "Cannot redeclare %s() (previously declared in %s:%d)",
- function->common.function_name->val,
- old_function->op_array.filename->val,
+ ZSTR_VAL(function->common.function_name),
+ ZSTR_VAL(old_function->op_array.filename),
old_function->op_array.opcodes[0].lineno);
} else {
- zend_error_noreturn(error_level, "Cannot redeclare %s()", function->common.function_name->val);
+ zend_error_noreturn(error_level, "Cannot redeclare %s()", ZSTR_VAL(function->common.function_name));
}
return FAILURE;
} else {
@@ -1059,7 +1059,7 @@ ZEND_API zend_class_entry *do_bind_class(const zend_op_array* op_array, const ze
* so we shut up about it. This allows the if (!defined('FOO')) { return; }
* approach to work.
*/
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ce->name->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
}
return NULL;
} else {
@@ -1099,7 +1099,7 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array
}
if (zend_hash_exists(class_table, Z_STR_P(op2))) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ce->name->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
}
zend_do_inheritance(ce, parent_ce);
@@ -1108,7 +1108,7 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array
/* Register the derived class */
if (zend_hash_add_ptr(class_table, Z_STR_P(op2), ce) == NULL) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ce->name->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
}
return ce;
}
@@ -1213,9 +1213,9 @@ ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_le
size_t prop_name_length = 1 + src1_length + 1 + src2_length;
zend_string *prop_name = zend_string_alloc(prop_name_length, internal);
- prop_name->val[0] = '\0';
- memcpy(prop_name->val + 1, src1, src1_length+1);
- memcpy(prop_name->val + 1 + src1_length + 1, src2, src2_length+1);
+ ZSTR_VAL(prop_name)[0] = '\0';
+ memcpy(ZSTR_VAL(prop_name) + 1, src1, src1_length+1);
+ memcpy(ZSTR_VAL(prop_name) + 1 + src1_length + 1, src2, src2_length+1);
return prop_name;
}
/* }}} */
@@ -1234,36 +1234,36 @@ ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char
*class_name = NULL;
- if (name->val[0] != '\0') {
- *prop_name = name->val;
+ if (ZSTR_VAL(name)[0] != '\0') {
+ *prop_name = ZSTR_VAL(name);
if (prop_len) {
- *prop_len = name->len;
+ *prop_len = ZSTR_LEN(name);
}
return SUCCESS;
}
- if (name->len < 3 || name->val[1] == '\0') {
+ if (ZSTR_LEN(name) < 3 || ZSTR_VAL(name)[1] == '\0') {
zend_error(E_NOTICE, "Illegal member variable name");
- *prop_name = name->val;
+ *prop_name = ZSTR_VAL(name);
if (prop_len) {
- *prop_len = name->len;
+ *prop_len = ZSTR_LEN(name);
}
return FAILURE;
}
- class_name_len = zend_strnlen(name->val + 1, name->len - 2);
- if (class_name_len >= name->len - 2 || name->val[class_name_len + 1] != '\0') {
+ class_name_len = zend_strnlen(ZSTR_VAL(name) + 1, ZSTR_LEN(name) - 2);
+ if (class_name_len >= ZSTR_LEN(name) - 2 || ZSTR_VAL(name)[class_name_len + 1] != '\0') {
zend_error(E_NOTICE, "Corrupt member variable name");
- *prop_name = name->val;
+ *prop_name = ZSTR_VAL(name);
if (prop_len) {
- *prop_len = name->len;
+ *prop_len = ZSTR_LEN(name);
}
return FAILURE;
}
- *class_name = name->val + 1;
- *prop_name = name->val + class_name_len + 2;
+ *class_name = ZSTR_VAL(name) + 1;
+ *prop_name = ZSTR_VAL(name) + class_name_len + 2;
if (prop_len) {
- *prop_len = name->len - class_name_len - 2;
+ *prop_len = ZSTR_LEN(name) - class_name_len - 2;
}
return SUCCESS;
}
@@ -1295,8 +1295,8 @@ static zend_bool zend_try_ct_eval_const(zval *zv, zend_string *name, zend_bool i
{
/* Substitute true, false and null (including unqualified usage in namespaces) */
- const char *lookup_name = name->val;
- size_t lookup_len = name->len;
+ const char *lookup_name = ZSTR_VAL(name);
+ size_t lookup_len = ZSTR_LEN(name);
if (!is_fully_qualified) {
zend_get_unqualified_name(name, &lookup_name, &lookup_len);
@@ -1434,7 +1434,7 @@ static zend_bool zend_try_ct_eval_class_const(zval *zv, zend_string *class_name,
if (class_name_refers_to_active_ce(class_name, fetch_type)) {
c = zend_hash_find(&CG(active_class_entry)->constants_table, name);
} else if (fetch_type == ZEND_FETCH_CLASS_DEFAULT && !(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION)) {
- zend_class_entry *ce = zend_hash_find_ptr_lc(CG(class_table), class_name->val, class_name->len);
+ zend_class_entry *ce = zend_hash_find_ptr_lc(CG(class_table), ZSTR_VAL(class_name), ZSTR_LEN(class_name));
if (ce) {
c = zend_hash_find(&ce->constants_table, name);
} else {
@@ -1708,13 +1708,13 @@ zend_ast *zend_ast_append_str(zend_ast *left_ast, zend_ast *right_ast) /* {{{ */
zend_string *right = zend_ast_get_str(right_ast);
zend_string *result;
- size_t left_len = left->len;
- size_t len = left_len + right->len + 1; /* left\right */
+ size_t left_len = ZSTR_LEN(left);
+ size_t len = left_len + ZSTR_LEN(right) + 1; /* left\right */
result = zend_string_extend(left, len, 0);
- result->val[left_len] = '\\';
- memcpy(&result->val[left_len + 1], right->val, right->len);
- result->val[len] = '\0';
+ ZSTR_VAL(result)[left_len] = '\\';
+ memcpy(&ZSTR_VAL(result)[left_len + 1], ZSTR_VAL(right), ZSTR_LEN(right));
+ ZSTR_VAL(result)[len] = '\0';
zend_string_release(right);
ZVAL_STR(left_zv, result);
@@ -2868,9 +2868,9 @@ void zend_compile_dynamic_call(znode *result, znode *name_node, zend_ast *args_a
if (name_node->op_type == IS_CONST && Z_TYPE(name_node->u.constant) == IS_STRING) {
const char *colon;
zend_string *str = Z_STR(name_node->u.constant);
- if ((colon = zend_memrchr(str->val, ':', str->len)) != NULL && colon > str->val && *(colon - 1) == ':') {
- zend_string *class = zend_string_init(str->val, colon - str->val - 1, 0);
- zend_string *method = zend_string_init(colon + 1, str->len - (colon - str->val) - 1, 0);
+ if ((colon = zend_memrchr(ZSTR_VAL(str), ':', ZSTR_LEN(str))) != NULL && colon > ZSTR_VAL(str) && *(colon - 1) == ':') {
+ zend_string *class = zend_string_init(ZSTR_VAL(str), colon - ZSTR_VAL(str) - 1, 0);
+ zend_string *method = zend_string_init(colon + 1, ZSTR_LEN(str) - (colon - ZSTR_VAL(str)) - 1, 0);
opline->opcode = ZEND_INIT_STATIC_METHOD_CALL;
opline->op1_type = IS_CONST;
opline->op1.constant = zend_add_class_name_literal(CG(active_op_array), class);
@@ -2955,7 +2955,7 @@ int zend_compile_func_defined(znode *result, zend_ast_list *args) /* {{{ */
}
name = zval_get_string(zend_ast_get_zval(args->child[0]));
- if (zend_memrchr(name->val, '\\', name->len) || zend_memrchr(name->val, ':', name->len)) {
+ if (zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name)) || zend_memrchr(ZSTR_VAL(name), ':', ZSTR_LEN(name))) {
zend_string_release(name);
return FAILURE;
}
@@ -3655,7 +3655,7 @@ void zend_compile_label(zend_ast *ast) /* {{{ */
dest.opline_num = get_next_op_number(CG(active_op_array));
if (!zend_hash_add_mem(CG(context).labels, label, &dest, sizeof(zend_label))) {
- zend_error_noreturn(E_COMPILE_ERROR, "Label '%s' already defined", label->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "Label '%s' already defined", ZSTR_VAL(label));
}
}
/* }}} */
@@ -4098,9 +4098,9 @@ void zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */
CG(encoding_declared) = 1;
- new_encoding = zend_multibyte_fetch_encoding(encoding_name->val);
+ new_encoding = zend_multibyte_fetch_encoding(ZSTR_VAL(encoding_name));
if (!new_encoding) {
- zend_error(E_COMPILE_WARNING, "Unsupported encoding [%s]", encoding_name->val);
+ zend_error(E_COMPILE_WARNING, "Unsupported encoding [%s]", ZSTR_VAL(encoding_name));
} else {
old_input_filter = LANG_SCNG(input_filter);
old_encoding = LANG_SCNG(script_encoding);
@@ -4193,7 +4193,7 @@ void zend_compile_declare(zend_ast *ast) /* {{{ */
}
} else {
- zend_error(E_COMPILE_WARNING, "Unsupported declare '%s'", name->val);
+ zend_error(E_COMPILE_WARNING, "Unsupported declare '%s'", ZSTR_VAL(name));
}
}
@@ -4311,7 +4311,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
if (zend_is_auto_global(name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot re-assign auto-global variable %s",
- name->val);
+ ZSTR_VAL(name));
}
var_node.op_type = IS_CV;
@@ -4319,7 +4319,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
if (EX_VAR_TO_NUM(var_node.u.op.var) != i) {
zend_error_noreturn(E_COMPILE_ERROR, "Redefinition of parameter $%s",
- name->val);
+ ZSTR_VAL(name));
} else if (zend_string_equals_literal(name, "this")) {
if (op_array->scope && (op_array->fn_flags & ZEND_ACC_STATIC) == 0) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot re-assign $this");
@@ -4477,7 +4477,7 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
if (in_interface) {
if ((op_array->fn_flags & ZEND_ACC_PPP_MASK) != ZEND_ACC_PUBLIC) {
zend_error_noreturn(E_COMPILE_ERROR, "Access type for interface method "
- "%s::%s() must be omitted", ce->name->val, name->val);
+ "%s::%s() must be omitted", ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
op_array->fn_flags |= ZEND_ACC_ABSTRACT;
}
@@ -4485,18 +4485,18 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
if (op_array->fn_flags & ZEND_ACC_ABSTRACT) {
if (op_array->fn_flags & ZEND_ACC_PRIVATE) {
zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot be declared private",
- in_interface ? "Interface" : "Abstract", ce->name->val, name->val);
+ in_interface ? "Interface" : "Abstract", ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
if (has_body) {
zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot contain body",
- in_interface ? "Interface" : "Abstract", ce->name->val, name->val);
+ in_interface ? "Interface" : "Abstract", ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
ce->ce_flags |= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS;
} else if (!has_body) {
zend_error_noreturn(E_COMPILE_ERROR, "Non-abstract method %s::%s() must contain body",
- ce->name->val, name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
op_array->scope = ce;
@@ -4507,7 +4507,7 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
if (zend_hash_add_ptr(&ce->function_table, lcname, op_array) == NULL) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare %s::%s()",
- ce->name->val, name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
if (in_interface) {
@@ -4648,7 +4648,7 @@ static void zend_begin_func_decl(znode *result, zend_op_array *op_array, zend_as
zend_string *import_name = zend_hash_find_ptr(FC(imports_function), lcname);
if (import_name && !zend_string_equals_ci(lcname, import_name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare function %s "
- "because the name is already in use", name->val);
+ "because the name is already in use", ZSTR_VAL(name));
}
}
@@ -4786,12 +4786,12 @@ void zend_compile_prop_decl(zend_ast *ast) /* {{{ */
if (flags & ZEND_ACC_FINAL) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare property %s::$%s final, "
"the final modifier is allowed only for methods and classes",
- ce->name->val, name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
if (zend_hash_exists(&ce->properties_info, name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare %s::$%s",
- ce->name->val, name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
if (value_ast) {
@@ -4837,7 +4837,7 @@ void zend_compile_class_const_decl(zend_ast *ast) /* {{{ */
name = zend_new_interned_string_safe(name);
if (zend_hash_add(&ce->constants_table, name, &value_zv) == NULL) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot redefine class constant %s::%s",
- ce->name->val, name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(name));
}
if (Z_CONSTANT(value_zv)) {
@@ -4941,7 +4941,7 @@ void zend_compile_use_trait(zend_ast *ast) /* {{{ */
if (ce->ce_flags & ZEND_ACC_INTERFACE) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use traits inside of interfaces. "
- "%s is used in %s", name->val, ce->name->val);
+ "%s is used in %s", ZSTR_VAL(name), ZSTR_VAL(ce->name));
}
switch (zend_get_class_fetch_type(name)) {
@@ -4949,7 +4949,7 @@ void zend_compile_use_trait(zend_ast *ast) /* {{{ */
case ZEND_FETCH_CLASS_PARENT:
case ZEND_FETCH_CLASS_STATIC:
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use '%s' as trait name "
- "as it is reserved", name->val);
+ "as it is reserved", ZSTR_VAL(name));
break;
}
@@ -4994,7 +4994,7 @@ void zend_compile_implements(znode *class_node, zend_ast *ast) /* {{{ */
if (!zend_is_const_default_class_ref(class_ast)) {
zend_error_noreturn(E_COMPILE_ERROR,
- "Cannot use '%s' as interface name as it is reserved", name->val);
+ "Cannot use '%s' as interface name as it is reserved", ZSTR_VAL(name));
}
opline = zend_emit_op(NULL, ZEND_ADD_INTERFACE, class_node, NULL);
@@ -5015,8 +5015,8 @@ static zend_string *zend_generate_anon_class_name(unsigned char *lex_pos) /* {{{
zend_string *filename = CG(active_op_array)->filename;
/* NULL, name length, filename length, last accepting char position length */
- result = zend_string_alloc(sizeof("class@anonymous") + filename->len + char_pos_len, 0);
- sprintf(result->val, "class@anonymous%c%s%s", '\0', filename->val, char_pos_buf);
+ result = zend_string_alloc(sizeof("class@anonymous") + ZSTR_LEN(filename) + char_pos_len, 0);
+ sprintf(ZSTR_VAL(result), "class@anonymous%c%s%s", '\0', ZSTR_VAL(filename), char_pos_buf);
return zend_new_interned_string(result);
}
/* }}} */
@@ -5057,7 +5057,7 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
if (import_name && !zend_string_equals_ci(lcname, import_name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare class %s "
- "because the name is already in use", name->val);
+ "because the name is already in use", ZSTR_VAL(name));
}
name = zend_new_interned_string(name);
@@ -5089,7 +5089,7 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
if (!zend_is_const_default_class_ref(extends_ast)) {
zend_string *extends_name = zend_ast_get_str(extends_ast);
zend_error_noreturn(E_COMPILE_ERROR,
- "Cannot use '%s' as class name as it is reserved", extends_name->val);
+ "Cannot use '%s' as class name as it is reserved", ZSTR_VAL(extends_name));
}
zend_compile_class_ref(&extends_node, extends_ast, 0);
@@ -5150,34 +5150,34 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
ce->constructor->common.fn_flags |= ZEND_ACC_CTOR;
if (ce->constructor->common.fn_flags & ZEND_ACC_STATIC) {
zend_error_noreturn(E_COMPILE_ERROR, "Constructor %s::%s() cannot be static",
- ce->name->val, ce->constructor->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->constructor->common.function_name));
}
if (ce->constructor->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
zend_error_noreturn(E_COMPILE_ERROR,
"Constructor %s::%s() cannot declare a return type",
- ce->name->val, ce->constructor->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->constructor->common.function_name));
}
}
if (ce->destructor) {
ce->destructor->common.fn_flags |= ZEND_ACC_DTOR;
if (ce->destructor->common.fn_flags & ZEND_ACC_STATIC) {
zend_error_noreturn(E_COMPILE_ERROR, "Destructor %s::%s() cannot be static",
- ce->name->val, ce->destructor->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->destructor->common.function_name));
} else if (ce->destructor->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
zend_error_noreturn(E_COMPILE_ERROR,
"Destructor %s::%s() cannot declare a return type",
- ce->name->val, ce->destructor->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->destructor->common.function_name));
}
}
if (ce->clone) {
ce->clone->common.fn_flags |= ZEND_ACC_CLONE;
if (ce->clone->common.fn_flags & ZEND_ACC_STATIC) {
zend_error_noreturn(E_COMPILE_ERROR, "Clone method %s::%s() cannot be static",
- ce->name->val, ce->clone->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->clone->common.function_name));
} else if (ce->clone->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
zend_error_noreturn(E_COMPILE_ERROR,
"%s::%s() cannot declare a return type",
- ce->name->val, ce->clone->common.function_name->val);
+ ZSTR_VAL(ce->name), ZSTR_VAL(ce->clone->common.function_name));
}
}
@@ -5267,7 +5267,7 @@ static void zend_check_already_in_use(uint32_t type, zend_string *old_name, zend
}
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use%s %s as %s because the name "
- "is already in use", zend_get_use_type_str(type), old_name->val, new_name->val);
+ "is already in use", zend_get_use_type_str(type), ZSTR_VAL(old_name), ZSTR_VAL(new_name));
}
/* }}} */
@@ -5305,7 +5305,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
}
zend_error(E_WARNING, "The use statement with non-compound name '%s' "
- "has no effect", new_name->val);
+ "has no effect", ZSTR_VAL(new_name));
}
}
}
@@ -5318,14 +5318,14 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
if (type == T_CLASS && zend_is_reserved_class_name(new_name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use %s as %s because '%s' "
- "is a special class name", old_name->val, new_name->val, new_name->val);
+ "is a special class name", ZSTR_VAL(old_name), ZSTR_VAL(new_name), ZSTR_VAL(new_name));
}
if (current_ns) {
- zend_string *ns_name = zend_string_alloc(current_ns->len + 1 + new_name->len, 0);
- zend_str_tolower_copy(ns_name->val, current_ns->val, current_ns->len);
- ns_name->val[current_ns->len] = '\\';
- memcpy(ns_name->val + current_ns->len + 1, lookup_name->val, lookup_name->len);
+ zend_string *ns_name = zend_string_alloc(ZSTR_LEN(current_ns) + 1 + ZSTR_LEN(new_name), 0);
+ zend_str_tolower_copy(ZSTR_VAL(ns_name), ZSTR_VAL(current_ns), ZSTR_LEN(current_ns));
+ ZSTR_VAL(ns_name)[ZSTR_LEN(current_ns)] = '\\';
+ memcpy(ZSTR_VAL(ns_name) + ZSTR_LEN(current_ns) + 1, ZSTR_VAL(lookup_name), ZSTR_LEN(lookup_name));
if (zend_hash_exists(CG(class_table), ns_name)) {
zend_check_already_in_use(type, old_name, new_name, ns_name);
@@ -5369,7 +5369,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
zend_string_addref(old_name);
if (!zend_hash_add_ptr(current_import, lookup_name, old_name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use%s %s as %s because the name "
- "is already in use", zend_get_use_type_str(type), old_name->val, new_name->val);
+ "is already in use", zend_get_use_type_str(type), ZSTR_VAL(old_name), ZSTR_VAL(new_name));
}
zend_string_release(lookup_name);
@@ -5388,7 +5388,7 @@ void zend_compile_group_use(zend_ast *ast) /* {{{ */
zend_ast *inline_use, *use = list->child[i];
zval *name_zval = zend_ast_get_zval(use->child[0]);
zend_string *name = Z_STR_P(name_zval);
- zend_string *compound_ns = zend_concat_names(ns->val, ns->len, name->val, name->len);
+ zend_string *compound_ns = zend_concat_names(ZSTR_VAL(ns), ZSTR_LEN(ns), ZSTR_VAL(name), ZSTR_LEN(name));
zend_string_release(name);
ZVAL_STR(name_zval, compound_ns);
inline_use = zend_ast_create_list(1, ZEND_AST_USE, use);
@@ -5416,8 +5416,8 @@ void zend_compile_const_decl(zend_ast *ast) /* {{{ */
value_node.op_type = IS_CONST;
zend_const_expr_to_zval(value_zv, value_ast);
- if (zend_lookup_reserved_const(name->val, name->len)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare constant '%s'", name->val);
+ if (zend_lookup_reserved_const(ZSTR_VAL(name), ZSTR_LEN(name))) {
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare constant '%s'", ZSTR_VAL(name));
}
name = zend_prefix_with_ns(name);
@@ -5428,7 +5428,7 @@ void zend_compile_const_decl(zend_ast *ast) /* {{{ */
) {
if (!zend_string_equals(import_name, name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare const %s because "
- "the name is already in use", name->val);
+ "the name is already in use", ZSTR_VAL(name));
}
}
@@ -5492,7 +5492,7 @@ void zend_compile_namespace(zend_ast *ast) /* {{{ */
name = zend_ast_get_str(name_ast);
if (ZEND_FETCH_CLASS_DEFAULT != zend_get_class_fetch_type(name)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot use '%s' as namespace name", name->val);
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot use '%s' as namespace name", ZSTR_VAL(name));
}
FC(current_namespace) = zend_string_copy(name);
@@ -5529,9 +5529,9 @@ void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */
filename = zend_get_compiled_filename();
name = zend_mangle_property_name(const_name, sizeof(const_name) - 1,
- filename->val, filename->len, 0);
+ ZSTR_VAL(filename), ZSTR_LEN(filename), 0);
- zend_register_long_constant(name->val, name->len, offset, CONST_CS, 0);
+ zend_register_long_constant(ZSTR_VAL(name), ZSTR_LEN(name), offset, CONST_CS, 0);
zend_string_release(name);
}
/* }}} */
@@ -5551,19 +5551,19 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
case T_DIR:
{
zend_string *filename = CG(compiled_filename);
- zend_string *dirname = zend_string_init(filename->val, filename->len, 0);
- zend_dirname(dirname->val, dirname->len);
+ zend_string *dirname = zend_string_init(ZSTR_VAL(filename), ZSTR_LEN(filename), 0);
+ zend_dirname(ZSTR_VAL(dirname), ZSTR_LEN(dirname));
- if (strcmp(dirname->val, ".") == 0) {
+ if (strcmp(ZSTR_VAL(dirname), ".") == 0) {
dirname = zend_string_extend(dirname, MAXPATHLEN, 0);
#if HAVE_GETCWD
- VCWD_GETCWD(dirname->val, MAXPATHLEN);
+ VCWD_GETCWD(ZSTR_VAL(dirname), MAXPATHLEN);
#elif HAVE_GETWD
- VCWD_GETWD(dirname->val);
+ VCWD_GETWD(ZSTR_VAL(dirname));
#endif
}
- dirname->len = strlen(dirname->val);
+ ZSTR_LEN(dirname) = strlen(ZSTR_VAL(dirname));
ZVAL_STR(zv, dirname);
break;
}
@@ -5577,8 +5577,8 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
case T_METHOD_C:
if (ce) {
if (op_array && op_array->function_name) {
- ZVAL_NEW_STR(zv, zend_concat3(ce->name->val, ce->name->len, "::", 2,
- op_array->function_name->val, op_array->function_name->len));
+ ZVAL_NEW_STR(zv, zend_concat3(ZSTR_VAL(ce->name), ZSTR_LEN(ce->name), "::", 2,
+ ZSTR_VAL(op_array->function_name), ZSTR_LEN(op_array->function_name)));
} else {
ZVAL_STR_COPY(zv, ce->name);
}
@@ -6101,13 +6101,13 @@ static void zend_mark_function_as_generator() /* {{{ */
zend_error_noreturn(E_COMPILE_ERROR, msg,
zend_get_type_by_const(CG(active_op_array)->arg_info[-1].type_hint));
}
- if (!(CG(active_op_array)->arg_info[-1].class_name->len == sizeof("Traversable")-1
- && zend_binary_strcasecmp(CG(active_op_array)->arg_info[-1].class_name->val, sizeof("Traversable")-1, "Traversable", sizeof("Traversable")-1) == 0) &&
- !(CG(active_op_array)->arg_info[-1].class_name->len == sizeof("Iterator")-1
- && zend_binary_strcasecmp(CG(active_op_array)->arg_info[-1].class_name->val, sizeof("Iterator")-1, "Iterator", sizeof("Iterator")-1) == 0) &&
- !(CG(active_op_array)->arg_info[-1].class_name->len == sizeof("Generator")-1
- && zend_binary_strcasecmp(CG(active_op_array)->arg_info[-1].class_name->val, sizeof("Generator")-1, "Generator", sizeof("Generator")-1) == 0)) {
- zend_error_noreturn(E_COMPILE_ERROR, msg, CG(active_op_array)->arg_info[-1].class_name->val);
+ if (!(ZSTR_LEN(CG(active_op_array)->arg_info[-1].class_name) == sizeof("Traversable")-1
+ && zend_binary_strcasecmp(ZSTR_VAL(CG(active_op_array)->arg_info[-1].class_name), sizeof("Traversable")-1, "Traversable", sizeof("Traversable")-1) == 0) &&
+ !(ZSTR_LEN(CG(active_op_array)->arg_info[-1].class_name) == sizeof("Iterator")-1
+ && zend_binary_strcasecmp(ZSTR_VAL(CG(active_op_array)->arg_info[-1].class_name), sizeof("Iterator")-1, "Iterator", sizeof("Iterator")-1) == 0) &&
+ !(ZSTR_LEN(CG(active_op_array)->arg_info[-1].class_name) == sizeof("Generator")-1
+ && zend_binary_strcasecmp(ZSTR_VAL(CG(active_op_array)->arg_info[-1].class_name), sizeof("Generator")-1, "Generator", sizeof("Generator")-1) == 0)) {
+ zend_error_noreturn(E_COMPILE_ERROR, msg, ZSTR_VAL(CG(active_op_array)->arg_info[-1].class_name));
}
}
@@ -6717,7 +6717,7 @@ void zend_compile_const_expr_class_const(zend_ast **ast_ptr) /* {{{ */
}
Z_STR(result) = zend_concat3(
- class_name->val, class_name->len, "::", 2, const_name->val, const_name->len);
+ ZSTR_VAL(class_name), ZSTR_LEN(class_name), "::", 2, ZSTR_VAL(const_name), ZSTR_LEN(const_name));
Z_TYPE_INFO(result) = IS_CONSTANT_EX;
Z_CONST_FLAGS(result) = fetch_type;