Skip to content

Commit faa83f2

Browse files
authored
Convert some macros to zend_always_inline functions (#8288)
This doesn't have an effect really, but humans and IDEs can struggle to see through the macro soup when they first interact with PHP's source code. Moreover, this reduces some of the macro expansion hell when they appear in compiler warnings.
1 parent 55f8c14 commit faa83f2

10 files changed

+229
-107
lines changed

Zend/zend.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,9 @@ ZEND_API zend_string *zend_print_zval_r_to_str(zval *expr, int indent);
298298
ZEND_API void zend_print_flat_zval_r(zval *expr);
299299
void zend_print_flat_zval_r_to_buf(smart_str *str, zval *expr);
300300

301-
#define zend_print_variable(var) \
302-
zend_print_zval((var), 0)
301+
static zend_always_inline size_t zend_print_variable(zval *var) {
302+
return zend_print_zval(var, 0);
303+
}
303304

304305
ZEND_API ZEND_COLD void zend_output_debug_string(bool trigger_break, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
305306

Zend/zend_API.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static zend_module_entry **module_post_deactivate_handlers;
4343

4444
static zend_class_entry **class_cleanup_handlers;
4545

46-
ZEND_API zend_result _zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array) /* {{{ */
46+
ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array) /* {{{ */
4747
{
4848
zval *param_ptr;
4949
uint32_t arg_count;

Zend/zend_API.h

Lines changed: 77 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -329,15 +329,13 @@ typedef struct _zend_fcall_info_cache {
329329
ZEND_API int zend_next_free_module(void);
330330

331331
BEGIN_EXTERN_C()
332-
ZEND_API zend_result _zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);
332+
ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);
333333

334334
/* internal function to efficiently copy parameters when executing __call() */
335335
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array);
336336

337337
#define zend_get_parameters_array(ht, param_count, argument_array) \
338-
_zend_get_parameters_array_ex(param_count, argument_array)
339-
#define zend_get_parameters_array_ex(param_count, argument_array) \
340-
_zend_get_parameters_array_ex(param_count, argument_array)
338+
zend_get_parameters_array_ex(param_count, argument_array)
341339
#define zend_parse_parameters_none() \
342340
(EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : (zend_wrong_parameters_none_error(), FAILURE))
343341
#define zend_parse_parameters_none_throw() \
@@ -382,8 +380,9 @@ ZEND_API void zend_class_implements(zend_class_entry *class_entry, int num_inter
382380

383381
ZEND_API zend_result zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, bool persistent);
384382

385-
#define zend_register_class_alias(name, ce) \
386-
zend_register_class_alias_ex(name, sizeof(name)-1, ce, 1)
383+
static zend_always_inline zend_result zend_register_class_alias(const char *name, zend_class_entry *ce) {
384+
return zend_register_class_alias_ex(name, strlen(name), ce, 1);
385+
}
387386
#define zend_register_ns_class_alias(ns, name, ce) \
388387
zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce, 1)
389388

