com php-src: Make ZEND_CLONE return a TMP_VAR: Ze nd/zend_compile.c Zend/zend_vm_def.h Zend/zend_ vm_execute.h
| From: | Nikita Popov | Date: | Thu, 10 Dec 2015 21:16:25 +0000 |
| Subject: | com php-src: Make ZEND_CLONE return a TMP_VAR: Ze nd/zend_compile.c Zend/zend_vm_def.h Zend/zend_ vm_execute.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-90215@lists.php.net to get a copy of this message | ||
Commit: 8e5e3301a1b9f685452f8709411674f3812b2a2d
Author: Nikita Popov <nikic@php.net> Thu, 10 Dec 2015 22:14:39 +0100
Parents: f30381ec226ead3a8408b250c66b613bfa73984c
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=8e5e3301a1b9f685452f8709411674f3812b2a2d
Log:
Make ZEND_CLONE return a TMP_VAR
As the return value can't be reference and it's unlikely to be
unused.
Also remove some unnecessary checks for ce==NULL. A ce is required
nowadays.
Changed paths:
M Zend/zend_compile.c
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 53c62ab..2e50271 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3621,7 +3621,7 @@ void zend_compile_clone(znode *result, zend_ast *ast) /* {{{ */
znode obj_node;
zend_compile_expr(&obj_node, obj_ast);
- zend_emit_op(result, ZEND_CLONE, &obj_node, NULL);
+ zend_emit_op_tmp(result, ZEND_CLONE, &obj_node, NULL);
}
/* }}} */
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 0fc70a3..6b75a37 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -5077,19 +5077,15 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY)
} while (0);
ce = Z_OBJCE_P(obj);
- clone = ce ? ce->clone : NULL;
- clone_call = Z_OBJ_HT_P(obj)->clone_obj;
+ clone = ce->clone;
+ clone_call = Z_OBJ_HT_P(obj)->clone_obj;
if (UNEXPECTED(clone_call == NULL)) {
- if (ce) {
- zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
- } else {
- zend_throw_error(NULL, "Trying to clone an uncloneable object");
- }
+ zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
FREE_OP1();
HANDLE_EXCEPTION();
}
- if (ce && clone) {
+ if (clone) {
if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
/* Ensure that if we're calling a private function, we're allowed to do so.
*/
@@ -5109,12 +5105,11 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY)
}
}
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result..var), clone_call(obj));
- if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
- OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
}
+
FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4742401..88e1028 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -3441,19 +3441,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
} while (0);
ce = Z_OBJCE_P(obj);
- clone = ce ? ce->clone : NULL;
- clone_call = Z_OBJ_HT_P(obj)->clone_obj;
+ clone = ce->clone;
+ clone_call = Z_OBJ_HT_P(obj)->clone_obj;
if (UNEXPECTED(clone_call == NULL)) {
- if (ce) {
- zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
- } else {
- zend_throw_error(NULL, "Trying to clone an uncloneable object");
- }
+ zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
HANDLE_EXCEPTION();
}
- if (ce && clone) {
+ if (clone) {
if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
/* Ensure that if we're calling a private function, we're allowed to do so.
*/
@@ -3473,11 +3469,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
}
}
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
- if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
- OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -22735,19 +22729,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
} while (0);
ce = Z_OBJCE_P(obj);
- clone = ce ? ce->clone : NULL;
- clone_call = Z_OBJ_HT_P(obj)->clone_obj;
+ clone = ce->clone;
+ clone_call = Z_OBJ_HT_P(obj)->clone_obj;
if (UNEXPECTED(clone_call == NULL)) {
- if (ce) {
- zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
- } else {
- zend_throw_error(NULL, "Trying to clone an uncloneable object");
- }
+ zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
HANDLE_EXCEPTION();
}
- if (ce && clone) {
+ if (clone) {
if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
/* Ensure that if we're calling a private function, we're allowed to do so.
*/
@@ -22767,11 +22757,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
}
}
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
- if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
- OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -29496,19 +29484,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
} while (0);
ce = Z_OBJCE_P(obj);
- clone = ce ? ce->clone : NULL;
- clone_call = Z_OBJ_HT_P(obj)->clone_obj;
+ clone = ce->clone;
+ clone_call = Z_OBJ_HT_P(obj)->clone_obj;
if (UNEXPECTED(clone_call == NULL)) {
- if (ce) {
- zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
- } else {
- zend_throw_error(NULL, "Trying to clone an uncloneable object");
- }
+ zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
HANDLE_EXCEPTION();
}
- if (ce && clone) {
+ if (clone) {
if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
/* Ensure that if we're calling a private function, we're allowed to do so.
*/
@@ -29528,11 +29512,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
}
}
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
- if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
- OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -41061,19 +41043,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
} while (0);
ce = Z_OBJCE_P(obj);
- clone = ce ? ce->clone : NULL;
- clone_call = Z_OBJ_HT_P(obj)->clone_obj;
+ clone = ce->clone;
+ clone_call = Z_OBJ_HT_P(obj)->clone_obj;
if (UNEXPECTED(clone_call == NULL)) {
- if (ce) {
- zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
- } else {
- zend_throw_error(NULL, "Trying to clone an uncloneable object");
- }
+ zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s",
ZSTR_VAL(ce->name));
zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
- if (ce && clone) {
+ if (clone) {
if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
/* Ensure that if we're calling a private function, we're allowed to do so.
*/
@@ -41093,12 +41071,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
}
}
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
- if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
- OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
}
+
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}