Restored double->long conversion behavior to that of PHP 5.2 (on most platforms) and prior:

* Out-of-range numbers overflow/preserve least significant bits (no LONG_MAX/MIN limit)
 * See bug #42868 (presumably-rare platform with different results in 5.2)
 * On 32-bit platforms with 64-bit long type, a zend_long64 cast has been added,
    otherwise it's the same as 5.2
 * Use this conversion method everywhere instead of some plain (long) casts

Added 'L' parameter parsing specifier to ensure a LONG_MAX/MIN limit:
 * Essentially what 5.3's new conversion was doing in most cases
 * Functions with "limit" or "length" type params could be updated to use this,
    and prevent confusing overflow behavior with huge numbers (*also* in 5.2)
  - See bug #47854, for example; or even #42868 again

# Test updates coming
This commit is contained in:
Matt Wilmas 2009-06-04 18:18:47 +00:00
parent 14dc87e0ae
commit 8aa9727037
11 changed files with 166 additions and 236 deletions

View File

@ -48,6 +48,7 @@ Type specifiers
h - array (returned as HashTable*)
H - array or HASH_OF(object) (returned as HashTable*)
l - long (long)
L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long)
o - object of any type (zval*)
O - object of specific type given by class entry (zval*, zend_class_entry)
r - resource (zval*)

View File

@ -117,6 +117,38 @@ AC_CHECK_FUNCS(finite isfinite isinf isnan)
ZEND_FP_EXCEPT
ZEND_CHECK_FLOAT_PRECISION
dnl test whether double cast to long preserves least significant bits
AC_MSG_CHECKING(whether double cast to long preserves least significant bits)
AC_TRY_RUN([
#include <limits.h>
int main()
{
if (sizeof(long) == 4) {
double d = (double) LONG_MIN * LONG_MIN + 2e9;
if ((long) d == 2e9 && (long) -d == -2e9) {
exit(0);
}
} else if (sizeof(long) == 8) {
double correct = 18e18 - ((double) LONG_MIN * -2); /* Subtract ULONG_MAX + 1 */
if ((long) 18e18 == correct) { /* On 64-bit, only check between LONG_MAX and ULONG_MAX */
exit(0);
}
}
exit(1);
}
], [
AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits])
AC_MSG_RESULT(yes)
], [
AC_MSG_RESULT(no)
], [
AC_MSG_RESULT(no)
])
])

View File

@ -343,6 +343,7 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
switch (c) {
case 'l':
case 'L':
{
long *p = va_arg(*va, long *);
switch (Z_TYPE_PP(arg)) {
@ -354,7 +355,17 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
if ((type = is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), p, &d, -1)) == 0) {
return "long";
} else if (type == IS_DOUBLE) {
*p = (long) d;
if (c == 'L') {
if (d > LONG_MAX) {
*p = LONG_MAX;
break;
} else if (d < LONG_MIN) {
*p = LONG_MIN;
break;
}
}
*p = zend_dval_to_lval(d);
}
}
break;
@ -367,14 +378,33 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
if ((type = is_numeric_unicode(Z_USTRVAL_PP(arg), Z_USTRLEN_PP(arg), p, &d, -1)) == 0) {
return "long";
} else if (type == IS_DOUBLE) {
*p = (long) d;
if (c == 'L') {
if (d > LONG_MAX) {
*p = LONG_MAX;
break;
} else if (d < LONG_MIN) {
*p = LONG_MIN;
break;
}
}
*p = zend_dval_to_lval(d);
}
}
break;
case IS_DOUBLE:
if (c == 'L') {
if (Z_DVAL_PP(arg) > LONG_MAX) {
*p = LONG_MAX;
break;
} else if (Z_DVAL_PP(arg) < LONG_MIN) {
*p = LONG_MIN;
break;
}
}
case IS_NULL:
case IS_LONG:
case IS_DOUBLE:
case IS_BOOL:
convert_to_long_ex(arg);
*p = Z_LVAL_PP(arg);

