From bda96e3c589b2b923e70abd4a5e66dfa824e8f5d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 21 Apr 2014 17:12:10 +0200 Subject: [PATCH] Use zval_get_string in print_zval and propagate TSRMLS --- Zend/zend.c | 35 +++++++++++---------------------- Zend/zend.h | 4 ++-- Zend/zend_variables.c | 6 ++---- Zend/zend_variables.h | 2 +- Zend/zend_vm_def.h | 4 ++-- Zend/zend_vm_execute.h | 18 ++++++++--------- ext/reflection/php_reflection.c | 2 +- sapi/phpdbg/phpdbg_info.c | 2 +- 8 files changed, 30 insertions(+), 43 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index cef24c085b..eb20508261 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -309,34 +309,23 @@ again: } /* }}} */ -ZEND_API int zend_print_zval(zval *expr, int indent) /* {{{ */ +ZEND_API int zend_print_zval(zval *expr, int indent TSRMLS_DC) /* {{{ */ { - return zend_print_zval_ex(zend_write, expr, indent); + return zend_print_zval_ex(zend_write, expr, indent TSRMLS_CC); } /* }}} */ -ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent) /* {{{ */ +ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC) /* {{{ */ { - zval expr_copy; - int use_copy; - int ret; + zend_string *str = zval_get_string(expr TSRMLS_CC); + int len = str->len; - zend_make_printable_zval(expr, &expr_copy, &use_copy); - if (use_copy) { - expr = &expr_copy; + if (len != 0) { + write_func(str->val, len); } - if (Z_STRLEN_P(expr) == 0) { /* optimize away empty strings */ - if (use_copy) { - zval_dtor(expr); - } - return 0; - } - write_func(Z_STRVAL_P(expr), Z_STRLEN_P(expr)); - ret = Z_STRLEN_P(expr); - if (use_copy) { - zval_dtor(expr); - } - return ret; + + STR_RELEASE(str); + return len; } /* }}} */ @@ -386,7 +375,7 @@ ZEND_API void zend_print_flat_zval_r(zval *expr TSRMLS_DC) /* {{{ */ break; } default: - zend_print_variable(expr); + zend_print_variable(expr TSRMLS_CC); break; } } @@ -447,7 +436,7 @@ ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int break; } default: - zend_print_zval_ex(write_func, expr, indent); + zend_print_zval_ex(write_func, expr, indent TSRMLS_CC); break; } } diff --git a/Zend/zend.h b/Zend/zend.h index c81c223a7f..3aae759dde 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -555,8 +555,8 @@ END_EXTERN_C() BEGIN_EXTERN_C() ZEND_API char *get_zend_version(void); ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy); -ZEND_API int zend_print_zval(zval *expr, int indent); -ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent); +ZEND_API int zend_print_zval(zval *expr, int indent TSRMLS_DC); +ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC); ZEND_API void zend_print_zval_r(zval *expr, int indent TSRMLS_DC); ZEND_API void zend_print_flat_zval_r(zval *expr TSRMLS_DC); ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC); diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 32fb706982..5557c7beea 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -270,16 +270,14 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) } -ZEND_API int zend_print_variable(zval *var) +ZEND_API int zend_print_variable(zval *var TSRMLS_DC) { - return zend_print_zval(var, 0); + return zend_print_zval(var, 0 TSRMLS_CC); } ZEND_API void _zval_dtor_wrapper(zval *zvalue) { - TSRMLS_FETCH(); - zval_dtor(zvalue); } diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index 686c57ecf2..b85ef435ca 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -64,7 +64,7 @@ static zend_always_inline void _zval_opt_copy_ctor(zval *zvalue ZEND_FILE_LINE_D ZEND_API int zval_copy_static_var(zval *p TSRMLS_DC, int num_args, va_list args, zend_hash_key *key); -ZEND_API int zend_print_variable(zval *var); +ZEND_API int zend_print_variable(zval *var TSRMLS_DC); ZEND_API void _zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC); ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC); ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 57dbac8a7f..232a7e34fc 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1064,7 +1064,7 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMP|VAR|CV, ANY) SAVE_OPLINE(); z = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); - zend_print_variable(z); + zend_print_variable(z TSRMLS_CC); FREE_OP1(); CHECK_EXCEPTION(); @@ -4636,7 +4636,7 @@ ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMP|VAR|UNUSED|CV, ANY) if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } FREE_OP1(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 5679b3d744..a8ecbf2ec2 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2337,7 +2337,7 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); z = opline->op1.zv; - zend_print_variable(z); + zend_print_variable(z TSRMLS_CC); CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -3135,7 +3135,7 @@ static int ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } } @@ -7298,7 +7298,7 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); z = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC); - zend_print_variable(z); + zend_print_variable(z TSRMLS_CC); zval_dtor(free_op1.var); CHECK_EXCEPTION(); @@ -8084,7 +8084,7 @@ static int ZEND_FASTCALL ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } zval_dtor(free_op1.var); } @@ -12167,7 +12167,7 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); z = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC); - zend_print_variable(z); + zend_print_variable(z TSRMLS_CC); zval_ptr_dtor_nogc(free_op1.var); CHECK_EXCEPTION(); @@ -13214,7 +13214,7 @@ static int ZEND_FASTCALL ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } zval_ptr_dtor_nogc(free_op1.var); } @@ -22983,7 +22983,7 @@ static int ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } } @@ -28696,7 +28696,7 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) SAVE_OPLINE(); z = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC); - zend_print_variable(z); + zend_print_variable(z TSRMLS_CC); CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -29576,7 +29576,7 @@ static int ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { - zend_print_variable(ptr); + zend_print_variable(ptr TSRMLS_CC); } } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 0ef31460bd..86391115d0 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1529,7 +1529,7 @@ ZEND_METHOD(reflection, export) ZVAL_COPY_VALUE(return_value, &retval); } else { /* No need for _r variant, return of __toString should always be a string */ - zend_print_zval(&retval, 0); + zend_print_zval(&retval, 0 TSRMLS_CC); zend_printf("\n"); zval_ptr_dtor(&retval); } diff --git a/sapi/phpdbg/phpdbg_info.c b/sapi/phpdbg/phpdbg_info.c index f7c7ab0846..5596255d6e 100644 --- a/sapi/phpdbg/phpdbg_info.c +++ b/sapi/phpdbg/phpdbg_info.c @@ -215,7 +215,7 @@ PHPDBG_INFO(literal) /* {{{ */ if (Z_TYPE(ops->literals[literal]) != IS_NULL) { phpdbg_write("|-------- C%u -------> [", literal); zend_print_zval( - &ops->literals[literal], 0); + &ops->literals[literal], 0 TSRMLS_CC); phpdbg_write("]"); phpdbg_writeln(EMPTY); } -- 2.50.1