@@ -540,18 +539,42 @@ ZEND_API void add_assoc_object_ex(zval *arg, const char *key, size_t key_len, ze
540539
ZEND_API void add_assoc_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
541540
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
542541

543-
#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key), __n)
544-
#define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key))
545-
#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key), __b)
546-
#define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key), __r)
547-
#define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key), __d)
548-
#define add_assoc_str(__arg, __key, __str) add_assoc_str_ex(__arg, __key, strlen(__key), __str)
549-
#define add_assoc_string(__arg, __key, __str) add_assoc_string_ex(__arg, __key, strlen(__key), __str)
550-
#define add_assoc_stringl(__arg, __key, __str, __length) add_assoc_stringl_ex(__arg, __key, strlen(__key), __str, __length)
551-
#define add_assoc_array(__arg, __key, __arr) add_assoc_array_ex(__arg, __key, strlen(__key), __arr)
552-
#define add_assoc_object(__arg, __key, __obj) add_assoc_object_ex(__arg, __key, strlen(__key), __obj)
553-
#define add_assoc_reference(__arg, __key, __ref) add_assoc_object_ex(__arg, __key, strlen(__key), __ref)
554-
#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key), __value)
542+
static zend_always_inline void add_assoc_long(zval *arg, const char *key, zend_long n) {
543+
add_assoc_long_ex(arg, key, strlen(key), n);
544+
}
545+
static zend_always_inline void add_assoc_null(zval *arg, const char *key) {
546+
add_assoc_null_ex(arg, key, strlen(key));
547+
}
548+
static zend_always_inline void add_assoc_bool(zval *arg, const char *key, bool b) {
549+
add_assoc_bool_ex(arg, key, strlen(key), b);
550+
}
551+
static zend_always_inline void add_assoc_resource(zval *arg, const char *key, zend_resource *r) {
552+
add_assoc_resource_ex(arg, key, strlen(key), r);
553+
}
554+
static zend_always_inline void add_assoc_double(zval *arg, const char *key, double d) {
555+
add_assoc_double_ex(arg, key, strlen(key), d);
556+
}
557+
static zend_always_inline void add_assoc_str(zval *arg, const char *key, zend_string *str) {
558+
add_assoc_str_ex(arg, key, strlen(key), str);
559+
}
560+
static zend_always_inline void add_assoc_string(zval *arg, const char *key, const char *str) {
561+
add_assoc_string_ex(arg, key, strlen(key), str);
562+
}
563+
static zend_always_inline void add_assoc_stringl(zval *arg, const char *key, const char *str, size_t length) {
564+
add_assoc_stringl_ex(arg, key, strlen(key), str, length);
565+
}
566+
static zend_always_inline void add_assoc_array(zval *arg, const char *key, zend_array *arr) {
567+
add_assoc_array_ex(arg, key, strlen(key), arr);
568+
}
569+
static zend_always_inline void add_assoc_object(zval *arg, const char *key, zend_object *obj) {
570+
add_assoc_object_ex(arg, key, strlen(key), obj);
571+
}
572+
static zend_always_inline void add_assoc_reference(zval *arg, const char *key, zend_reference *ref) {
573+
add_assoc_reference_ex(arg, key, strlen(key), ref);
574+
}
575+
static zend_always_inline void add_assoc_zval(zval *arg, const char *key, zval *value) {
576+
add_assoc_zval_ex(arg, key, strlen(key), value);
577+
}
555578

556579
ZEND_API void add_index_long(zval *arg, zend_ulong index, zend_long n);
557580
ZEND_API void add_index_null(zval *arg, zend_ulong index);
@@ -602,19 +625,42 @@ ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t key_len,
602625
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
603626
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
604627

605-
#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key), __n)
606-
#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key))
607-
#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key), __b)
608-
#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key), __r)
609-
#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key), __d)
610-
#define add_property_str(__arg, __key, __str) add_property_str_ex(__arg, __key, strlen(__key), __str)
611-
#define add_property_string(__arg, __key, __str) add_property_string_ex(__arg, __key, strlen(__key), __str)
612-
#define add_property_stringl(__arg, __key, __str, __length) add_property_stringl_ex(__arg, __key, strlen(__key), __str, __length)
613-
#define add_property_array(__arg, __key, __arr) add_property_array_ex(__arg, __key, strlen(__key), __arr)
614-
#define add_property_object(__arg, __key, __obj) add_property_object_ex(__arg, __key, strlen(__key), __obj)
615-
#define add_property_reference(__arg, __key, __ref) add_property_reference_ex(__arg, __key, strlen(__key), __ref)
616-
#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key), __value)
617-
628+
static zend_always_inline void add_property_long(zval *arg, const char *key, zend_long n) {
629+
add_property_long_ex(arg, key, strlen(key), n);
630+
}
631+
static zend_always_inline void add_property_null(zval *arg, const char *key) {
632+
add_property_null_ex(arg, key, strlen(key));
633+
}
634+
static zend_always_inline void add_property_bool(zval *arg, const char *key, bool b) {
635+
add_property_bool_ex(arg, key, strlen(key), b);
636+
}
637+
static zend_always_inline void add_property_resource(zval *arg, const char *key, zend_resource *r) {
638+
add_property_resource_ex(arg, key, strlen(key), r);
639+
}
640+
static zend_always_inline void add_property_double(zval *arg, const char *key, double d) {
641+
add_property_double_ex(arg, key, strlen(key), d);
642+
}
643+
static zend_always_inline void add_property_str(zval *arg, const char *key, zend_string *str) {
644+
add_property_str_ex(arg, key, strlen(key), str);
645+
}
646+
static zend_always_inline void add_property_string(zval *arg, const char *key, const char *str) {
647+
add_property_string_ex(arg, key, strlen(key), str);
648+
}
649+
static zend_always_inline void add_property_stringl(zval *arg, const char *key, const char *str, size_t length) {
650+
add_property_stringl_ex(arg, key, strlen(key), str, length);
651+
}
652+
static zend_always_inline void add_property_array(zval *arg, const char *key, zend_array *arr) {
653+
add_property_array_ex(arg, key, strlen(key), arr);
654+
}
655+
static zend_always_inline void add_property_object(zval *arg, const char *key, zend_object *obj) {
656+
add_property_object_ex(arg, key, strlen(key), obj);
657+
}
658+
static zend_always_inline void add_property_reference(zval *arg, const char *key, zend_reference *ref) {
659+
add_property_reference_ex(arg, key, strlen(key), ref);
660+
}
661+
static zend_always_inline void add_property_zval(zval *arg, const char *key, zval *value) {
662+
add_property_zval_ex(arg, key, strlen(key), value);
663+
}
618664

619665
ZEND_API zend_result _call_user_function_impl(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], HashTable *named_params);
620666

