From ae6e5afff4e3e05635c9768093c7e94604bbbd2d Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 28 Dec 2022 16:18:45 +0000 Subject: [PATCH] Zend: Expose zendi_try_get_long() function via a public API --- Zend/zend_operators.c | 11 ++++++++++- Zend/zend_operators.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 0b7902d4e36c6..917557caf41e2 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -375,7 +375,7 @@ static zend_always_inline zend_result zendi_try_convert_scalar_to_number(zval *o } /* }}} */ -static zend_never_inline zend_long ZEND_FASTCALL zendi_try_get_long(zval *op, bool *failed) /* {{{ */ +static zend_never_inline zend_long ZEND_FASTCALL zendi_try_get_long(const zval *op, bool *failed) /* {{{ */ { *failed = 0; switch (Z_TYPE_P(op)) { @@ -453,6 +453,15 @@ static zend_never_inline zend_long ZEND_FASTCALL zendi_try_get_long(zval *op, bo } /* }}} */ +ZEND_API zend_long ZEND_FASTCALL zval_try_get_long(const zval *op, bool *failed) +{ + if (EXPECTED(Z_TYPE_P(op) == IS_LONG)) { + *failed = false; + return Z_LVAL_P(op); + } + return zendi_try_get_long(op, failed); +} + #define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode) \ if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \ && UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation))) { \ diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 40974da03249f..67ac5fc45494d 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -275,6 +275,7 @@ ZEND_API void ZEND_FASTCALL convert_to_array(zval *op); ZEND_API void ZEND_FASTCALL convert_to_object(zval *op); ZEND_API zend_long ZEND_FASTCALL zval_get_long_func(const zval *op, bool is_strict); +ZEND_API zend_long ZEND_FASTCALL zval_try_get_long(const zval *op, bool *failed); ZEND_API double ZEND_FASTCALL zval_get_double_func(const zval *op); ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op); ZEND_API zend_string* ZEND_FASTCALL zval_try_get_string_func(zval *op);