diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-01-31 18:47:58 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-02-04 13:20:25 +0300 |
commit | 91ef4124e56a8ec52078bdcb5547ea5dbf654566 (patch) | |
tree | 14285f0ab29d8274b8aeb7003ca7d0c77bbd604f /Zend/zend_operators.c | |
parent | 0476d558272c18778f95c0368e18108771a63d99 (diff) | |
download | php-git-91ef4124e56a8ec52078bdcb5547ea5dbf654566.tar.gz |
Refactor zend_object_handlers API to pass zend_object* and zend_string* insted of zval(s).
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index bf2f5771fb..832e715da1 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -138,13 +138,13 @@ ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len) /* { #define convert_object_to_type(op, dst, ctype, conv_func) \ ZVAL_UNDEF(dst); \ if (Z_OBJ_HT_P(op)->cast_object) { \ - if (Z_OBJ_HT_P(op)->cast_object(op, dst, ctype) == FAILURE) { \ + if (Z_OBJ_HT_P(op)->cast_object(Z_OBJ_P(op), dst, ctype) == FAILURE) { \ zend_error(E_RECOVERABLE_ERROR, \ "Object of class %s could not be converted to %s", ZSTR_VAL(Z_OBJCE_P(op)->name),\ zend_get_type_by_const(ctype)); \ } \ } else if (Z_OBJ_HT_P(op)->get) { \ - zval *newop = Z_OBJ_HT_P(op)->get(op, dst); \ + zval *newop = Z_OBJ_HT_P(op)->get(Z_OBJ_P(op), dst); \ if (Z_TYPE_P(newop) != IS_OBJECT) { \ /* for safety - avoid loop */ \ ZVAL_COPY_VALUE(dst, newop); \ @@ -863,11 +863,11 @@ try_again: case IS_OBJECT: { zval tmp; if (Z_OBJ_HT_P(op)->cast_object) { - if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, IS_STRING) == SUCCESS) { + if (Z_OBJ_HT_P(op)->cast_object(Z_OBJ_P(op), &tmp, IS_STRING) == SUCCESS) { return Z_STR(tmp); } } else if (Z_OBJ_HT_P(op)->get) { - zval *z = Z_OBJ_HT_P(op)->get(op, &tmp); + zval *z = Z_OBJ_HT_P(op)->get(Z_OBJ_P(op), &tmp); if (Z_TYPE_P(z) != IS_OBJECT) { zend_string *str = zval_get_string(z); zval_ptr_dtor(z); @@ -2078,13 +2078,13 @@ ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2) if (Z_TYPE_P(op1) == IS_OBJECT) { if (Z_OBJ_HT_P(op1)->get) { zval rv; - op_free = Z_OBJ_HT_P(op1)->get(op1, &rv); + op_free = Z_OBJ_HT_P(op1)->get(Z_OBJ_P(op1), &rv); ret = compare_function(result, op_free, op2); zend_free_obj_get_result(op_free); return ret; } else if (Z_TYPE_P(op2) != IS_OBJECT && Z_OBJ_HT_P(op1)->cast_object) { ZVAL_UNDEF(&tmp_free); - if (Z_OBJ_HT_P(op1)->cast_object(op1, &tmp_free, ((Z_TYPE_P(op2) == IS_FALSE || Z_TYPE_P(op2) == IS_TRUE) ? _IS_BOOL : Z_TYPE_P(op2))) == FAILURE) { + if (Z_OBJ_HT_P(op1)->cast_object(Z_OBJ_P(op1), &tmp_free, ((Z_TYPE_P(op2) == IS_FALSE || Z_TYPE_P(op2) == IS_TRUE) ? _IS_BOOL : Z_TYPE_P(op2))) == FAILURE) { ZVAL_LONG(result, 1); zend_free_obj_get_result(&tmp_free); return SUCCESS; @@ -2097,13 +2097,13 @@ ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2) if (Z_TYPE_P(op2) == IS_OBJECT) { if (Z_OBJ_HT_P(op2)->get) { zval rv; - op_free = Z_OBJ_HT_P(op2)->get(op2, &rv); + op_free = Z_OBJ_HT_P(op2)->get(Z_OBJ_P(op2), &rv); ret = compare_function(result, op1, op_free); zend_free_obj_get_result(op_free); return ret; } else if (Z_TYPE_P(op1) != IS_OBJECT && Z_OBJ_HT_P(op2)->cast_object) { ZVAL_UNDEF(&tmp_free); - if (Z_OBJ_HT_P(op2)->cast_object(op2, &tmp_free, ((Z_TYPE_P(op1) == IS_FALSE || Z_TYPE_P(op1) == IS_TRUE) ? _IS_BOOL : Z_TYPE_P(op1))) == FAILURE) { + if (Z_OBJ_HT_P(op2)->cast_object(Z_OBJ_P(op2), &tmp_free, ((Z_TYPE_P(op1) == IS_FALSE || Z_TYPE_P(op1) == IS_TRUE) ? _IS_BOOL : Z_TYPE_P(op1))) == FAILURE) { ZVAL_LONG(result, -1); zend_free_obj_get_result(&tmp_free); return SUCCESS; @@ -2467,10 +2467,10 @@ try_again: zval rv; zval *val; - val = Z_OBJ_HANDLER_P(op1, get)(op1, &rv); + val = Z_OBJ_HANDLER_P(op1, get)(Z_OBJ_P(op1), &rv); Z_TRY_ADDREF_P(val); increment_function(val); - Z_OBJ_HANDLER_P(op1, set)(op1, val); + Z_OBJ_HANDLER_P(op1, set)(Z_OBJ_P(op1), val); zval_ptr_dtor(val); } else if (Z_OBJ_HANDLER_P(op1, do_operation)) { zval op2; @@ -2534,10 +2534,10 @@ try_again: zval rv; zval *val; - val = Z_OBJ_HANDLER_P(op1, get)(op1, &rv); + val = Z_OBJ_HANDLER_P(op1, get)(Z_OBJ_P(op1), &rv); Z_TRY_ADDREF_P(val); decrement_function(val); - Z_OBJ_HANDLER_P(op1, set)(op1, val); + Z_OBJ_HANDLER_P(op1, set)(Z_OBJ_P(op1), val); zval_ptr_dtor(val); } else if (Z_OBJ_HANDLER_P(op1, do_operation)) { zval op2; @@ -2568,16 +2568,18 @@ ZEND_API int ZEND_FASTCALL zend_is_true(zval *op) /* {{{ */ ZEND_API int ZEND_FASTCALL zend_object_is_true(zval *op) /* {{{ */ { - if (Z_OBJ_HT_P(op)->cast_object) { + zend_object *zobj = Z_OBJ_P(op); + + if (zobj->handlers->cast_object) { zval tmp; - if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, _IS_BOOL) == SUCCESS) { + if (zobj->handlers->cast_object(zobj, &tmp, _IS_BOOL) == SUCCESS) { return Z_TYPE(tmp) == IS_TRUE; } - zend_error(E_RECOVERABLE_ERROR, "Object of class %s could not be converted to bool", ZSTR_VAL(Z_OBJ_P(op)->ce->name)); - } else if (Z_OBJ_HT_P(op)->get) { + zend_error(E_RECOVERABLE_ERROR, "Object of class %s could not be converted to bool", ZSTR_VAL(zobj->ce->name)); + } else if (zobj->handlers->get) { int result; zval rv; - zval *tmp = Z_OBJ_HT_P(op)->get(op, &rv); + zval *tmp = zobj->handlers->get(zobj, &rv); if (Z_TYPE_P(tmp) != IS_OBJECT) { /* for safety - avoid loop */ |