Zend/zend_hash.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,7 +2716,7 @@ ZEND_API zend_result ZEND_FASTCALL zend_hash_move_backwards_ex(HashTable *ht, Ha
27162716

27172717

27182718
/* This function should be made binary safe */
2719-
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos)
2719+
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, const HashPosition *pos)
27202720
{
27212721
uint32_t idx;
27222722
Bucket *p;
@@ -2740,7 +2740,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zen
27402740
return HASH_KEY_NON_EXISTENT;
27412741
}
27422742

2743-
ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos)
2743+
ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, const HashPosition *pos)
27442744
{
27452745
uint32_t idx;
27462746
Bucket *p;

Zend/zend_hash.h

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#define ZEND_HASH_H
2323

2424
#include "zend.h"
25+
#include "zend_sort.h"
2526

2627
#define HASH_KEY_IS_STRING 1
2728
#define HASH_KEY_IS_LONG 2
@@ -244,35 +245,45 @@ static zend_always_inline bool zend_hash_index_exists(const HashTable *ht, zend_
244245
/* traversing */
245246
ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos(const HashTable *ht);
246247

247-
#define zend_hash_has_more_elements_ex(ht, pos) \
248-
(zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS)
249248
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos);
250249
ZEND_API zend_result ZEND_FASTCALL zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos);
251-
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
252-
ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos);
250+
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, const HashPosition *pos);
251+
ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, const HashPosition *pos);
253252
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos);
254253
ZEND_API zval* ZEND_FASTCALL zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos);
255254
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
256255
ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
257256

