while (1) {
if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
/* reached end of iteration */
- ZEND_VM_C_GOTO(fe_fetch_r_exit);
+ZEND_VM_C_LABEL(fe_fetch_r_exit):
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
+ } else {
zend_object_iterator *iter;
+ ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
if ((iter = zend_iterator_unwrap(array)) == NULL) {
/* plain object */
}
value_type = Z_TYPE_INFO_P(value);
}
- } else {
- zend_error(E_WARNING, "Invalid argument supplied for foreach()");
- if (UNEXPECTED(EG(exception))) {
- UNDEF_RESULT();
- HANDLE_EXCEPTION();
- }
-ZEND_VM_C_LABEL(fe_fetch_r_exit):
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
}
if (EXPECTED(OP2_TYPE == IS_CV)) {
while (1) {
if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
/* reached end of iteration */
- goto fe_fetch_r_exit;
+fe_fetch_r_exit:
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
+ } else {
zend_object_iterator *iter;
+ ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
if ((iter = zend_iterator_unwrap(array)) == NULL) {
/* plain object */
}
value_type = Z_TYPE_INFO_P(value);
}
- } else {
- zend_error(E_WARNING, "Invalid argument supplied for foreach()");
- if (UNEXPECTED(EG(exception))) {
- UNDEF_RESULT();
- HANDLE_EXCEPTION();
- }
-fe_fetch_r_exit:
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
}
if (EXPECTED(opline->op2_type == IS_CV)) {