mirror of
https://github.com/php/php-src.git
synced 2026-03-26 01:02:25 +01:00
Remove ZEND_BRK/ZEND_CONT from VM
These are no longer used at run-time now, only temporarily during compilation.
This commit is contained in:
@@ -949,6 +949,11 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf,
|
||||
#define ZEND_ARRAY_NOT_PACKED (1<<1)
|
||||
#define ZEND_ARRAY_SIZE_SHIFT 2
|
||||
|
||||
/* Pseudo-opcodes that are used only temporarily during compilation */
|
||||
#define ZEND_BRK 254
|
||||
#define ZEND_CONT 255
|
||||
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
#define ZEND_CLONE_FUNC_NAME "__clone"
|
||||
|
||||
@@ -4816,28 +4816,6 @@ ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(50, ZEND_BRK, ANY, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_brk_cont_element *el;
|
||||
|
||||
SAVE_OPLINE();
|
||||
el = zend_brk_cont(opline->op2.num, opline->op1.num,
|
||||
&EX(func)->op_array, execute_data);
|
||||
ZEND_VM_JMP(EX(func)->op_array.opcodes + el->brk);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(51, ZEND_CONT, ANY, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_brk_cont_element *el;
|
||||
|
||||
SAVE_OPLINE();
|
||||
el = zend_brk_cont(opline->op2.num, opline->op1.num,
|
||||
&EX(func)->op_array, execute_data);
|
||||
ZEND_VM_JMP(EX(func)->op_array.opcodes + el->cont);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(100, ZEND_GOTO, ANY, CONST)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
@@ -1248,28 +1248,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEN
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BRK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_brk_cont_element *el;
|
||||
|
||||
SAVE_OPLINE();
|
||||
el = zend_brk_cont(opline->op2.num, opline->op1.num,
|
||||
&EX(func)->op_array, execute_data);
|
||||
ZEND_VM_JMP(EX(func)->op_array.opcodes + el->brk);
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_brk_cont_element *el;
|
||||
|
||||
SAVE_OPLINE();
|
||||
el = zend_brk_cont(opline->op2.num, opline->op1.num,
|
||||
&EX(func)->op_array, execute_data);
|
||||
ZEND_VM_JMP(EX(func)->op_array.opcodes + el->cont);
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
@@ -46678,56 +46656,56 @@ void zend_init_opcodes_handlers(void)
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_BRK_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_CONT_SPEC_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_BOOL_SPEC_CONST_HANDLER,
|
||||
ZEND_BOOL_SPEC_CONST_HANDLER,
|
||||
ZEND_BOOL_SPEC_CONST_HANDLER,
|
||||
|
||||
@@ -72,8 +72,8 @@ const char *zend_vm_opcodes_map[173] = {
|
||||
"ZEND_JMPNZ_EX",
|
||||
"ZEND_CASE",
|
||||
NULL,
|
||||
"ZEND_BRK",
|
||||
"ZEND_CONT",
|
||||
NULL,
|
||||
NULL,
|
||||
"ZEND_BOOL",
|
||||
"ZEND_FAST_CONCAT",
|
||||
"ZEND_ROPE_INIT",
|
||||
|
||||
@@ -82,8 +82,6 @@ END_EXTERN_C()
|
||||
#define ZEND_JMPZ_EX 46
|
||||
#define ZEND_JMPNZ_EX 47
|
||||
#define ZEND_CASE 48
|
||||
#define ZEND_BRK 50
|
||||
#define ZEND_CONT 51
|
||||
#define ZEND_BOOL 52
|
||||
#define ZEND_FAST_CONCAT 53
|
||||
#define ZEND_ROPE_INIT 54
|
||||
|
||||
@@ -123,12 +123,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg, zend_optimiz
|
||||
blocks[0].start_opline_no = 0;
|
||||
while (opline < end) {
|
||||
switch((unsigned)opline->opcode) {
|
||||
case ZEND_BRK:
|
||||
case ZEND_CONT:
|
||||
case ZEND_GOTO:
|
||||
/* would not optimize non-optimized BRK/CONTs - we cannot
|
||||
really know where it jumps, so these optimizations are
|
||||
too dangerous */
|
||||
/* would not optimize GOTOs - we cannot really know where it jumps,
|
||||
* so these optimizations are too dangerous */
|
||||
return 0;
|
||||
case ZEND_FAST_CALL:
|
||||
START_BLOCK_OP(ZEND_OP1(opline).opline_num);
|
||||
|
||||
@@ -613,8 +613,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
|
||||
case ZEND_EXIT:
|
||||
case ZEND_THROW:
|
||||
case ZEND_CATCH:
|
||||
case ZEND_BRK:
|
||||
case ZEND_CONT:
|
||||
case ZEND_GOTO:
|
||||
case ZEND_FAST_CALL:
|
||||
case ZEND_FAST_RET:
|
||||
|
||||
@@ -181,53 +181,6 @@ void zend_optimizer_pass2(zend_op_array *op_array)
|
||||
opline->opcode = ZEND_JMP;
|
||||
}
|
||||
break;
|
||||
|
||||
case ZEND_BRK:
|
||||
case ZEND_CONT:
|
||||
{
|
||||
zend_brk_cont_element *jmp_to;
|
||||
int array_offset = ZEND_OP1(opline).num;
|
||||
int nest_levels = ZEND_OP2(opline).num;
|
||||
int dont_optimize = 0;
|
||||
|
||||
while (1) {
|
||||
if (array_offset == -1) {
|
||||
dont_optimize = 1; /* don't optimize this bogus break/continue, let the executor shout */
|
||||
break;
|
||||
}
|
||||
jmp_to = &op_array->brk_cont_array[array_offset];
|
||||
array_offset = jmp_to->parent;
|
||||
if (--nest_levels > 0) {
|
||||
if (op_array->opcodes[jmp_to->brk].opcode == ZEND_FREE ||
|
||||
op_array->opcodes[jmp_to->brk].opcode == ZEND_FE_FREE ||
|
||||
op_array->opcodes[jmp_to->brk].opcode == ZEND_END_SILENCE) {
|
||||
dont_optimize = 1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dont_optimize) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* optimize - convert to a JMP */
|
||||
switch (opline->opcode) {
|
||||
case ZEND_BRK:
|
||||
MAKE_NOP(opline);
|
||||
ZEND_OP1(opline).opline_num = jmp_to->brk;
|
||||
break;
|
||||
case ZEND_CONT:
|
||||
MAKE_NOP(opline);
|
||||
ZEND_OP1(opline).opline_num = jmp_to->cont;
|
||||
break;
|
||||
}
|
||||
opline->opcode = ZEND_JMP;
|
||||
/* MAKE_NOP() already set op1 and op2 to IS_UNUSED */
|
||||
}
|
||||
break;
|
||||
}
|
||||
opline++;
|
||||
}
|
||||
|
||||
@@ -322,8 +322,6 @@ continue_jmp_ex_optimization:
|
||||
op->opcode == ZEND_JMPNZ ||
|
||||
op->opcode == ZEND_JMPNZ_EX ||
|
||||
op->opcode == ZEND_JMPZNZ ||
|
||||
op->opcode == ZEND_BRK ||
|
||||
op->opcode == ZEND_CONT ||
|
||||
op->opcode == ZEND_CASE ||
|
||||
op->opcode == ZEND_RETURN ||
|
||||
op->opcode == ZEND_RETURN_BY_REF ||
|
||||
@@ -358,8 +356,6 @@ continue_jmp_ex_optimization:
|
||||
op->opcode == ZEND_JMPNZ ||
|
||||
op->opcode == ZEND_JMPNZ_EX ||
|
||||
op->opcode == ZEND_JMPZNZ ||
|
||||
op->opcode == ZEND_BRK ||
|
||||
op->opcode == ZEND_CONT ||
|
||||
op->opcode == ZEND_CASE ||
|
||||
op->opcode == ZEND_RETURN ||
|
||||
op->opcode == ZEND_RETURN_BY_REF ||
|
||||
|
||||
Reference in New Issue
Block a user