cvs: ZendEngine2 / zend_execute.c zend_vm_def.h zend_vm_execute.h

From: Date: Thu, 24 Apr 2008 15:46:28 +0000
Subject: cvs: ZendEngine2 / zend_execute.c zend_vm_def.h zend_vm_execute.h
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-6637@lists.php.net to get a copy of this message
dmitry Thu Apr 24 15:46:28 2008 UTC Modified files: /ZendEngine2 zend_execute.c zend_vm_def.h zend_vm_execute.h Log: Optimized handlers for ZEND_RECV and ZEND_RECV_INIT opocdes http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.792&r2=1.793&diff_format=u Index: ZendEngine2/zend_execute.c diff -u ZendEngine2/zend_execute.c:1.792 ZendEngine2/zend_execute.c:1.793 --- ZendEngine2/zend_execute.c:1.792 Sat Mar 8 11:49:24 2008 +++ ZendEngine2/zend_execute.c Thu Apr 24 15:46:28 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.792 2008/03/08 11:49:24 felipe Exp $ */ +/* $Id: zend_execute.c,v 1.793 2008/04/24 15:46:28 dmitry Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -814,14 +814,6 @@ } /* }}} */ -static inline void zend_receive(zval **variable_ptr_ptr, zval *value TSRMLS_DC) /* {{{ */ -{ - Z_DELREF_PP(variable_ptr_ptr); - *variable_ptr_ptr = value; - Z_ADDREF_P(value); -} -/* }}} */ - /* Utility Functions for Extensions */ static void zend_extension_statement_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC) /* {{{ */ { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.224&r2=1.225&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.224 ZendEngine2/zend_vm_def.h:1.225 --- ZendEngine2/zend_vm_def.h:1.224 Mon Apr 21 10:15:26 2008 +++ ZendEngine2/zend_vm_def.h Thu Apr 24 15:46:28 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.224 2008/04/21 10:15:26 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.225 2008/04/24 15:46:28 dmitry Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -2612,11 +2612,9 @@ zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param, opline->extended_value TSRMLS_CC); var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - if (PZVAL_IS_REF(*param)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, *param TSRMLS_CC); - } + Z_DELREF_PP(var_ptr); + *var_ptr = *param; + Z_ADDREF_PP(var_ptr); } ZEND_VM_NEXT_OPCODE(); @@ -2625,42 +2623,31 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST) { zend_op *opline = EX(opline); - zval *assignment_value, **var_ptr; + zval *assignment_value; zend_uint arg_num = Z_LVAL(opline->op1.u.constant); zend_free_op free_res; zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC); + zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);; if (param == NULL) { + ALLOC_ZVAL(assignment_value); + *assignment_value = opline->op2.u.constant; if ((Z_TYPE(opline->op2.u.constant) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT || Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval *default_value; - - ALLOC_ZVAL(default_value); - *default_value = opline->op2.u.constant; - Z_SET_REFCOUNT_P(default_value, 1); - zval_update_constant(&default_value, 0 TSRMLS_CC); - Z_SET_REFCOUNT_P(default_value, 0); - Z_UNSET_ISREF_P(default_value); - param = &default_value; - assignment_value = default_value; + Z_SET_REFCOUNT_P(assignment_value, 1); + zval_update_constant(&assignment_value, 0 TSRMLS_CC); } else { - param = NULL; - assignment_value = &opline->op2.u.constant; + zval_copy_ctor(assignment_value); } - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); - - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - zend_assign_to_variable(var_ptr, assignment_value, 0 TSRMLS_CC); + INIT_PZVAL(assignment_value); } else { - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); assignment_value = *param; - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); - if (PZVAL_IS_REF(assignment_value)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, assignment_value TSRMLS_CC); - } + Z_ADDREF_P(assignment_value); } + zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); + Z_DELREF_PP(var_ptr); + *var_ptr = assignment_value; + ZEND_VM_NEXT_OPCODE(); } http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.228&r2=1.229&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.228 ZendEngine2/zend_vm_execute.h:1.229 --- ZendEngine2/zend_vm_execute.h:1.228 Mon Apr 21 10:15:26 2008 +++ ZendEngine2/zend_vm_execute.h Thu Apr 24 15:46:28 2008 @@ -358,11 +358,9 @@ zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param, opline->extended_value TSRMLS_CC); var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - if (PZVAL_IS_REF(*param)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, *param TSRMLS_CC); - } + Z_DELREF_PP(var_ptr); + *var_ptr = *param; + Z_ADDREF_PP(var_ptr); } ZEND_VM_NEXT_OPCODE(); @@ -709,42 +707,31 @@ static int ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zval *assignment_value, **var_ptr; + zval *assignment_value; zend_uint arg_num = Z_LVAL(opline->op1.u.constant); zend_free_op free_res; zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC); + zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);; if (param == NULL) { + ALLOC_ZVAL(assignment_value); + *assignment_value = opline->op2.u.constant; if ((Z_TYPE(opline->op2.u.constant) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT || Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval *default_value; - - ALLOC_ZVAL(default_value); - *default_value = opline->op2.u.constant; - Z_SET_REFCOUNT_P(default_value, 1); - zval_update_constant(&default_value, 0 TSRMLS_CC); - Z_SET_REFCOUNT_P(default_value, 0); - Z_UNSET_ISREF_P(default_value); - param = &default_value; - assignment_value = default_value; - } else { - param = NULL; - assignment_value = &opline->op2.u.constant; + Z_SET_REFCOUNT_P(assignment_value, 1); + zval_update_constant(&assignment_value, 0 TSRMLS_CC); + } else { + zval_copy_ctor(assignment_value); } - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); - - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - zend_assign_to_variable(var_ptr, assignment_value, 0 TSRMLS_CC); + INIT_PZVAL(assignment_value); } else { - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); assignment_value = *param; - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); - if (PZVAL_IS_REF(assignment_value)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, assignment_value TSRMLS_CC); - } + Z_ADDREF_P(assignment_value); } + zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC); + Z_DELREF_PP(var_ptr); + *var_ptr = assignment_value; + ZEND_VM_NEXT_OPCODE(); }

« previous php.zend-engine.cvs (#6637) next »