EX(opline)++; \
}
-#define ZEND_VM_RETURN_FROM_EXECUTE_LOOP() \
+#define ZEND_VM_EXIT_FROM_EXECUTE_LOOP() \
free_alloca(EX(CVs)); \
if (EX(op_array)->T < TEMP_VAR_STACK_LIMIT) { \
free_alloca(EX(Ts)); \
} \
EG(in_execution) = EX(original_in_execution); \
EG(current_execute_data) = EX(prev_execute_data); \
- EG(opline_ptr) = NULL; \
+ EG(opline_ptr) = NULL;
+
+#define ZEND_VM_RETURN_FROM_EXECUTE_LOOP() \
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP(); \
ZEND_VM_RETURN()
#include "zend_vm_execute.h"
FREE_OP1();
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}
case ZEND_USER_OPCODE_CONTINUE:
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
- ZEND_VM_RETURN();
+ ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
case ZEND_USER_OPCODE_DISPATCH:
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
default:
case ZEND_USER_OPCODE_CONTINUE:
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
- ZEND_VM_RETURN();
+ ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
case ZEND_USER_OPCODE_DISPATCH:
ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
default:
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}
zval_dtor(free_op1.var);
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}
}
#endif
+ ZEND_VM_EXIT_FROM_EXECUTE_LOOP();
zend_bailout();
ZEND_VM_NEXT_OPCODE();
}