dmitry                                   Wed, 24 Nov 2010 12:19:56 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=305716

Log:
Removed support for break/continue $var syntax

Changed paths:
    U   php/php-src/trunk/NEWS
    U   php/php-src/trunk/Zend/zend_compile.c
    U   php/php-src/trunk/Zend/zend_execute.c
    U   php/php-src/trunk/Zend/zend_vm_def.h
    U   php/php-src/trunk/Zend/zend_vm_execute.h

Modified: php/php-src/trunk/NEWS
===================================================================
--- php/php-src/trunk/NEWS	2010-11-24 11:56:24 UTC (rev 305715)
+++ php/php-src/trunk/NEWS	2010-11-24 12:19:56 UTC (rev 305716)
@@ -5,6 +5,7 @@
 - Upgraded bundled PCRE to version 8.10. (Ilia)

 - Removed legacy features:
+  . break/continue $var syntax. (Dmitry)
   . Safe mode and all related ini options. (Kalle)
   . register_globals and register_long_arrays ini options. (Kalle)
   . import_request_variables(). (Kalle)

Modified: php/php-src/trunk/Zend/zend_compile.c
===================================================================
--- php/php-src/trunk/Zend/zend_compile.c	2010-11-24 11:56:24 UTC (rev 305715)
+++ php/php-src/trunk/Zend/zend_compile.c	2010-11-24 12:19:56 UTC (rev 305716)
@@ -4302,6 +4302,11 @@
 	opline->op1.opline_num = CG(context).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");
+		}
 		SET_NODE(opline->op2, expr);
 	} else {
 		LITERAL_LONG(opline->op2, 1);

Modified: php/php-src/trunk/Zend/zend_execute.c
===================================================================
--- php/php-src/trunk/Zend/zend_execute.c	2010-11-24 11:56:24 UTC (rev 305715)
+++ php/php-src/trunk/Zend/zend_execute.c	2010-11-24 12:19:56 UTC (rev 305716)
@@ -1362,21 +1362,12 @@
 	}
 }

-static inline zend_brk_cont_element* zend_brk_cont(zval *nest_levels_zval, int array_offset, const zend_op_array *op_array, const temp_variable *Ts TSRMLS_DC)
+static inline zend_brk_cont_element* zend_brk_cont(int nest_levels, int array_offset, const zend_op_array *op_array, const temp_variable *Ts TSRMLS_DC)
 {
 	zval tmp;
-	int nest_levels, original_nest_levels;
+	int original_nest_levels = 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) {
 			zend_error_noreturn(E_ERROR, "Cannot break/continue %d level%s", original_nest_levels, (original_nest_levels == 1) ? "" : "s");

Modified: php/php-src/trunk/Zend/zend_vm_def.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_def.h	2010-11-24 11:56:24 UTC (rev 305715)
+++ php/php-src/trunk/Zend/zend_vm_def.h	2010-11-24 12:19:56 UTC (rev 305716)
@@ -3171,27 +3171,25 @@
 	ZEND_VM_NEXT_OPCODE();
 }

-ZEND_VM_HANDLER(50, ZEND_BRK, ANY, CONST|TMP|VAR|CV)
+ZEND_VM_HANDLER(50, ZEND_BRK, ANY, CONST)
 {
 	USE_OPLINE
-	zend_free_op free_op2;
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(GET_OP2_ZVAL_PTR(BP_VAR_R), opline->op1.opline_num,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.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)
 {
 	USE_OPLINE
-	zend_free_op free_op2;
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(GET_OP2_ZVAL_PTR(BP_VAR_R), opline->op1.opline_num,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
 	                   EX(op_array), EX_Ts() TSRMLS_CC);
 	FREE_OP2();
 	ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
@@ -3204,7 +3202,7 @@
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(opline->op2.zv, opline->extended_value,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->extended_value,
  	                   EX(op_array), EX_Ts() TSRMLS_CC);

 	brk_opline = EX(op_array)->opcodes + el->brk;

Modified: php/php-src/trunk/Zend/zend_vm_execute.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_execute.h	2010-11-24 11:56:24 UTC (rev 305715)
+++ php/php-src/trunk/Zend/zend_vm_execute.h	2010-11-24 12:19:56 UTC (rev 305716)
@@ -1304,11 +1304,10 @@
 static int ZEND_FASTCALL  ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
 	USE_OPLINE
-
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(opline->op2.zv, opline->op1.opline_num,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
 	                   EX(op_array), EX_Ts() TSRMLS_CC);

 	ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
@@ -1317,11 +1316,10 @@
 static int ZEND_FASTCALL  ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
 	USE_OPLINE
-
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(opline->op2.zv, opline->op1.opline_num,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
 	                   EX(op_array), EX_Ts() TSRMLS_CC);

 	ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
@@ -1334,7 +1332,7 @@
 	zend_brk_cont_element *el;

 	SAVE_OPLINE();
-	el = zend_brk_cont(opline->op2.zv, opline->extended_value,
+	el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->extended_value,
  	                   EX(op_array), EX_Ts() TSRMLS_CC);

 	brk_opline = EX(op_array)->opcodes + el->brk;
@@ -1477,32 +1475,6 @@
 }


-static int ZEND_FASTCALL  ZEND_BRK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-	zend_free_op free_op2;
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), opline->op1.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_FASTCALL  ZEND_CONT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-	zend_free_op free_op2;
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), opline->op1.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_FASTCALL  ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
 	USE_OPLINE
@@ -1599,32 +1571,6 @@
 }


-static int ZEND_FASTCALL  ZEND_BRK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-	zend_free_op free_op2;
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), opline->op1.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_FASTCALL  ZEND_CONT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-	zend_free_op free_op2;
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), opline->op1.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_FASTCALL  ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
 	USE_OPLINE
@@ -1754,32 +1700,6 @@
 }


-static int ZEND_FASTCALL  ZEND_BRK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), opline->op1.opline_num,
-	                   EX(op_array), EX_Ts() TSRMLS_CC);
-
-	ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
-}
-
-static int ZEND_FASTCALL  ZEND_CONT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-	USE_OPLINE
-
-	zend_brk_cont_element *el;
-
-	SAVE_OPLINE();
-	el = zend_brk_cont(_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), opline->op1.opline_num,
-	                   EX(op_array), EX_Ts() TSRMLS_CC);
-
-	ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
-}
-
 static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
 	USE_OPLINE
@@ -36791,55 +36711,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,
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to