Skip to content

Commit 3f31e15

Browse files
committed
refactor all-the-things
1 parent a05c5db commit 3f31e15

File tree

165 files changed

+1867
-1136
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+1867
-1136
lines changed

Zend/Optimizer/ssa_integrity.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ static inline bool is_defined(const zend_ssa *ssa, const zend_op_array *op_array
9797
#define FAIL(...) do { \
9898
if (status == SUCCESS) { \
9999
fprintf(stderr, "\nIn function %s::%s (%s):\n", \
100-
op_array->scope ? ZSTR_VAL(op_array->scope->name) : "", \
100+
op_array->scope ? ZSTR_VAL((zend_string *)op_array->scope->name) : "", \
101101
op_array->function_name ? ZSTR_VAL(op_array->function_name) : "{main}", extra); \
102102
} \
103103
fprintf(stderr, __VA_ARGS__); \

Zend/Optimizer/zend_dump.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,9 @@ static void zend_dump_type_info(uint32_t info, zend_class_entry *ce, int is_inst
221221
fprintf(stderr, "class");
222222
if (ce) {
223223
if (is_instanceof) {
224-
fprintf(stderr, " (instanceof %s)", ce->name->val);
224+
fprintf(stderr, " (instanceof %s)", ((zend_string *)ce->name)->val);
225225
} else {
226-
fprintf(stderr, " (%s)", ce->name->val);
226+
fprintf(stderr, " (%s)", ((zend_string *)ce->name)->val);
227227
}
228228
}
229229
} else if ((info & MAY_BE_ANY) == MAY_BE_ANY) {
@@ -356,9 +356,9 @@ static void zend_dump_type_info(uint32_t info, zend_class_entry *ce, int is_inst
356356
fprintf(stderr, "object");
357357
if (ce) {
358358
if (is_instanceof) {
359-
fprintf(stderr, " (instanceof %s)", ce->name->val);
359+
fprintf(stderr, " (instanceof %s)", ((zend_string *)ce->name)->val);
360360
} else {
361-
fprintf(stderr, " (%s)", ce->name->val);
361+
fprintf(stderr, " (%s)", ((zend_string *)ce->name)->val);
362362
}
363363
}
364364
}
@@ -932,7 +932,7 @@ void zend_dump_op_array_name(const zend_op_array *op_array)
932932
{
933933
if (op_array->function_name) {
934934
if (op_array->scope && op_array->scope->name) {
935-
fprintf(stderr, "%s::%s", op_array->scope->name->val, op_array->function_name->val);
935+
fprintf(stderr, "%s::%s", ((zend_string *)op_array->scope->name)->val, op_array->function_name->val);
936936
} else {
937937
fprintf(stderr, "%s", op_array->function_name->val);
938938
}

Zend/Optimizer/zend_optimizer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ zend_class_entry *zend_optimizer_get_class_entry(
842842
return Z_PTR_P(ce_zv);
843843
}
844844

845-
if (op_array && op_array->scope && zend_string_equals_ci(op_array->scope->name, lcname)) {
845+
if (op_array && op_array->scope && zend_string_equals_ci((zend_string *)op_array->scope->name, lcname)) {
846846
return op_array->scope;
847847
}
848848

Zend/zend.h

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,21 @@ struct _zend_unserialize_data;
8282
typedef struct _zend_serialize_data zend_serialize_data;
8383
typedef struct _zend_unserialize_data zend_unserialize_data;
8484

85+
typedef enum _zend_name_resolution_kind {
86+
ZEND_NAME_LEXICAL_SCOPE,
87+
ZEND_NAME_NAMESPACE,
88+
} zend_name_resolution_kind;
89+
90+
typedef struct _zend_namespaced_name {
91+
zend_string *name;
92+
zend_string *resolved_name;
93+
zend_name_resolution_kind kind;
94+
union {
95+
zend_class_entry *lexical_scope;
96+
zend_string *namespace_name;
97+
};
98+
} zend_namespaced_name;
99+
85100
typedef struct _zend_class_name {
86101
zend_string *name;
87102
zend_string *lc_name;
@@ -146,11 +161,11 @@ struct _zend_inheritance_cache_entry {
146161

147162
struct _zend_class_entry {
148163
char type;
149-
zend_string *name;
164+
zend_namespaced_name *name;
150165
/* class_entry or string depending on ZEND_ACC_LINKED */
151166
union {
152167
zend_class_entry *parent;
153-
zend_string *parent_name;
168+
zend_namespaced_name *parent_name;
154169
};
155170
int refcount;
156171
uint32_t ce_flags;
@@ -214,10 +229,10 @@ struct _zend_class_entry {
214229
/* class_entry or string(s) depending on ZEND_ACC_LINKED */
215230
union {
216231
zend_class_entry **interfaces;
217-
zend_class_name *interface_names;
232+
zend_namespaced_name *interface_names;
218233
};
219234

220-
zend_class_name *trait_names;
235+
zend_namespaced_name *trait_names;
221236
zend_trait_alias **trait_aliases;
222237
zend_trait_precedence **trait_precedences;
223238
HashTable *attributes;

Zend/zend_API.c

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

Zend/zend_API.h

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,28 @@ typedef struct _zend_fcall_info_cache {
277277
#endif
278278

279279
#define INIT_CLASS_ENTRY(class_container, class_name, functions) \
280-
INIT_CLASS_ENTRY_EX(class_container, class_name, strlen(class_name), functions)
280+
INIT_CLASS_ENTRY_EX(class_container, class_name, functions)
281+
282+
#define INIT_CLASS_NAME(n, class_container, class_name) \
283+
{ \
284+
memset(&n, 0, sizeof(zend_namespaced_name)); \
285+
n.name = zend_string_init_interned(class_name, strlen(class_name), 1); \
286+
n.kind = ZEND_NAME_LEXICAL_SCOPE; \
287+
n.lexical_scope = &class_container; \
288+
}
289+
290+
#define INIT_CLASS_NAME_EX(n, class_container, class_name, class_name_len) \
291+
{ \
292+
memset(&n, 0, sizeof(zend_namespaced_name)); \
293+
n.name = zend_string_init_interned(class_name, class_name_len, 1); \
294+
n.kind = ZEND_NAME_LEXICAL_SCOPE; \
295+
n.lexical_scope = &class_container; \
296+
}
281297

282-
#define INIT_CLASS_ENTRY_EX(class_container, class_name, class_name_len, functions) \
298+
#define INIT_CLASS_ENTRY_EX(class_container, class_name, functions) \
283299
{ \
284300
memset(&class_container, 0, sizeof(zend_class_entry)); \
285-
class_container.name = zend_string_init_interned(class_name, class_name_len, 1); \
301+
class_container.name = &class_name; \
286302
class_container.default_object_handlers = &std_object_handlers; \
287303
class_container.info.internal.builtin_functions = functions; \
288304
}
@@ -1772,7 +1788,7 @@ ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string
17721788
Z_PARAM_PROLOGUE(0, 0); \
17731789
if (UNEXPECTED(!zend_parse_arg_obj_or_str(_arg, &destination_object, base_ce, &destination_string, allow_null, _i))) { \
17741790
if (base_ce) { \
1775-
_error = ZSTR_VAL((base_ce)->name); \
1791+
_error = ZSTR_VAL((zend_string *)(base_ce)->name); \
17761792
_error_code = allow_null ? ZPP_ERROR_WRONG_CLASS_OR_STRING_OR_NULL : ZPP_ERROR_WRONG_CLASS_OR_STRING; \
17771793
break; \
17781794
} else { \
@@ -1960,7 +1976,7 @@ ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string
19601976
Z_PARAM_PROLOGUE(deref, 0); \
19611977
if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, _ce, check_null))) { \
19621978
if (_ce) { \
1963-
_error = ZSTR_VAL((_ce)->name); \
1979+
_error = ZSTR_VAL((_ce)->name->name); \
19641980
_error_code = check_null ? ZPP_ERROR_WRONG_CLASS_OR_NULL : ZPP_ERROR_WRONG_CLASS; \
19651981
break; \
19661982
} else { \
@@ -1981,7 +1997,7 @@ ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string
19811997
Z_PARAM_PROLOGUE(deref, 0); \
19821998
if (UNEXPECTED(!zend_parse_arg_obj(_arg, &dest, _ce, check_null))) { \
19831999
if (_ce) { \
1984-
_error = ZSTR_VAL((_ce)->name); \
2000+
_error = ZSTR_VAL((zend_string *)(_ce)->name); \
19852001
_error_code = check_null ? ZPP_ERROR_WRONG_CLASS_OR_NULL : ZPP_ERROR_WRONG_CLASS; \
19862002
break; \
19872003
} else { \
@@ -2000,7 +2016,7 @@ ZEND_API ZEND_COLD void zend_class_redeclaration_error_ex(int type, zend_string
20002016
#define Z_PARAM_OBJ_OF_CLASS_OR_LONG_EX(dest_obj, _ce, dest_long, is_null, allow_null) \
20012017
Z_PARAM_PROLOGUE(0, 0); \
20022018
if (UNEXPECTED(!zend_parse_arg_obj_or_long(_arg, &dest_obj, _ce, &dest_long, &is_null, allow_null, _i))) { \
2003-
_error = ZSTR_VAL((_ce)->name); \
2019+
_error = ZSTR_VAL((zend_string *)(_ce)->name); \
20042020
_error_code = allow_null ? ZPP_ERROR_WRONG_CLASS_OR_LONG_OR_NULL : ZPP_ERROR_WRONG_CLASS_OR_LONG; \
20052021
break; \
20062022
}

Zend/zend_ast.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_inner(
661661
}
662662
case ZEND_AST_CONSTANT_CLASS:
663663
if (scope) {
664-
ZVAL_STR_COPY(result, scope->name);
664+
ZVAL_STR_COPY(result, (zend_string *)scope->name);
665665
} else {
666666
ZVAL_EMPTY_STRING(result);
667667
}
@@ -672,14 +672,14 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_inner(
672672
return FAILURE;
673673
}
674674
if (ast->attr == ZEND_FETCH_CLASS_SELF) {
675-
ZVAL_STR_COPY(result, scope->name);
675+
ZVAL_STR_COPY(result, (zend_string *)scope->name);
676676
} else if (ast->attr == ZEND_FETCH_CLASS_PARENT) {
677677
if (!scope->parent) {
678678
zend_throw_error(NULL,
679679
"Cannot use \"parent\" when current class scope has no parent");
680680
return FAILURE;
681681
}
682-
ZVAL_STR_COPY(result, scope->parent->name);
682+
ZVAL_STR_COPY(result, (zend_string *)scope->parent->name);
683683
} else {
684684
ZEND_ASSERT(0 && "Should have errored during compilation");
685685
}
@@ -1091,18 +1091,18 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_inner(
10911091

10921092
if (!(fptr->common.fn_flags & ZEND_ACC_STATIC)) {
10931093
zend_non_static_method_call(fptr);
1094-
1094+
10951095
return FAILURE;
10961096
}
10971097
if ((fptr->common.fn_flags & ZEND_ACC_ABSTRACT)) {
10981098
zend_abstract_method_call(fptr);
1099-
1099+
11001100
return FAILURE;
11011101
} else if (fptr->common.scope->ce_flags & ZEND_ACC_TRAIT) {
11021102
zend_error(E_DEPRECATED,
11031103
"Calling static trait method %s::%s is deprecated, "
11041104
"it should only be called on a class using the trait",
1105-
ZSTR_VAL(fptr->common.scope->name), ZSTR_VAL(fptr->common.function_name));
1105+
ZSTR_VAL((zend_string *)fptr->common.scope->name), ZSTR_VAL(fptr->common.function_name));
11061106
if (EG(exception)) {
11071107
return FAILURE;
11081108
}

Zend/zend_attributes.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,22 @@ static void validate_allow_dynamic_properties(
7373
{
7474
if (scope->ce_flags & ZEND_ACC_TRAIT) {
7575
zend_error_noreturn(E_ERROR, "Cannot apply #[AllowDynamicProperties] to trait %s",
76-
ZSTR_VAL(scope->name)
76+
ZSTR_VAL((zend_string *)scope->name)
7777
);
7878
}
7979
if (scope->ce_flags & ZEND_ACC_INTERFACE) {
8080
zend_error_noreturn(E_ERROR, "Cannot apply #[AllowDynamicProperties] to interface %s",
81-
ZSTR_VAL(scope->name)
81+
ZSTR_VAL((zend_string *)scope->name)
8282
);
8383
}
8484
if (scope->ce_flags & ZEND_ACC_READONLY_CLASS) {
8585
zend_error_noreturn(E_ERROR, "Cannot apply #[AllowDynamicProperties] to readonly class %s",
86-
ZSTR_VAL(scope->name)
86+
ZSTR_VAL((zend_string *)scope->name)
8787
);
8888
}
8989
if (scope->ce_flags & ZEND_ACC_ENUM) {
9090
zend_error_noreturn(E_ERROR, "Cannot apply #[AllowDynamicProperties] to enum %s",
91-
ZSTR_VAL(scope->name)
91+
ZSTR_VAL((zend_string *)scope->name)
9292
);
9393
}
9494
scope->ce_flags |= ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES;
@@ -459,13 +459,13 @@ ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry
459459
}
460460

461461
ZEND_HASH_FOREACH_PTR(ce->attributes, attr) {
462-
if (zend_string_equals(attr->name, zend_ce_attribute->name)) {
462+
if (zend_string_equals(attr->name, (zend_string *)zend_ce_attribute->name)) {
463463
internal_attr = pemalloc(sizeof(zend_internal_attribute), 1);
464464
internal_attr->ce = ce;
465465
internal_attr->flags = Z_LVAL(attr->args[0].value);
466466
internal_attr->validator = NULL;
467467

468-
zend_string *lcname = zend_string_tolower_ex(ce->name, 1);
468+
zend_string *lcname = zend_string_tolower_ex((zend_string *)ce->name, 1);
469469
zend_hash_update_ptr(&internal_attributes, lcname, internal_attr);
470470
zend_string_release(lcname);
471471

@@ -478,7 +478,7 @@ ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry
478478

479479
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags)
480480
{
481-
zend_attribute *attr = zend_add_class_attribute(ce, zend_ce_attribute->name, 1);
481+
zend_attribute *attr = zend_add_class_attribute(ce, (zend_string *)zend_ce_attribute->name, 1);
482482
ZVAL_LONG(&attr->args[0].value, flags);
483483

484484
return zend_mark_internal_attribute(ce);

Zend/zend_attributes_arginfo.h

Lines changed: 21 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Zend/zend_builtin_functions.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,7 +1386,7 @@ static inline void get_declared_class_impl(INTERNAL_FUNCTION_PARAMETERS, int fla
13861386
&& ZSTR_VAL(key)[0] != 0) {
13871387
ZEND_HASH_FILL_GROW();
13881388
if (EXPECTED(Z_TYPE_P(zv) == IS_PTR)) {
1389-
ZEND_HASH_FILL_SET_STR_COPY(ce->name);
1389+
ZEND_HASH_FILL_SET_STR_COPY((zend_string *)ce->name);
13901390
} else {
13911391
ZEND_ASSERT(Z_TYPE_P(zv) == IS_ALIAS_PTR);
13921392
ZEND_HASH_FILL_SET_STR_COPY(key);
@@ -2042,9 +2042,9 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
20422042
object = Z_OBJ(call->This);
20432043
/* $this may be passed into regular internal functions */
20442044
if (func->common.scope) {
2045-
ZVAL_STR_COPY(&tmp, func->common.scope->name);
2045+
ZVAL_STR_COPY(&tmp, (zend_string *)func->common.scope->name);
20462046
} else if (object->handlers->get_class_name == zend_std_get_class_name) {
2047-
ZVAL_STR_COPY(&tmp, object->ce->name);
2047+
ZVAL_STR_COPY(&tmp, (zend_string *)object->ce->name);
20482048
} else {
20492049
ZVAL_STR(&tmp, object->handlers->get_class_name(object));
20502050
}

Zend/zend_builtin_functions_arginfo.h

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)