View File

@ -4209,7 +4209,6 @@ void zend_do_add_static_array_element(znode *result, znode *offset, const znode
ALLOC_ZVAL(element);
*element = expr->u.constant;
if (offset) {
long l;
zend_uchar utype = Z_TYPE(offset->u.constant);
switch (Z_TYPE(offset->u.constant) & IS_CONSTANT_TYPE_MASK) {
@ -4237,8 +4236,7 @@ void zend_do_add_static_array_element(znode *result, znode *offset, const znode
zend_hash_index_update(Z_ARRVAL(result->u.constant), Z_LVAL(offset->u.constant), &element, sizeof(zval *), NULL);
break;
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL(offset->u.constant), l);
zend_hash_index_update(Z_ARRVAL(result->u.constant), l, &element, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL(result->u.constant), zend_dval_to_lval(Z_DVAL(offset->u.constant)), &element, sizeof(zval *), NULL);
break;
case IS_CONSTANT_ARRAY:
zend_error(E_ERROR, "Illegal offset type");

View File

@ -925,10 +925,9 @@ fetch_string_dim:
efree(offset_key.v);
}
break;
case IS_DOUBLE: {
DVAL_TO_LVAL(Z_DVAL_P(dim), index);
case IS_DOUBLE:
index = zend_dval_to_lval(Z_DVAL_P(dim));
goto num_index;
}
case IS_RESOURCE:
zend_error(E_STRICT, "Resource ID#%ld used as offset, casting to integer (%ld)", Z_LVAL_P(dim), Z_LVAL_P(dim));
/* Fall Through */

View File

@ -698,7 +698,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco
ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL_ZSTR, 0, Z_LVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL);
break;
case IS_DOUBLE:
ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL_ZSTR, 0, (long)Z_DVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL);
ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL_ZSTR, 0, zend_dval_to_lval(Z_DVAL(const_value)), HASH_UPDATE_KEY_IF_BEFORE, NULL);
break;
case IS_NULL:
ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_STRING, EMPTY_ZSTR, 1, 0, HASH_UPDATE_KEY_IF_BEFORE, NULL);

View File

