Skip to content

Commit 7e0631e

Browse files
committed
Add Z_PARAM_OBJ_OF_CLASS ZPP macro
1 parent 853b794 commit 7e0631e

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

Zend/zend_API.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,6 +1530,20 @@ ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *
15301530
#define Z_PARAM_ARRAY_HT_OR_NULL(dest) \
15311531
Z_PARAM_ARRAY_HT_EX(dest, 1, 0)
15321532

1533+
#define Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, is_null, allow_null) \
1534+
Z_PARAM_PROLOGUE(0, 0); \
1535+
if (UNEXPECTED(!zend_parse_arg_array_ht_or_long(_arg, &dest_ht, &dest_long, &is_null, allow_null))) { \
1536+
_expected_type = allow_null ? Z_EXPECTED_ARRAY_OR_LONG_OR_NULL : Z_EXPECTED_ARRAY_OR_LONG; \
1537+
_error_code = ZPP_ERROR_WRONG_ARG; \
1538+
break; \
1539+
}
1540+
1541+
#define Z_PARAM_ARRAY_HT_OR_LONG(dest_ht, dest_long) \
1542+
Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, _dummy, 0)
1543+
1544+
#define Z_PARAM_ARRAY_HT_OR_LONG_OR_NULL(dest_ht, dest_long, is_null) \
1545+
Z_PARAM_ARRAY_HT_OR_LONG_EX(dest_ht, dest_long, is_null, 1)
1546+
15331547
/* old "H" */
15341548
#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, deref, separate) \
15351549
Z_PARAM_PROLOGUE(deref, separate); \
@@ -1638,6 +1652,29 @@ ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *
16381652
#define Z_PARAM_OBJECT_OF_CLASS_OR_NULL(dest, _ce) \
16391653
Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, 1, 0)
16401654

1655+
/* The same as Z_PARAM_OBJECT_OF_CLASS_EX2 except that dest is a zend_object rather than a zval */
1656+
#define Z_PARAM_OBJ_OF_CLASS_EX2(dest, _ce, check_null, deref, separate) \
1657+
Z_PARAM_PROLOGUE(deref, separate); \
1658+
if (UNEXPECTED(!zend_parse_arg_obj(_arg, &dest, _ce, check_null))) { \
1659+
if (_ce) { \
1660+
_error = ZSTR_VAL((_ce)->name); \
1661+
_error_code = check_null ? ZPP_ERROR_WRONG_CLASS_OR_NULL : ZPP_ERROR_WRONG_CLASS; \
1662+
break; \
1663+
} else { \
1664+
_expected_type = check_null ? Z_EXPECTED_OBJECT_OR_NULL : Z_EXPECTED_OBJECT; \
1665+
_error_code = ZPP_ERROR_WRONG_ARG; \
1666+
break; \
1667+
} \
1668+
}
1669+
1670+
#define Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, check_null, separate) \
1671+
Z_PARAM_OBJ_OF_CLASS_EX2(dest, _ce, check_null, separate, separate)
1672+
1673+
#define Z_PARAM_OBJ_OF_CLASS(dest, _ce) \
1674+
Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, 0, 0)
1675+
1676+
#define Z_PARAM_OBJ_OF_CLASS_OR_NULL(dest, _ce) \
1677+
Z_PARAM_OBJ_OF_CLASS_EX(dest, _ce, 1, 0)
16411678
/* old "p" */
16421679
#define Z_PARAM_PATH_EX2(dest, dest_len, check_null, deref, separate) \
16431680
Z_PARAM_PROLOGUE(deref, separate); \

0 commit comments

Comments
 (0)