Browse Source

Fixed immutable array support

pull/471/merge
Dmitry Stogov 12 years ago
parent
commit
9507aa99fc
  1. 6
      Zend/zend_vm_def.h
  2. 24
      Zend/zend_vm_execute.h

6
Zend/zend_vm_def.h

@ -4539,7 +4539,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY)
}
ZVAL_DUP(&tmp, array_ref);
array_ptr = array_ref = &tmp;
} else if (OP1_TYPE == IS_CV) {
} else if (OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) {
if (Z_ISREF_P(array_ref) && Z_REFCOUNT_P(array_ref) == 1) {
ZVAL_UNREF(array_ref);
array_ptr = array_ref;
@ -4553,7 +4553,9 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY)
}
zval_copy_ctor(array_ptr);
}
Z_ADDREF_P(array_ref);
if (OP1_TYPE == IS_CV) {
Z_ADDREF_P(array_ref);
}
}
}
}

24
Zend/zend_vm_execute.h

@ -3156,7 +3156,7 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
}
ZVAL_DUP(&tmp, array_ref);
array_ptr = array_ref = &tmp;
} else if (IS_CONST == IS_CV) {
} else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
if (Z_ISREF_P(array_ref) && Z_REFCOUNT_P(array_ref) == 1) {
ZVAL_UNREF(array_ref);
array_ptr = array_ref;
@ -3170,7 +3170,9 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
}
zval_copy_ctor(array_ptr);
}
Z_ADDREF_P(array_ref);
if (IS_CONST == IS_CV) {
Z_ADDREF_P(array_ref);
}
}
}
}
@ -8679,7 +8681,7 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
}
ZVAL_DUP(&tmp, array_ref);
array_ptr = array_ref = &tmp;
} else if (IS_TMP_VAR == IS_CV) {
} else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
if (Z_ISREF_P(array_ref) && Z_REFCOUNT_P(array_ref) == 1) {
ZVAL_UNREF(array_ref);
array_ptr = array_ref;
@ -8693,7 +8695,9 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
}
zval_copy_ctor(array_ptr);
}
Z_ADDREF_P(array_ref);
if (IS_TMP_VAR == IS_CV) {
Z_ADDREF_P(array_ref);
}
}
}
}
@ -14122,7 +14126,7 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
}
ZVAL_DUP(&tmp, array_ref);
array_ptr = array_ref = &tmp;
} else if (IS_VAR == IS_CV) {
} else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
if (Z_ISREF_P(array_ref) && Z_REFCOUNT_P(array_ref) == 1) {
ZVAL_UNREF(array_ref);
array_ptr = array_ref;
@ -14136,7 +14140,9 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
}
zval_copy_ctor(array_ptr);
}
Z_ADDREF_P(array_ref);
if (IS_VAR == IS_CV) {
Z_ADDREF_P(array_ref);
}
}
}
}
@ -31483,7 +31489,7 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
}
ZVAL_DUP(&tmp, array_ref);
array_ptr = array_ref = &tmp;
} else if (IS_CV == IS_CV) {
} else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
if (Z_ISREF_P(array_ref) && Z_REFCOUNT_P(array_ref) == 1) {
ZVAL_UNREF(array_ref);
array_ptr = array_ref;
@ -31497,7 +31503,9 @@ static int ZEND_FASTCALL ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
}
zval_copy_ctor(array_ptr);
}
Z_ADDREF_P(array_ref);
if (IS_CV == IS_CV) {
Z_ADDREF_P(array_ref);
}
}
}
}

Loading…
Cancel
Save