@ -274,7 +274,7 @@ ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC) /* {{{ */
Z_LVAL(holder) = 0; \
break; \
case IS_DOUBLE: \
DVAL_TO_LVAL(Z_DVAL_P(op), Z_LVAL(holder)); \
Z_LVAL(holder) = zend_dval_to_lval(Z_DVAL_P(op)); \
break; \
case IS_STRING: \
Z_LVAL(holder) = strtol(Z_STRVAL_P(op), NULL, 10); \
@ -409,7 +409,7 @@ ZEND_API int convert_to_long_base(zval *op, int base) /* {{{ */
case IS_LONG:
break;
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(op), Z_LVAL_P(op));
Z_LVAL_P(op) = zend_dval_to_lval(Z_DVAL_P(op));
break;
case IS_STRING:
{
@ -1467,7 +1467,7 @@ ZEND_API int bitwise_not_function(zval *result, zval *op1 TSRMLS_DC) /* {{{ */
ZVAL_LONG(result, ~Z_LVAL_P(op1));
return SUCCESS;
} else if (Z_TYPE_P(op1) == IS_DOUBLE) {
ZVAL_LONG(result, ~(long) Z_DVAL_P(op1));
ZVAL_LONG(result, ~zend_dval_to_lval(Z_DVAL_P(op1)));
return SUCCESS;
} else if (Z_TYPE_P(op1) == IS_STRING) {
int i;

View File

@ -66,39 +66,25 @@ ZEND_API unsigned long zend_u_strtoul(const UChar *nptr, UChar **endptr, int bas
ZEND_API double zend_u_strtod(const UChar *nptr, UChar **endptr);
END_EXTERN_C()
/* {{{ DVAL_TO_LVAL */
#define MAX_UNSIGNED_INT ((double) LONG_MAX * 2) + 1
#ifdef _WIN64
# define DVAL_TO_LVAL(d, l) \
if ((d) > LONG_MAX) { \
(l) = (long)(unsigned long)(__int64) (d); \
} else { \
(l) = (long) (d); \
}
#elif !defined(_WIN64) && __WORDSIZE == 64
# define DVAL_TO_LVAL(d, l) \
if ((d) >= LONG_MAX) { \
(l) = LONG_MAX; \
} else if ((d) <= LONG_MIN) { \
(l) = LONG_MIN; \
} else { \
(l) = (long) (d); \
/* {{{ zend_dval_to_lval */
#if ZEND_DVAL_TO_LVAL_CAST_OK
# define zend_dval_to_lval(d) ((long) (d))
#elif SIZEOF_LONG == 4 && defined(HAVE_ZEND_LONG64)
static zend_always_inline long zend_dval_to_lval(double d)
{
if (d > LONG_MAX || d < LONG_MIN) {
return (long)(unsigned long)(zend_long64) d;
}
return (long) d;
}
#else
# define DVAL_TO_LVAL(d, l) \
if ((d) > LONG_MAX) { \
if ((d) > MAX_UNSIGNED_INT) { \
(l) = LONG_MAX; \
} else { \
(l) = (unsigned long) (d); \
} \
} else { \
if((d) < LONG_MIN) { \
(l) = LONG_MIN; \
} else { \
(l) = (long) (d); \
} \
static zend_always_inline long zend_dval_to_lval(double d)
{
if (d > LONG_MAX) {
return (long)(unsigned long) d;
}
return (long) d;
}
#endif
/* }}} */

View File

@ -3169,11 +3169,9 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUS
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -3537,7 +3535,6 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
zend_free_op free_op1, free_op2;
zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
long index;
if (OP1_TYPE != IS_VAR || container) {
if (OP1_TYPE == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -3549,14 +3546,12 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -4071,7 +4066,6 @@ ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|
zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_IS);
zval **value = NULL;
int result = 0;
long index;
if (OP1_TYPE != IS_VAR || container) {
zend_free_op free_op2;
@ -4085,16 +4079,14 @@ ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;

View File

@ -2933,11 +2933,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_O
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -3458,11 +3456,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPC
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -3930,11 +3926,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPC
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -4126,11 +4120,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -4597,11 +4589,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCO
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -6308,11 +6298,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPC
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -6783,11 +6771,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCOD
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -7258,11 +7244,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -7354,11 +7338,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -7826,11 +7808,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -11037,11 +11017,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPC
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -11092,7 +11070,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
zend_free_op free_op1;
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval *offset = &opline->op2.u.constant;
long index;
if (IS_VAR != IS_VAR || container) {
if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -11104,14 +11081,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -11248,7 +11223,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_VAR != IS_VAR || container) {
@ -11262,16 +11236,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -12863,11 +12835,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCOD
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -12918,7 +12888,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
zend_free_op free_op1, free_op2;
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_VAR != IS_VAR || container) {
if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -12930,14 +12899,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -13074,7 +13041,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(in
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_VAR != IS_VAR || container) {
zend_free_op free_op2;
@ -13088,16 +13054,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(in
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -14740,11 +14704,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -14795,7 +14757,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
zend_free_op free_op1, free_op2;
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_VAR != IS_VAR || container) {
if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -14807,14 +14768,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -14951,7 +14910,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(in
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_VAR != IS_VAR || container) {
zend_free_op free_op2;
@ -14965,16 +14923,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(in
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -15670,11 +15626,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -17212,11 +17166,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -17267,7 +17219,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
zend_free_op free_op1;
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
long index;
if (IS_VAR != IS_VAR || container) {
if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -17279,14 +17230,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -17423,7 +17372,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_VAR != IS_VAR || container) {
@ -17437,16 +17385,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -18531,7 +18477,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_H
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval *offset = &opline->op2.u.constant;
long index;
if (IS_UNUSED != IS_VAR || container) {
if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -18543,14 +18488,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_H
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -18685,7 +18628,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CON
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval **value = NULL;
int result = 0;
long index;
if (IS_UNUSED != IS_VAR || container) {
@ -18699,16 +18641,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CON
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -19652,7 +19592,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
zend_free_op free_op2;
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_UNUSED != IS_VAR || container) {
if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -19664,14 +19603,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -19806,7 +19743,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval **value = NULL;
int result = 0;
long index;
if (IS_UNUSED != IS_VAR || container) {
zend_free_op free_op2;
@ -19820,16 +19756,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -20773,7 +20707,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
zend_free_op free_op2;
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_UNUSED != IS_VAR || container) {
if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -20785,14 +20718,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -20927,7 +20858,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval **value = NULL;
int result = 0;
long index;
if (IS_UNUSED != IS_VAR || container) {
zend_free_op free_op2;
@ -20941,16 +20871,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -22152,7 +22080,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAND
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
long index;
if (IS_UNUSED != IS_VAR || container) {
if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -22164,14 +22091,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAND
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -22306,7 +22231,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(
zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
zval **value = NULL;
int result = 0;
long index;
if (IS_UNUSED != IS_VAR || container) {
@ -22320,16 +22244,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -25283,11 +25205,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCO
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -25338,7 +25258,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
zval *offset = &opline->op2.u.constant;
long index;
if (IS_CV != IS_VAR || container) {
if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -25350,14 +25269,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -25492,7 +25409,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(i
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_CV != IS_VAR || container) {
@ -25506,16 +25422,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(i
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -26997,11 +26911,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -27052,7 +26964,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
zend_free_op free_op2;
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_CV != IS_VAR || container) {
if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -27064,14 +26975,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -27206,7 +27115,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_CV != IS_VAR || container) {
zend_free_op free_op2;
@ -27220,16 +27128,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -28761,11 +28667,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -28816,7 +28720,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
zend_free_op free_op2;
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
long index;
if (IS_CV != IS_VAR || container) {
if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -28828,14 +28731,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -28970,7 +28871,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_CV != IS_VAR || container) {
zend_free_op free_op2;
@ -28984,16 +28884,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
@ -29585,11 +29483,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPC
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -31018,11 +30914,9 @@ static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_
}
}
if (offset) {
long l;
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
DVAL_TO_LVAL(Z_DVAL_P(offset), l);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), l, &expr_ptr, sizeof(zval *), NULL);
zend_hash_index_update(Z_ARRVAL_P(array_ptr), zend_dval_to_lval(Z_DVAL_P(offset)), &expr_ptr, sizeof(zval *), NULL);
break;
case IS_LONG:
case IS_BOOL:
@ -31073,7 +30967,6 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
long index;
if (IS_CV != IS_VAR || container) {
if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
@ -31085,14 +30978,12 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, zend_dval_to_lval(Z_DVAL_P(offset)));
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
zend_hash_index_del(ht, index);
zend_hash_index_del(ht, Z_LVAL_P(offset));
break;
case IS_STRING:
case IS_UNICODE: {
@ -31227,7 +31118,6 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int
zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
zval **value = NULL;
int result = 0;
long index;
if (IS_CV != IS_VAR || container) {
@ -31241,16 +31131,14 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
index = (long) Z_DVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, zend_dval_to_lval(Z_DVAL_P(offset)), (void **) &value) == SUCCESS) {
isset = 1;
}
break;
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
index = Z_LVAL_P(offset);
if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
if (zend_hash_index_find(ht, Z_LVAL_P(offset), (void **) &value) == SUCCESS) {
isset = 1;
}
break;

View File

@ -355,6 +355,10 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \
zend_default_classes.c zend_execute.c zend_strtod.c zend_gc.c zend_closures.c \
zend_float.c");
if (VCVERS == 1200) {
AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1);
}
ADD_SOURCES("main", "main.c snprintf.c spprintf.c fopen_wrappers.c \
php_scandir.c php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \