ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(111, ZEND_INIT_CTOR_CALL, TMP|VAR|CV, ANY)
-{
- zend_op *opline = EX(opline);
- zend_free_op free_op1;
-
- zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
-
- if (OP1_TYPE == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr, &opline->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object) = GET_OP1_ZVAL_PTR(BP_VAR_R);
-
- /* New always returns the object as is_ref=0, therefore, we can just increment the reference count */
- EX(object)->refcount++; /* For $this pointer */
-
- EX(fbc) = EX(fbc_constructor);
-
- if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
- EX(calling_scope) = EX(fbc)->common.scope;
- } else {
- EX(calling_scope) = NULL;
- }
-
- FREE_OP1_IF_VAR();
- ZEND_VM_NEXT_OPCODE();
-}
-
ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV)
{
zend_op *opline = EX(opline);
ZEND_VM_HANDLER(68, ZEND_NEW, ANY, ANY)
{
zend_op *opline = EX(opline);
+ zval *object_zval;
+ zend_function *constructor;
if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
char *class_type;
}
zend_error_noreturn(E_ERROR, "Cannot instantiate %s %s", class_type, EX_T(opline->op1.u.var).class_entry->name);
}
- EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
- ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
- object_init_ex(EX_T(opline->result.u.var).var.ptr, EX_T(opline->op1.u.var).class_entry);
- EX_T(opline->result.u.var).var.ptr->refcount=1;
- EX_T(opline->result.u.var).var.ptr->is_ref=0;
+ ALLOC_ZVAL(object_zval);
+ object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry);
+ INIT_PZVAL(object_zval);
- ZEND_VM_NEXT_OPCODE();
+ constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
+
+ if (constructor == NULL) {
+ EX(fbc_constructor) = NULL;
+ if (RETURN_VALUE_USED(opline)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+ } else {
+ zval_ptr_dtor(&object_zval);
+ }
+ ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
+ ZEND_VM_CONTINUE_JMP();
+ } else {
+ EX(fbc_constructor) = constructor;
+
+ SELECTIVE_PZVAL_LOCK(object_zval, &opline->result);
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+
+ zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
+
+ /* We are not handling overloaded classes right now */
+ EX(object) = object_zval;
+
+ EX(fbc) = EX(fbc_constructor);
+
+ if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
+ EX(calling_scope) = EX(fbc)->common.scope;
+ } else {
+ EX(calling_scope) = NULL;
+ }
+ ZEND_VM_NEXT_OPCODE();
+ }
}
ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMP|VAR|UNUSED|CV, ANY)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(69, ZEND_JMP_NO_CTOR, TMP|VAR|CV, ANY)
-{
- zend_op *opline = EX(opline);
- zval *object_zval;
- zend_function *constructor;
- zend_free_op free_op1;
-
- if (OP1_TYPE == IS_VAR) {
- PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
- }
-
- object_zval = GET_OP1_ZVAL_PTR(BP_VAR_R);
- constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
-
- EX(fbc_constructor) = NULL;
- if (constructor == NULL) {
- if(opline->op1.u.EA.type & EXT_TYPE_UNUSED) {
- zval_ptr_dtor(EX_T(opline->op1.u.var).var.ptr_ptr);
- }
- ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
- ZEND_VM_CONTINUE_JMP();
- } else {
- EX(fbc_constructor) = constructor;
- }
-
- ZEND_VM_NEXT_OPCODE();
-}
-
ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, ANY)
{
zend_op *opline = EX(opline);
static int ZEND_NEW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
+ zval *object_zval;
+ zend_function *constructor;
if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
char *class_type;
}
zend_error_noreturn(E_ERROR, "Cannot instantiate %s %s", class_type, EX_T(opline->op1.u.var).class_entry->name);
}
- EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
- ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
- object_init_ex(EX_T(opline->result.u.var).var.ptr, EX_T(opline->op1.u.var).class_entry);
- EX_T(opline->result.u.var).var.ptr->refcount=1;
- EX_T(opline->result.u.var).var.ptr->is_ref=0;
+ ALLOC_ZVAL(object_zval);
+ object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry);
+ INIT_PZVAL(object_zval);
- ZEND_VM_NEXT_OPCODE();
+ constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
+
+ if (constructor == NULL) {
+ EX(fbc_constructor) = NULL;
+ if (RETURN_VALUE_USED(opline)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+ } else {
+ zval_ptr_dtor(&object_zval);
+ }
+ ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
+ ZEND_VM_CONTINUE_JMP();
+ } else {
+ EX(fbc_constructor) = constructor;
+
+ SELECTIVE_PZVAL_LOCK(object_zval, &opline->result);
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+
+ zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
+
+ /* We are not handling overloaded classes right now */
+ EX(object) = object_zval;
+
+ EX(fbc) = EX(fbc_constructor);
+
+ if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
+ EX(calling_scope) = EX(fbc)->common.scope;
+ } else {
+ EX(calling_scope) = NULL;
+ }
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_INIT_CTOR_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zend_free_op free_op1;
-
- zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
-
- if (IS_TMP_VAR == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr, &opline->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
-
- /* New always returns the object as is_ref=0, therefore, we can just increment the reference count */
- EX(object)->refcount++; /* For $this pointer */
-
- EX(fbc) = EX(fbc_constructor);
-
- if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
- EX(calling_scope) = EX(fbc)->common.scope;
- } else {
- EX(calling_scope) = NULL;
- }
-
- ;
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
}
}
-static int ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zval *object_zval;
- zend_function *constructor;
- zend_free_op free_op1;
-
- if (IS_TMP_VAR == IS_VAR) {
- PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
- }
-
- object_zval = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
-
- EX(fbc_constructor) = NULL;
- if (constructor == NULL) {
- if(opline->op1.u.EA.type & EXT_TYPE_UNUSED) {
- zval_ptr_dtor(EX_T(opline->op1.u.var).var.ptr_ptr);
- }
- ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
- ZEND_VM_CONTINUE_JMP();
- } else {
- EX(fbc_constructor) = constructor;
- }
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zend_free_op free_op1;
-
- zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
-
- if (IS_VAR == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr, &opline->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
-
- /* New always returns the object as is_ref=0, therefore, we can just increment the reference count */
- EX(object)->refcount++; /* For $this pointer */
-
- EX(fbc) = EX(fbc_constructor);
-
- if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
- EX(calling_scope) = EX(fbc)->common.scope;
- } else {
- EX(calling_scope) = NULL;
- }
-
- if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zval *object_zval;
- zend_function *constructor;
- zend_free_op free_op1;
-
- if (IS_VAR == IS_VAR) {
- PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
- }
-
- object_zval = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
- constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
-
- EX(fbc_constructor) = NULL;
- if (constructor == NULL) {
- if(opline->op1.u.EA.type & EXT_TYPE_UNUSED) {
- zval_ptr_dtor(EX_T(opline->op1.u.var).var.ptr_ptr);
- }
- ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
- ZEND_VM_CONTINUE_JMP();
- } else {
- EX(fbc_constructor) = constructor;
- }
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_INIT_CTOR_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zend_free_op free_op1;
-
- zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
-
- if (IS_CV == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr, &opline->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), &free_op1, BP_VAR_R TSRMLS_CC);
-
- /* New always returns the object as is_ref=0, therefore, we can just increment the reference count */
- EX(object)->refcount++; /* For $this pointer */
-
- EX(fbc) = EX(fbc_constructor);
-
- if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
- EX(calling_scope) = EX(fbc)->common.scope;
- } else {
- EX(calling_scope) = NULL;
- }
-
- ;
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
}
}
-static int ZEND_JMP_NO_CTOR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zval *object_zval;
- zend_function *constructor;
- zend_free_op free_op1;
-
- if (IS_CV == IS_VAR) {
- PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
- }
-
- object_zval = _get_zval_ptr_cv(&opline->op1, EX(Ts), &free_op1, BP_VAR_R TSRMLS_CC);
- constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
-
- EX(fbc_constructor) = NULL;
- if (constructor == NULL) {
- if(opline->op1.u.EA.type & EXT_TYPE_UNUSED) {
- zval_ptr_dtor(EX_T(opline->op1.u.var).var.ptr_ptr);
- }
- ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
- ZEND_VM_CONTINUE_JMP();
- } else {
- EX(fbc_constructor) = constructor;
- }
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_TMP_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_VAR_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_CV_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_CV_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_CV_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_CV_HANDLER,
- ZEND_JMP_NO_CTOR_SPEC_CV_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_INIT_CTOR_CALL_SPEC_TMP_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_TMP_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_TMP_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_TMP_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_TMP_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_VAR_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_CV_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_CV_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_CV_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_CV_HANDLER,
- ZEND_INIT_CTOR_CALL_SPEC_CV_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_VM_NEXT_OPCODE();
}
-static int ZEND_INIT_CTOR_CALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zend_free_op free_op1;
-
- zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
-
- if (opline->op1.op_type == IS_VAR) {
- SELECTIVE_PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr, &opline->op1);
- }
-
- /* We are not handling overloaded classes right now */
- EX(object) = get_zval_ptr(&opline->op1, EX(Ts), &free_op1, BP_VAR_R);
-
- /* New always returns the object as is_ref=0, therefore, we can just increment the reference count */
- EX(object)->refcount++; /* For $this pointer */
-
- EX(fbc) = EX(fbc_constructor);
-
- if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
- EX(calling_scope) = EX(fbc)->common.scope;
- } else {
- EX(calling_scope) = NULL;
- }
-
- FREE_OP_IF_VAR(free_op1);
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_INIT_METHOD_CALL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
static int ZEND_NEW_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
+ zval *object_zval;
+ zend_function *constructor;
if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
char *class_type;
}
zend_error_noreturn(E_ERROR, "Cannot instantiate %s %s", class_type, EX_T(opline->op1.u.var).class_entry->name);
}
- EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
- ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
- object_init_ex(EX_T(opline->result.u.var).var.ptr, EX_T(opline->op1.u.var).class_entry);
- EX_T(opline->result.u.var).var.ptr->refcount=1;
- EX_T(opline->result.u.var).var.ptr->is_ref=0;
+ ALLOC_ZVAL(object_zval);
+ object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry);
+ INIT_PZVAL(object_zval);
- ZEND_VM_NEXT_OPCODE();
+ constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
+
+ if (constructor == NULL) {
+ EX(fbc_constructor) = NULL;
+ if (RETURN_VALUE_USED(opline)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+ } else {
+ zval_ptr_dtor(&object_zval);
+ }
+ ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
+ ZEND_VM_CONTINUE_JMP();
+ } else {
+ EX(fbc_constructor) = constructor;
+
+ SELECTIVE_PZVAL_LOCK(object_zval, &opline->result);
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ EX_T(opline->result.u.var).var.ptr = object_zval;
+
+ zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(calling_scope));
+
+ /* We are not handling overloaded classes right now */
+ EX(object) = object_zval;
+
+ EX(fbc) = EX(fbc_constructor);
+
+ if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
+ EX(calling_scope) = EX(fbc)->common.scope;
+ } else {
+ EX(calling_scope) = NULL;
+ }
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_CLONE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_JMP_NO_CTOR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zval *object_zval;
- zend_function *constructor;
- zend_free_op free_op1;
-
- if (opline->op1.op_type == IS_VAR) {
- PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
- }
-
- object_zval = get_zval_ptr(&opline->op1, EX(Ts), &free_op1, BP_VAR_R);
- constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
-
- EX(fbc_constructor) = NULL;
- if (constructor == NULL) {
- if(opline->op1.u.EA.type & EXT_TYPE_UNUSED) {
- zval_ptr_dtor(EX_T(opline->op1.u.var).var.ptr_ptr);
- }
- ZEND_VM_SET_OPCODE(EX(op_array)->opcodes + opline->op2.u.opline_num);
- ZEND_VM_CONTINUE_JMP();
- } else {
- EX(fbc_constructor) = constructor;
- }
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_ISSET_ISEMPTY_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
ZEND_SEND_VAR_HANDLER,
ZEND_SEND_REF_HANDLER,
ZEND_NEW_HANDLER,
- ZEND_JMP_NO_CTOR_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_FREE_HANDLER,
ZEND_INIT_ARRAY_HANDLER,
ZEND_ADD_ARRAY_ELEMENT_HANDLER,
ZEND_THROW_HANDLER,
ZEND_FETCH_CLASS_HANDLER,
ZEND_CLONE_HANDLER,
- ZEND_INIT_CTOR_CALL_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_INIT_METHOD_CALL_HANDLER,
ZEND_INIT_STATIC_METHOD_CALL_HANDLER,
ZEND_ISSET_ISEMPTY_VAR_HANDLER,