258-
#define zend_hash_has_more_elements(ht) \
259-
zend_hash_has_more_elements_ex(ht, &(ht)->nInternalPointer)
260-
#define zend_hash_move_forward(ht) \
261-
zend_hash_move_forward_ex(ht, &(ht)->nInternalPointer)
262-
#define zend_hash_move_backwards(ht) \
263-
zend_hash_move_backwards_ex(ht, &(ht)->nInternalPointer)
264-
#define zend_hash_get_current_key(ht, str_index, num_index) \
265-
zend_hash_get_current_key_ex(ht, str_index, num_index, &(ht)->nInternalPointer)
266-
#define zend_hash_get_current_key_zval(ht, key) \
267-
zend_hash_get_current_key_zval_ex(ht, key, &(ht)->nInternalPointer)
268-
#define zend_hash_get_current_key_type(ht) \
269-
zend_hash_get_current_key_type_ex(ht, &(ht)->nInternalPointer)
270-
#define zend_hash_get_current_data(ht) \
271-
zend_hash_get_current_data_ex(ht, &(ht)->nInternalPointer)
272-
#define zend_hash_internal_pointer_reset(ht) \
273-
zend_hash_internal_pointer_reset_ex(ht, &(ht)->nInternalPointer)
274-
#define zend_hash_internal_pointer_end(ht) \
275-
zend_hash_internal_pointer_end_ex(ht, &(ht)->nInternalPointer)
257+
static zend_always_inline zend_result zend_hash_has_more_elements_ex(HashTable *ht, HashPosition *pos) {
258+
return (zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS);
259+
}
260+
static zend_always_inline zend_result zend_hash_has_more_elements(HashTable *ht) {
261+
return zend_hash_has_more_elements_ex(ht, &ht->nInternalPointer);
262+
}
263+
static zend_always_inline zend_result zend_hash_move_forward(HashTable *ht) {
264+
return zend_hash_move_forward_ex(ht, &ht->nInternalPointer);
265+
}
266+
static zend_always_inline zend_result zend_hash_move_backwards(HashTable *ht) {
267+
return zend_hash_move_backwards_ex(ht, &ht->nInternalPointer);
268+
}
269+
static zend_always_inline int zend_hash_get_current_key(const HashTable *ht, zend_string **str_index, zend_ulong *num_index) {
270+
return zend_hash_get_current_key_ex(ht, str_index, num_index, &ht->nInternalPointer);
271+
}
272+
static zend_always_inline void zend_hash_get_current_key_zval(const HashTable *ht, zval *key) {
273+
zend_hash_get_current_key_zval_ex(ht, key, &ht->nInternalPointer);
274+
}
275+
static zend_always_inline int zend_hash_get_current_key_type(HashTable *ht) {
276+
return zend_hash_get_current_key_type_ex(ht, &ht->nInternalPointer);
277+
}
278+
static zend_always_inline zval* zend_hash_get_current_data(HashTable *ht) {
279+
return zend_hash_get_current_data_ex(ht, &ht->nInternalPointer);
280+
}
281+
static zend_always_inline void zend_hash_internal_pointer_reset(HashTable *ht) {
282+
zend_hash_internal_pointer_reset_ex(ht, &ht->nInternalPointer);
283+
}
284+
static zend_always_inline void zend_hash_internal_pointer_end(HashTable *ht) {
285+
zend_hash_internal_pointer_end_ex(ht, &ht->nInternalPointer);
286+
}
276287

277288
/* Copying, merging and sorting */
278289
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor);
@@ -287,14 +298,17 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t
287298
ZEND_API void ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, bool renumber);
288299
ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_t compar, uint32_t flag);
289300

290-
#define zend_hash_sort(ht, compare_func, renumber) \
291-
zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
301+
static zend_always_inline void ZEND_FASTCALL zend_hash_sort(HashTable *ht, bucket_compare_func_t compare_func, zend_bool renumber) {
302+
zend_hash_sort_ex(ht, zend_sort, compare_func, renumber);
303+
}
292304

293-
#define zend_hash_num_elements(ht) \
294-
(ht)->nNumOfElements
305+
static zend_always_inline uint32_t zend_hash_num_elements(const HashTable *ht) {
306+
return ht->nNumOfElements;
307+
}
295308

296-
#define zend_hash_next_free_element(ht) \
297-
(ht)->nNextFreeElement
309+
static zend_always_inline zend_long zend_hash_next_free_element(const HashTable *ht) {
310+
return ht->nNextFreeElement;
311+
}
298312

