#define ZEND_VM_INC_OPCODE() \
OPLINE++
+#define ZEND_VM_REPEATABLE_OPCODE \
+ do {
+
+#define ZEND_VM_REPEAT_OPCODE(_opcode) \
+ } while (UNEXPECTED(OPLINE->opcode == _opcode))
+
#ifdef __GNUC__
# define ZEND_VM_GUARD(name) __asm__("#" #name)
#else
ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
{
USE_OPLINE
- uint32_t arg_num = opline->op1.num;
+ uint32_t arg_num;
zval *param;
+ ZEND_VM_REPEATABLE_OPCODE
+
+ arg_num = opline->op1.num;
param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
if (arg_num > EX_NUM_ARGS()) {
ZVAL_COPY_VALUE(param, EX_CONSTANT(opline->op2));
}
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_INC_OPCODE();
+ ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
+ ZEND_VM_CONTINUE();
}
ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
zval *variable_ptr;
uint32_t idx;
+ ZEND_VM_REPEATABLE_OPCODE
+
varname = GET_OP2_ZVAL_PTR(BP_VAR_R);
/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
ZVAL_REF(variable_ptr, ref);
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_INC_OPCODE();
+ ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
+ ZEND_VM_CONTINUE();
}
ZEND_VM_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY)
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- uint32_t arg_num = opline->op1.num;
+ uint32_t arg_num;
zval *param;
+ ZEND_VM_REPEATABLE_OPCODE
+
+ arg_num = opline->op1.num;
param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
if (arg_num > EX_NUM_ARGS()) {
ZVAL_COPY_VALUE(param, EX_CONSTANT(opline->op2));
}
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_INC_OPCODE();
+ ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
+ ZEND_VM_CONTINUE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
zval *variable_ptr;
uint32_t idx;
+ ZEND_VM_REPEATABLE_OPCODE
+
varname = EX_CONSTANT(opline->op2);
/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
ZVAL_REF(variable_ptr, ref);
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_INC_OPCODE();
+ ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
+ ZEND_VM_CONTINUE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)