//??? }
overloaded_result = Z_OBJ_HT_P(container)->read_dimension(container, dim, type, result TSRMLS_CC);
- if (overloaded_result) {
-//??? if (!Z_ISREF_P(overloaded_result)) {
+ if (overloaded_result && Z_TYPE_P(overloaded_result) != IS_UNDEF) {
+ if (!Z_ISREF_P(overloaded_result)) {
//??? if (Z_REFCOUNT_P(overloaded_result) > 0) {
//??? zval *tmp = overloaded_result;
//???
//??? Z_UNSET_ISREF_P(overloaded_result);
//??? Z_SET_REFCOUNT_P(overloaded_result, 0);
//??? }
-//??? if (Z_TYPE_P(overloaded_result) != IS_OBJECT) {
-//??? zend_class_entry *ce = Z_OBJCE_P(container);
-//??? zend_error(E_NOTICE, "Indirect modification of overloaded element of %s has no effect", ce->name);
-//??? }
-//??? }
+ if (Z_TYPE_P(overloaded_result) != IS_OBJECT) {
+ zend_class_entry *ce = Z_OBJCE_P(container);
+ zend_error(E_NOTICE, "Indirect modification of overloaded element of %s has no effect", ce->name->val);
+ }
+ }
//??? AI_SET_PTR(result, overloaded_result);
//??? PZVAL_LOCK(overloaded_result);
//??? ZVAL_COPY(result, overloaded_result);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = opline->op2.zv;
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = NULL;
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = opline->op2.zv;
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = NULL;
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
+ if (Z_TYPE_P(object_ptr) == IS_REFERENCE) {
+ object_ptr = Z_REFVAL_P(object_ptr);
+ }
if (Z_TYPE_P(object_ptr) == IS_OBJECT) {
zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);