|
|
|
@ -1305,14 +1305,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEN |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0); |
|
|
|
if (Z_CE_P(EX_VAR(opline->result.var))->ce_flags & ZEND_ACC_ANON_CLASS) { |
|
|
|
if (Z_CE_P(EX_VAR(opline->result.var))->ce_flags & ZEND_ACC_ANON_BOUND) { |
|
|
|
while (opline->opcode != ZEND_NEW) { |
|
|
|
opline++; |
|
|
|
} |
|
|
|
ZEND_VM_JMP(opline); |
|
|
|
} else Z_CE_P(EX_VAR(opline->result.var))->ce_flags |= ZEND_ACC_ANON_BOUND; |
|
|
|
} |
|
|
|
CHECK_EXCEPTION(); |
|
|
|
ZEND_VM_NEXT_OPCODE(); |
|
|
|
} |
|
|
|
@ -1323,14 +1315,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_H |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0); |
|
|
|
if (Z_CE_P(EX_VAR(opline->result.var))->ce_flags & ZEND_ACC_ANON_CLASS) { |
|
|
|
if (Z_CE_P(EX_VAR(opline->result.var))->ce_flags & ZEND_ACC_ANON_BOUND) { |
|
|
|
while (opline->opcode != ZEND_NEW) { |
|
|
|
opline++; |
|
|
|
} |
|
|
|
ZEND_VM_JMP(opline); |
|
|
|
} else Z_CE_P(EX_VAR(opline->result.var))->ce_flags |= ZEND_ACC_ANON_BOUND; |
|
|
|
} |
|
|
|
CHECK_EXCEPTION(); |
|
|
|
ZEND_VM_NEXT_OPCODE(); |
|
|
|
} |
|
|
|
@ -1350,6 +1334,48 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYE |
|
|
|
ZEND_VM_NEXT_OPCODE(); |
|
|
|
} |
|
|
|
|
|
|
|
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) |
|
|
|
{ |
|
|
|
zend_class_entry *ce; |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op2))); |
|
|
|
Z_CE_P(EX_VAR(opline->result.var)) = ce; |
|
|
|
ZEND_ASSERT(ce != NULL); |
|
|
|
|
|
|
|
if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { |
|
|
|
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op1)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { |
|
|
|
zend_verify_abstract_class(ce); |
|
|
|
} |
|
|
|
ce->ce_flags |= ZEND_ACC_ANON_BOUND; |
|
|
|
CHECK_EXCEPTION(); |
|
|
|
ZEND_VM_NEXT_OPCODE(); |
|
|
|
} |
|
|
|
|
|
|
|
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) |
|
|
|
{ |
|
|
|
zend_class_entry *ce; |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op2))); |
|
|
|
Z_CE_P(EX_VAR(opline->result.var)) = ce; |
|
|
|
ZEND_ASSERT(ce != NULL); |
|
|
|
|
|
|
|
if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { |
|
|
|
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op1)); |
|
|
|
} |
|
|
|
|
|
|
|
zend_do_inheritance(ce, Z_CE_P(EX_VAR(opline->extended_value))); |
|
|
|
ce->ce_flags |= ZEND_ACC_ANON_BOUND; |
|
|
|
CHECK_EXCEPTION(); |
|
|
|
ZEND_VM_NEXT_OPCODE(); |
|
|
|
} |
|
|
|
|
|
|
|
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
@ -48776,6 +48802,56 @@ void zend_init_opcodes_handlers(void) |
|
|
|
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER, |
|
|
|
ZEND_NULL_HANDLER, |
|
|
|
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER, |
|
|
|
ZEND_NULL_HANDLER |
|
|
|
}; |
|
|
|
zend_opcode_handlers = labels; |
|
|
|
|