Skip to content

Commit b065fbd

Browse files
committed
ZEND_DECLARE_ANON_CLASS doesn't need to skip anything now. It's immediatelly followed by ZEND_NEW.
1 parent 7cbc6b6 commit b065fbd

File tree

12 files changed

+13
-27
lines changed

12 files changed

+13
-27
lines changed

Zend/zend_compile.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3960,11 +3960,10 @@ void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */
39603960
zend_op *opline;
39613961

39623962
if (class_ast->kind == ZEND_AST_CLASS) {
3963-
/* jump over anon class declaration */
3963+
/* anon class declaration */
39643964
opline = zend_compile_class_decl(class_ast, 0);
39653965
class_node.op_type = opline->result_type;
39663966
class_node.u.op.var = opline->result.var;
3967-
opline->extended_value = get_next_op_number();
39683967
} else {
39693968
zend_compile_class_ref(&class_node, class_ast, ZEND_FETCH_CLASS_EXCEPTION);
39703969
}

Zend/zend_opcode.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,6 @@ ZEND_API int pass_two(zend_op_array *op_array)
959959
ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, opline->op2);
960960
break;
961961
}
962-
case ZEND_DECLARE_ANON_CLASS:
963962
case ZEND_FE_FETCH_R:
964963
case ZEND_FE_FETCH_RW:
965964
/* absolute index to relative offset */

Zend/zend_vm_def.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7264,24 +7264,24 @@ ZEND_VM_HANDLER(145, ZEND_DECLARE_CLASS_DELAYED, CONST, CONST)
72647264
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
72657265
}
72667266

7267-
ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY, JMP_ADDR)
7267+
ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
72687268
{
72697269
zval *zv;
72707270
zend_class_entry *ce;
72717271
USE_OPLINE
72727272

7273-
SAVE_OPLINE();
72747273
zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
72757274
ZEND_ASSERT(zv != NULL);
72767275
ce = Z_CE_P(zv);
72777276
Z_CE_P(EX_VAR(opline->result.var)) = ce;
72787277

72797278
if (ce->ce_flags & ZEND_ACC_LINKED) {
7280-
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7281-
ZEND_VM_CONTINUE();
7279+
ZEND_VM_NEXT_OPCODE();
7280+
} else {
7281+
SAVE_OPLINE();
7282+
zend_do_link_class(ce, (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
7283+
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
72827284
}
7283-
zend_do_link_class(ce, (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
7284-
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
72857285
}
72867286

72877287
ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY)

Zend/zend_vm_execute.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2430,18 +2430,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLE
24302430
zend_class_entry *ce;
24312431
USE_OPLINE
24322432

2433-
SAVE_OPLINE();
24342433
zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
24352434
ZEND_ASSERT(zv != NULL);
24362435
ce = Z_CE_P(zv);
24372436
Z_CE_P(EX_VAR(opline->result.var)) = ce;
24382437

24392438
if (ce->ce_flags & ZEND_ACC_LINKED) {
2440-
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2441-
ZEND_VM_CONTINUE();
2439+
ZEND_VM_NEXT_OPCODE();
2440+
} else {
2441+
SAVE_OPLINE();
2442+
zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
2443+
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24422444
}
2443-
zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
2444-
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24452445
}
24462446

24472447
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)

Zend/zend_vm_opcodes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ static uint32_t zend_vm_opcodes_flags[195] = {
367367
0x00000303,
368368
0x00000003,
369369
0x00000303,
370-
0x03000000,
370+
0x00000000,
371371
0x00000000,
372372
0x00060757,
373373
0x00000000,

ext/opcache/Optimizer/block_pass.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1000,7 +1000,6 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
10001000
ZEND_SET_OP_JMP_ADDR(opline, opline->op2, new_opcodes + blocks[b->successors[0]].start);
10011001
}
10021002
break;
1003-
case ZEND_DECLARE_ANON_CLASS:
10041003
case ZEND_FE_FETCH_R:
10051004
case ZEND_FE_FETCH_RW:
10061005
opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, new_opcodes + blocks[b->successors[0]].start);

ext/opcache/Optimizer/dfa_pass.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,6 @@ static void zend_ssa_replace_control_link(zend_op_array *op_array, zend_ssa *ssa
628628
}
629629
}
630630
break;
631-
case ZEND_DECLARE_ANON_CLASS:
632631
case ZEND_FE_FETCH_R:
633632
case ZEND_FE_FETCH_RW:
634633
if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) == old->start) {

ext/opcache/Optimizer/sccp.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1927,7 +1927,6 @@ static void sccp_mark_feasible_successors(
19271927
switch (opline->opcode) {
19281928
case ZEND_ASSERT_CHECK:
19291929
case ZEND_CATCH:
1930-
case ZEND_DECLARE_ANON_CLASS:
19311930
case ZEND_FE_FETCH_R:
19321931
case ZEND_FE_FETCH_RW:
19331932
scdf_mark_edge_feasible(scdf, block_num, block->successors[0]);

ext/opcache/Optimizer/zend_cfg.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
375375
}
376376
BB_START(i + 1);
377377
break;
378-
case ZEND_DECLARE_ANON_CLASS:
379378
case ZEND_FE_FETCH_R:
380379
case ZEND_FE_FETCH_RW:
381380
BB_START(ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
@@ -535,7 +534,6 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
535534
block->successors[0] = j + 1;
536535
}
537536
break;
538-
case ZEND_DECLARE_ANON_CLASS:
539537
case ZEND_FE_FETCH_R:
540538
case ZEND_FE_FETCH_RW:
541539
block->successors_count = 2;

ext/opcache/Optimizer/zend_optimizer.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,6 @@ void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_opline, z
709709
case ZEND_ASSERT_CHECK:
710710
ZEND_SET_OP_JMP_ADDR(new_opline, new_opline->op2, ZEND_OP2_JMP_ADDR(opline));
711711
break;
712-
case ZEND_DECLARE_ANON_CLASS:
713712
case ZEND_FE_FETCH_R:
714713
case ZEND_FE_FETCH_RW:
715714
new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value));
@@ -759,7 +758,6 @@ void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_
759758
ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(opline) - shiftlist[ZEND_OP2_JMP_ADDR(opline) - op_array->opcodes]);
760759
}
761760
break;
762-
case ZEND_DECLARE_ANON_CLASS:
763761
case ZEND_FE_FETCH_R:
764762
case ZEND_FE_FETCH_RW:
765763
opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - shiftlist[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)]);
@@ -1146,7 +1144,6 @@ static void zend_redo_pass_two(zend_op_array *op_array)
11461144
opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes];
11471145
}
11481146
break;
1149-
case ZEND_DECLARE_ANON_CLASS:
11501147
case ZEND_FE_FETCH_R:
11511148
case ZEND_FE_FETCH_RW:
11521149
case ZEND_SWITCH_LONG:
@@ -1234,7 +1231,6 @@ static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa)
12341231
opline->op2.jmp_addr = &op_array->opcodes[opline->op2.jmp_addr - old_opcodes];
12351232
}
12361233
break;
1237-
case ZEND_DECLARE_ANON_CLASS:
12381234
case ZEND_FE_FETCH_R:
12391235
case ZEND_FE_FETCH_RW:
12401236
case ZEND_SWITCH_LONG:

0 commit comments

Comments
 (0)