}
/* }}} */
+#ifdef ZEND_WIN32
+# define ZEND_VM_INTERRUPT_CHECK() do { \
+ if (EG(timed_out)) { \
+ zend_timeout(0); \
+ } \
+ } while (0)
+#else
+# define ZEND_VM_INTERRUPT_CHECK() do { \
+ } while (0)
+#endif
+
/*
* Stack Frame Layout (the whole stack frame is allocated at once)
* ==================
EX_LOAD_LITERALS(op_array);
EG(current_execute_data) = execute_data;
+ ZEND_VM_INTERRUPT_CHECK();
}
/* }}} */
EX_LOAD_LITERALS(op_array);
EG(current_execute_data) = execute_data;
+ ZEND_VM_INTERRUPT_CHECK();
}
/* }}} */
EX_LOAD_LITERALS(op_array);
EG(current_execute_data) = execute_data;
+ ZEND_VM_INTERRUPT_CHECK();
}
/* }}} */
ZEND_VM_INC_OPCODE(); \
ZEND_VM_CONTINUE()
-#define ZEND_VM_SET_OPCODE(new_op) \
+#define ZEND_VM_SET_NEXT_OPCODE(new_op) \
CHECK_SYMBOL_TABLES() \
OPLINE = new_op
+#define ZEND_VM_SET_OPCODE(new_op) \
+ CHECK_SYMBOL_TABLES() \
+ OPLINE = new_op; \
+ ZEND_VM_INTERRUPT_CHECK()
+
#define ZEND_VM_SET_RELATIVE_OPCODE(opline, offset) \
ZEND_VM_SET_OPCODE(ZEND_OFFSET_TO_OPLINE(opline, offset))
val = GET_OP1_ZVAL_PTR(BP_VAR_R);
if (Z_TYPE_P(val) == IS_TRUE) {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
if (OP1_TYPE == IS_CV) {
if (OP1_TYPE == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
if (Z_TYPE_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
if (OP1_TYPE == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
}
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
uint32_t catch_op_num = 0, finally_op_num = 0, finally_op_end = 0;
int in_finally = 0;
+ ZEND_VM_INTERRUPT_CHECK();
for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
if (EX(func)->op_array.try_catch_array[i].try_op > op_num) {
/* further blocks will not be relevant... */
while (1) {
int ret;
-#ifdef ZEND_WIN32
- if (EG(timed_out)) {
- zend_timeout(0);
- }
-#endif
-
if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
#ifdef ZEND_VM_FP_GLOBAL_REG
execute_data = orig_execute_data;
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
}
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
HANDLE_EXCEPTION();
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
uint32_t catch_op_num = 0, finally_op_num = 0, finally_op_end = 0;
int in_finally = 0;
+ ZEND_VM_INTERRUPT_CHECK();
for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
if (EX(func)->op_array.try_catch_array[i].try_op > op_num) {
/* further blocks will not be relevant... */
val = EX_CONSTANT(opline->op1);
if (Z_TYPE_P(val) == IS_TRUE) {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
if (IS_CONST == IS_CV) {
if (IS_CONST == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
if (Z_TYPE_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
if (IS_CONST == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
if (Z_TYPE_P(val) == IS_TRUE) {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
if (IS_CV == IS_CV) {
if (IS_CV == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
if (Z_TYPE_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
if (IS_CV == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}
val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if (Z_TYPE_P(val) == IS_TRUE) {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
if (Z_TYPE_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
} else if (EXPECTED(Z_TYPE_P(val) <= IS_TRUE)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
ZEND_VM_NEXT_OPCODE();
} else {
- ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
}
+ ZEND_VM_INTERRUPT_CHECK();
ZEND_VM_NEXT_OPCODE();
}