From: Marcus Boerger Date: Sun, 17 Aug 2003 12:17:34 +0000 (+0000) Subject: Implement a TBD: JMP to the end of foreach X-Git-Tag: RELEASE_0_7~613 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9c68f33b515630e5d70fc2d4b178cea134103021;p=php Implement a TBD: JMP to the end of foreach --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7c1d495fa7..b66137e884 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2974,7 +2974,7 @@ void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brack zend_stack_push(&CG(foreach_copy_stack), (void *) &opline->result, sizeof(znode)); /* save the location of the beginning of the loop (array fetching) */ - foreach_token->u.opline_num = get_next_op_number(CG(active_op_array)); + opline->op2.u.opline_num = foreach_token->u.opline_num = get_next_op_number(CG(active_op_array)); opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_FE_FETCH; diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 80f064e968..0b46c0dfcd 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3508,16 +3508,22 @@ int zend_fe_reset_handler(ZEND_OPCODE_HANDLER_ARGS) array_ptr->refcount++; } } - PZVAL_LOCK(array_ptr); - EX_T(EX(opline)->result.u.var).var.ptr = array_ptr; - EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EX_T(EX(opline)->result.u.var).var.ptr; if ((fe_ht = HASH_OF(array_ptr)) != NULL) { /* probably redundant */ zend_hash_internal_pointer_reset(fe_ht); } else { - /* JMP to the end of foreach - TBD */ + zend_error(E_WARNING, "Invalid argument supplied for foreach()"); + + EX(opline) = op_array->opcodes+EX(opline)->op1.u.opline_num; + EX(opline) = op_array->opcodes+EX(opline)->op2.u.opline_num; + return 0; } + + PZVAL_LOCK(array_ptr); + EX_T(EX(opline)->result.u.var).var.ptr = array_ptr; + EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EX_T(EX(opline)->result.u.var).var.ptr; + NEXT_OPCODE(); }