cvs: ZendEngine2 / zend_compile.c zend_execute.c zend_vm_def.h zend_vm_execute.h php-src NEWS

From: Date: Thu, 17 Nov 2005 08:27:28 +0000
Subject: cvs: ZendEngine2 / zend_compile.c zend_execute.c zend_vm_def.h zend_vm_execute.h php-src NEWS
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-4353@lists.php.net to get a copy of this message
dmitry Thu Nov 17 03:27:28 2005 EDT Modified files: /php-src NEWS /ZendEngine2 zend_compile.c zend_execute.c zend_vm_def.h zend_vm_execute.h Log: Removed support for continue and break operators with non-constant operands

http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2076&r2=1.2077&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.2076 php-src/NEWS:1.2077 --- php-src/NEWS:1.2076 Tue Nov 15 11:50:32 2005 +++ php-src/NEWS Thu Nov 17 03:27:17 2005 @@ -2,6 +2,8 @@ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 6.0 - Unicode support. (Andrei, Dmitry, et al) +- Removed support for continue and break operators with non-constant operands. + (Dmitry) - Changed __toString() behavior to call it in all necessary places (Marcus, Dmitry) - Changed "instanceof" and "catch" operators, is_a() and is_subclass_of() http://cvs.php.net/diff.php/ZendEngine2/zend_compile.c?r1=1.671&r2=1.672&ty=u Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.671 ZendEngine2/zend_compile.c:1.672 --- ZendEngine2/zend_compile.c:1.671 Tue Nov 15 11:50:07 2005 +++ ZendEngine2/zend_compile.c Thu Nov 17 03:27:20 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.671 2005/11/15 16:50:07 dmitry Exp $ */ +/* $Id: zend_compile.c,v 1.672 2005/11/17 08:27:20 dmitry Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -2636,6 +2636,11 @@ opline->op1.u.opline_num = CG(active_op_array)->current_brk_cont; SET_UNUSED(opline->op1); if (expr) { + if (expr->op_type != IS_CONST) { + zend_error(E_COMPILE_ERROR, "'%s' operator with non-constant operand is no longer supported", op == ZEND_BRK ? "break" : "continue"); + } else if (Z_TYPE(expr->u.constant) != IS_LONG || Z_LVAL(expr->u.constant) < 1) { + zend_error(E_COMPILE_ERROR, "'%s' operator accepts only positive numbers", op == ZEND_BRK ? "break" : "continue"); + } opline->op2 = *expr; } else { opline->op2.u.constant.type = IS_LONG; http://cvs.php.net/diff.php/ZendEngine2/zend_execute.c?r1=1.725&r2=1.726&ty=u Index: ZendEngine2/zend_execute.c diff -u ZendEngine2/zend_execute.c:1.725 ZendEngine2/zend_execute.c:1.726 --- ZendEngine2/zend_execute.c:1.725 Wed Nov 16 06:52:53 2005 +++ ZendEngine2/zend_execute.c Thu Nov 17 03:27:22 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.725 2005/11/16 11:52:53 dmitry Exp $ */ +/* $Id: zend_execute.c,v 1.726 2005/11/17 08:27:22 dmitry Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -1386,20 +1386,11 @@ } } -static inline zend_brk_cont_element* zend_brk_cont(zval *nest_levels_zval, int array_offset, zend_op_array *op_array, temp_variable *Ts TSRMLS_DC) +static inline zend_brk_cont_element* zend_brk_cont(int nest_levels, int array_offset, zend_op_array *op_array, temp_variable *Ts TSRMLS_DC) { - zval tmp; - int nest_levels, original_nest_levels; + int original_nest_levels; zend_brk_cont_element *jmp_to; - if (nest_levels_zval->type != IS_LONG) { - tmp = *nest_levels_zval; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - nest_levels = tmp.value.lval; - } else { - nest_levels = nest_levels_zval->value.lval; - } original_nest_levels = nest_levels; do { if (array_offset==-1) { http://cvs.php.net/diff.php/ZendEngine2/zend_vm_def.h?r1=1.86&r2=1.87&ty=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.86 ZendEngine2/zend_vm_def.h:1.87 --- ZendEngine2/zend_vm_def.h:1.86 Mon Oct 31 14:29:45 2005 +++ ZendEngine2/zend_vm_def.h Thu Nov 17 03:27:25 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.86 2005/10/31 19:29:45 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.87 2005/11/17 08:27:25 dmitry Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -2362,27 +2362,23 @@ ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(50, ZEND_BRK, ANY, CONST|TMP|VAR|CV) +ZEND_VM_HANDLER(50, ZEND_BRK, ANY, CONST) { zend_op *opline = EX(opline); - zend_free_op free_op2; zend_brk_cont_element *el; - el = zend_brk_cont(GET_OP2_ZVAL_PTR(BP_VAR_R), opline->op1.u.opline_num, + el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, EX(op_array), EX(Ts) TSRMLS_CC); - FREE_OP2(); ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); } -ZEND_VM_HANDLER(51, ZEND_CONT, ANY, CONST|TMP|VAR|CV) +ZEND_VM_HANDLER(51, ZEND_CONT, ANY, CONST) { zend_op *opline = EX(opline); - zend_free_op free_op2; zend_brk_cont_element *el; - el = zend_brk_cont(GET_OP2_ZVAL_PTR(BP_VAR_R), opline->op1.u.opline_num, + el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, EX(op_array), EX(Ts) TSRMLS_CC); - FREE_OP2(); ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); } http://cvs.php.net/diff.php/ZendEngine2/zend_vm_execute.h?r1=1.89&r2=1.90&ty=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.89 ZendEngine2/zend_vm_execute.h:1.90 --- ZendEngine2/zend_vm_execute.h:1.89 Mon Oct 31 14:29:46 2005 +++ ZendEngine2/zend_vm_execute.h Thu Nov 17 03:27:25 2005 @@ -771,24 +771,20 @@ static int ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_brk_cont_element *el; - el = zend_brk_cont(&opline->op2.u.constant, opline->op1.u.opline_num, + el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); } static int ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_brk_cont_element *el; - el = zend_brk_cont(&opline->op2.u.constant, opline->op1.u.opline_num, + el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); } @@ -916,30 +912,6 @@ } -static int ZEND_BRK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - zval_dtor(free_op2.var); - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); -} - -static int ZEND_CONT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - zval_dtor(free_op2.var); - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); -} - static int ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); @@ -1064,30 +1036,6 @@ } -static int ZEND_BRK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); -} - -static int ZEND_CONT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); -} - static int ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); @@ -1292,30 +1240,6 @@ } -static int ZEND_BRK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); -} - -static int ZEND_CONT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zend_brk_cont_element *el; - - el = zend_brk_cont(_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); -} - static int ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); @@ -28239,55 +28163,55 @@ ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_BRK_SPEC_TMP_HANDLER, - ZEND_BRK_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_BRK_SPEC_TMP_HANDLER, - ZEND_BRK_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_BRK_SPEC_TMP_HANDLER, - ZEND_BRK_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_BRK_SPEC_TMP_HANDLER, - ZEND_BRK_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_BRK_SPEC_TMP_HANDLER, - ZEND_BRK_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_CONT_SPEC_TMP_HANDLER, - ZEND_CONT_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_CONT_SPEC_TMP_HANDLER, - ZEND_CONT_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_CONT_SPEC_TMP_HANDLER, - ZEND_CONT_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_CONT_SPEC_TMP_HANDLER, - ZEND_CONT_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_CONT_SPEC_TMP_HANDLER, - ZEND_CONT_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, ZEND_BOOL_SPEC_CONST_HANDLER, ZEND_BOOL_SPEC_CONST_HANDLER, ZEND_BOOL_SPEC_CONST_HANDLER,
« previous php.zend-engine.cvs (#4353) next »