summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_compile.c3
-rw-r--r--Zend/zend_opcode.c1
-rw-r--r--Zend/zend_vm_def.h12
-rw-r--r--Zend/zend_vm_execute.h10
-rw-r--r--Zend/zend_vm_opcodes.c2
5 files changed, 13 insertions, 15 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 1e57c7bf09..d8180c9bee 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3960,11 +3960,10 @@ void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */
zend_op *opline;
if (class_ast->kind == ZEND_AST_CLASS) {
- /* jump over anon class declaration */
+ /* anon class declaration */
opline = zend_compile_class_decl(class_ast, 0);
class_node.op_type = opline->result_type;
class_node.u.op.var = opline->result.var;
- opline->extended_value = get_next_op_number();
} else {
zend_compile_class_ref(&class_node, class_ast, ZEND_FETCH_CLASS_EXCEPTION);
}
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index 0d26088167..a62d3db477 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -959,7 +959,6 @@ ZEND_API int pass_two(zend_op_array *op_array)
ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, opline->op2);
break;
}
- case ZEND_DECLARE_ANON_CLASS:
case ZEND_FE_FETCH_R:
case ZEND_FE_FETCH_RW:
/* absolute index to relative offset */
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 8594cda179..0224e674e7 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -7264,24 +7264,24 @@ ZEND_VM_HANDLER(145, ZEND_DECLARE_CLASS_DELAYED, CONST, CONST)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY, JMP_ADDR)
+ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY)
{
zval *zv;
zend_class_entry *ce;
USE_OPLINE
- SAVE_OPLINE();
zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
ZEND_ASSERT(zv != NULL);
ce = Z_CE_P(zv);
Z_CE_P(EX_VAR(opline->result.var)) = ce;
if (ce->ce_flags & ZEND_ACC_LINKED) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+ zend_do_link_class(ce, (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- zend_do_link_class(ce, (OP2_TYPE == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY)
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 763cc1b1ac..2c21ea0a04 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -2430,18 +2430,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLE
zend_class_entry *ce;
USE_OPLINE
- SAVE_OPLINE();
zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
ZEND_ASSERT(zv != NULL);
ce = Z_CE_P(zv);
Z_CE_P(EX_VAR(opline->result.var)) = ce;
if (ce->ce_flags & ZEND_ACC_LINKED) {
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+ zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
- zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c
index 31262e089c..6ef58e4d90 100644
--- a/Zend/zend_vm_opcodes.c
+++ b/Zend/zend_vm_opcodes.c
@@ -367,7 +367,7 @@ static uint32_t zend_vm_opcodes_flags[195] = {
0x00000303,
0x00000003,
0x00000303,
- 0x03000000,
+ 0x00000000,
0x00000000,
0x00060757,
0x00000000,