299313
ZEND_API void ZEND_FASTCALL zend_hash_rehash(HashTable *ht);
300314

Zend/zend_inheritance.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ BEGIN_EXTERN_C()
2727
ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface);
2828
ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *parent_ce, bool checked);
2929

30-
#define zend_do_inheritance(ce, parent_ce) \
31-
zend_do_inheritance_ex(ce, parent_ce, 0)
30+
static zend_always_inline void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce) {
31+
zend_do_inheritance_ex(ce, parent_ce, 0);
32+
}
3233

3334
ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string *lc_parent_name, zend_string *key);
3435

Zend/zend_interfaces.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,23 @@ typedef struct _zend_user_iterator {
4040

4141
ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
4242

43-
#define zend_call_method_with_0_params(obj, obj_ce, fn_proxy, function_name, retval) \
44-
zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
45-
46-
#define zend_call_method_with_1_params(obj, obj_ce, fn_proxy, function_name, retval, arg1) \
47-
zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
48-
49-
#define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \
50-
zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
43+
static zend_always_inline zval* zend_call_method_with_0_params(zend_object *object, zend_class_entry *obj_ce,
44+
zend_function **fn_proxy, const char *function_name, zval *retval)
45+
{
46+
return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 0, NULL, NULL);
47+
}
48+
49+
static zend_always_inline zval* zend_call_method_with_1_params(zend_object *object, zend_class_entry *obj_ce,
50+
zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1)
51+
{
52+
return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 1, arg1, NULL);
53+
}
54+
55+
static zend_always_inline zval* zend_call_method_with_2_params(zend_object *object, zend_class_entry *obj_ce,
56+
zend_function **fn_proxy, const char *function_name, zval *retval, zval* arg1, zval* arg2)
57+
{
58+
return zend_call_method(object, obj_ce, fn_proxy, function_name, strlen(function_name), retval, 2, arg1, arg2);
59+
}
5160

5261
ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter);
5362
ZEND_API zend_result zend_user_it_valid(zend_object_iterator *_iter);

Zend/zend_llist.h

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,25 @@ ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos);
6666
ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos);
6767
ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);
6868

69-
#define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL)
70-
#define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL)
71-
#define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL)
72-
#define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL)
69+
static zend_always_inline void *zend_llist_get_first(zend_llist *l)
70+
{
71+
return zend_llist_get_first_ex(l, NULL);
72+
}
73+
74+
static zend_always_inline void *zend_llist_get_last(zend_llist *l)
75+
{
76+
return zend_llist_get_last_ex(l, NULL);
77+
}
78+
79+
static zend_always_inline void *zend_llist_get_next(zend_llist *l)
80+
{
81+
return zend_llist_get_next_ex(l, NULL);
82+
}
83+
84+
static zend_always_inline void *zend_llist_get_prev(zend_llist *l)
85+
{
86+
return zend_llist_get_prev_ex(l, NULL);
87+
}
7388

7489
END_EXTERN_C()
7590

Zend/zend_operators.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,12 @@ ZEND_API char* ZEND_FASTCALL zend_str_toupper_dup_ex(const char *source,
450450
ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, bool persistent);
451451
ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, bool persistent);
452452

453-
#define zend_string_tolower(str) zend_string_tolower_ex(str, 0)
454-
#define zend_string_toupper(str) zend_string_toupper_ex(str, 0)
453+
static zend_always_inline zend_string* zend_string_tolower(zend_string *str) {
454+
return zend_string_tolower_ex(str, false);
455+
}
456+
static zend_always_inline zend_string* zend_string_toupper(zend_string *str) {
457+
return zend_string_toupper_ex(str, false);
458+
}
455459

456460
ZEND_API int ZEND_FASTCALL zend_binary_zval_strcmp(zval *s1, zval *s2);
457461
ZEND_API int ZEND_FASTCALL zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);

0 commit comments

Comments
 (0)