SAVE_OPLINE();
ret = zend_user_opcode_handlers[opline->opcode](execute_data);
- LOAD_OPLINE();
+
+ if (EG(exception)) {
+ HANDLE_EXCEPTION();
+ }
switch (ret) {
case ZEND_USER_OPCODE_CONTINUE:
+ LOAD_OPLINE();
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
case ZEND_USER_OPCODE_LEAVE:
ZEND_VM_LEAVE();
case ZEND_USER_OPCODE_DISPATCH:
+ ZEND_ASSERT(EX(opline) == opline);
ZEND_VM_DISPATCH(opline->opcode, opline);
default:
+ ZEND_ASSERT(EX(opline) == opline);
ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
}
}
SAVE_OPLINE();
ret = zend_user_opcode_handlers[opline->opcode](execute_data);
- LOAD_OPLINE();
+
+ if (EG(exception)) {
+ HANDLE_EXCEPTION();
+ }
switch (ret) {
case ZEND_USER_OPCODE_CONTINUE:
+ LOAD_OPLINE();
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
case ZEND_USER_OPCODE_LEAVE:
ZEND_VM_LEAVE();
case ZEND_USER_OPCODE_DISPATCH:
+ ZEND_ASSERT(EX(opline) == opline);
ZEND_VM_DISPATCH(opline->opcode, opline);
default:
+ ZEND_ASSERT(EX(opline) == opline);
ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
}
}