cvs: ZendEngine2 / zend_compile.c zend_compile.h zend_execute.c
| From: | Zeev Suraski | Date: | Wed, 16 Jul 2003 08:57:09 +0000 |
| Subject: | cvs: ZendEngine2 / zend_compile.c zend_compile.h zend_execute.c | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-1476@lists.php.net to get a copy of this message | ||
zeev Wed Jul 16 04:57:09 2003 EDT
Modified files:
/ZendEngine2 zend_compile.c zend_compile.h zend_execute.c
Log:
More cleanup for assign-op handling of objects
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.436 ZendEngine2/zend_compile.c:1.437
--- ZendEngine2/zend_compile.c:1.436 Mon Jul 7 12:22:55 2003
+++ ZendEngine2/zend_compile.c Wed Jul 16 04:57:08 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_compile.c,v 1.436 2003/07/07 16:22:55 zeev Exp $ */
+/* $Id: zend_compile.c,v 1.437 2003/07/16 08:57:08 zeev Exp $ */
#include "zend_language_parser.h"
#include "zend.h"
@@ -238,43 +238,8 @@
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
if (last_op->opcode == ZEND_FETCH_OBJ_RW) {
- switch (op) {
- case ZEND_ASSIGN_ADD:
- last_op->opcode = ZEND_ASSIGN_ADD_OBJ;
- break;
- case ZEND_ASSIGN_SUB:
- last_op->opcode = ZEND_ASSIGN_SUB_OBJ;
- break;
- case ZEND_ASSIGN_MUL:
- last_op->opcode = ZEND_ASSIGN_MUL_OBJ;
- break;
- case ZEND_ASSIGN_DIV:
- last_op->opcode = ZEND_ASSIGN_DIV_OBJ;
- break;
- case ZEND_ASSIGN_MOD:
- last_op->opcode = ZEND_ASSIGN_MOD_OBJ;
- break;
- case ZEND_ASSIGN_SL:
- last_op->opcode = ZEND_ASSIGN_SL_OBJ;
- break;
- case ZEND_ASSIGN_SR:
- last_op->opcode = ZEND_ASSIGN_SR_OBJ;
- break;
- case ZEND_ASSIGN_CONCAT:
- last_op->opcode = ZEND_ASSIGN_CONCAT_OBJ;
- break;
- case ZEND_ASSIGN_BW_OR:
- last_op->opcode = ZEND_ASSIGN_BW_OR_OBJ;
- break;
- case ZEND_ASSIGN_BW_AND:
- last_op->opcode = ZEND_ASSIGN_BW_AND_OBJ;
- break;
- case ZEND_ASSIGN_BW_XOR:
- last_op->opcode = ZEND_ASSIGN_BW_XOR_OBJ;
- break;
- default:
- zend_error(E_COMPILE_ERROR, "Unknown binary op opcode %d", op);
- }
+ last_op->opcode = op;
+ last_op->extended_value = ZEND_ASSIGN_OBJ;
zend_do_op_data(opline, op2 TSRMLS_CC);
SET_UNUSED(opline->result);
Index: ZendEngine2/zend_compile.h
diff -u ZendEngine2/zend_compile.h:1.246 ZendEngine2/zend_compile.h:1.247
--- ZendEngine2/zend_compile.h:1.246 Mon Jul 7 12:22:56 2003
+++ ZendEngine2/zend_compile.h Wed Jul 16 04:57:08 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_compile.h,v 1.246 2003/07/07 16:22:56 zeev Exp $ */
+/* $Id: zend_compile.h,v 1.247 2003/07/16 08:57:08 zeev Exp $ */
#ifndef ZEND_COMPILE_H
#define ZEND_COMPILE_H
@@ -642,18 +642,6 @@
#define ZEND_IMPORT_FUNCTION 116
#define ZEND_IMPORT_CLASS 117
#define ZEND_IMPORT_CONST 118
-
-#define ZEND_ASSIGN_ADD_OBJ 121
-#define ZEND_ASSIGN_SUB_OBJ 122
-#define ZEND_ASSIGN_MUL_OBJ 123
-#define ZEND_ASSIGN_DIV_OBJ 124
-#define ZEND_ASSIGN_MOD_OBJ 125
-#define ZEND_ASSIGN_SL_OBJ 126
-#define ZEND_ASSIGN_SR_OBJ 127
-#define ZEND_ASSIGN_CONCAT_OBJ 128
-#define ZEND_ASSIGN_BW_OR_OBJ 129
-#define ZEND_ASSIGN_BW_AND_OBJ 130
-#define ZEND_ASSIGN_BW_XOR_OBJ 131
#define ZEND_PRE_INC_OBJ 132
#define ZEND_PRE_DEC_OBJ 133
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.491 ZendEngine2/zend_execute.c:1.492
--- ZendEngine2/zend_execute.c:1.491 Tue Jul 8 07:52:21 2003
+++ ZendEngine2/zend_execute.c Wed Jul 16 04:57:08 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute.c,v 1.491 2003/07/08 11:52:21 zeev Exp $ */
+/* $Id: zend_execute.c,v 1.492 2003/07/16 08:57:08 zeev Exp $ */
#define ZEND_INTENSIVE_DEBUGGING 0
@@ -1418,34 +1418,6 @@
}
-inline int zend_binary_assign_op_helper(void *binary_op_arg, ZEND_OPCODE_HANDLER_ARGS)
-{
- zval **var_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_RW);
- int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC) = binary_op_arg;
-
- if (!var_ptr) {
- zend_error(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string
offsets");
- }
-
- if (*var_ptr == EG(error_zval_ptr)) {
- EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
- SELECTIVE_PZVAL_LOCK(*EX_T(EX(opline)->result.u.var).var.ptr_ptr, &EX(opline)->result);
- AI_USE_PTR(EX_T(EX(opline)->result.u.var).var);
- NEXT_OPCODE();
- }
-
- SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
-
- binary_op(*var_ptr, *var_ptr, get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2),
BP_VAR_R) TSRMLS_CC);
- EX_T(EX(opline)->result.u.var).var.ptr_ptr = var_ptr;
- SELECTIVE_PZVAL_LOCK(*var_ptr, &EX(opline)->result);
- FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
- AI_USE_PTR(EX_T(EX(opline)->result.u.var).var);
-
- NEXT_OPCODE();
-}
-
-
static inline int zend_binary_assign_op_obj_helper(int (*binary_op)(zval *result, zval *op1, zval
*op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *op_data = EX(opline)+1;
@@ -1525,6 +1497,41 @@
}
+inline int zend_binary_assign_op_helper(void *binary_op_arg, ZEND_OPCODE_HANDLER_ARGS)
+{
+ zval **var_ptr;
+ int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
+
+ if (EX(opline)->extended_value == ZEND_ASSIGN_OBJ) {
+ return zend_binary_assign_op_obj_helper(binary_op_arg, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
+
+ var_ptr = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_RW);
+ binary_op = binary_op_arg;
+
+ if (!var_ptr) {
+ zend_error(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string
offsets");
+ }
+
+ if (*var_ptr == EG(error_zval_ptr)) {
+ EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
+ SELECTIVE_PZVAL_LOCK(*EX_T(EX(opline)->result.u.var).var.ptr_ptr, &EX(opline)->result);
+ AI_USE_PTR(EX_T(EX(opline)->result.u.var).var);
+ NEXT_OPCODE();
+ }
+
+ SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
+
+ binary_op(*var_ptr, *var_ptr, get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2),
BP_VAR_R) TSRMLS_CC);
+ EX_T(EX(opline)->result.u.var).var.ptr_ptr = var_ptr;
+ SELECTIVE_PZVAL_LOCK(*var_ptr, &EX(opline)->result);
+ FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
+ AI_USE_PTR(EX_T(EX(opline)->result.u.var).var);
+
+ NEXT_OPCODE();
+}
+
+
int zend_assign_add_handler(ZEND_OPCODE_HANDLER_ARGS)
{
return zend_binary_assign_op_helper(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -4205,18 +4212,6 @@
zend_opcode_handlers[ZEND_IMPORT_FUNCTION] = zend_import_function_handler;
zend_opcode_handlers[ZEND_IMPORT_CLASS] = zend_import_class_handler;
zend_opcode_handlers[ZEND_IMPORT_CONST] = zend_import_const_handler;
-
- zend_opcode_handlers[ZEND_ASSIGN_ADD_OBJ] = zend_assign_add_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_SUB_OBJ] = zend_assign_sub_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_MUL_OBJ] = zend_assign_mul_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_DIV_OBJ] = zend_assign_div_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_MOD_OBJ] = zend_assign_mod_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_SL_OBJ] = zend_assign_sl_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_SR_OBJ] = zend_assign_sr_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_CONCAT_OBJ] = zend_assign_concat_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_BW_OR_OBJ] = zend_assign_bw_or_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_BW_AND_OBJ] = zend_assign_bw_and_obj_handler;
- zend_opcode_handlers[ZEND_ASSIGN_BW_XOR_OBJ] = zend_assign_bw_xor_obj_handler;
zend_opcode_handlers[ZEND_PRE_INC_OBJ] = zend_pre_inc_obj_handler;
zend_opcode_handlers[ZEND_PRE_DEC_OBJ] = zend_pre_dec_obj_handler;