sxe = Z_SXEOBJ_P(object);
- if (!member || Z_TYPE_P(member) == IS_LONG) {
- if (sxe->iter.type != SXE_ITER_ATTRLIST) {
- attribs = 0;
- elements = 1;
- } else if (!member) {
+ if (!member) {
+ if (sxe->iter.type == SXE_ITER_ATTRLIST) {
/* This happens when the user did: $sxe[]->foo = $value */
- php_error_docref(NULL, E_ERROR, "Cannot create unnamed attribute");
- return NULL;
+ zend_throw_error(NULL, "Cannot create unnamed attribute");
+ return &EG(uninitialized_zval);
}
- name = NULL;
+ goto long_dim;
} else {
- if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_zv, zval_get_string(member));
- member = &tmp_zv;
+ ZVAL_DEREF(member);
+ if (Z_TYPE_P(member) == IS_LONG) {
+ if (sxe->iter.type != SXE_ITER_ATTRLIST) {
+ long_dim:
+ attribs = 0;
+ elements = 1;
+ }
+ name = NULL;
+ } else {
+ if (Z_TYPE_P(member) != IS_STRING) {
+ ZVAL_STR(&tmp_zv, zval_get_string(member));
+ member = &tmp_zv;
+ }
+ name = Z_STRVAL_P(member);
}
- name = Z_STRVAL_P(member);
}
GET_NODE(sxe, node);
* and could also be E_PARSE, but we use this only during parsing
* and this is during runtime.
*/
- php_error_docref(NULL, E_ERROR, "Cannot create unnamed attribute");
+ zend_throw_error(NULL, "Cannot create unnamed attribute");
return FAILURE;
}
+ goto long_dim;
} else {
- if (Z_TYPE_P(member) != IS_STRING) {
- trim_str = zval_get_string(member);
- ZVAL_STR(&tmp_zv, php_trim(trim_str, NULL, 0, 3));
- zend_string_release(trim_str);
- member = &tmp_zv;
- }
+ ZVAL_DEREF(member);
+ if (Z_TYPE_P(member) == IS_LONG) {
+ if (sxe->iter.type != SXE_ITER_ATTRLIST) {
+ long_dim:
+ attribs = 0;
+ elements = 1;
+ }
+ } else {
+ if (Z_TYPE_P(member) != IS_STRING) {
+ trim_str = zval_get_string(member);
+ ZVAL_STR(&tmp_zv, php_trim(trim_str, NULL, 0, 3));
+ zend_string_release(trim_str);
+ member = &tmp_zv;
+ }
- if (!Z_STRLEN_P(member)) {
- php_error_docref(NULL, E_WARNING, "Cannot write or create unnamed %s", attribs ? "attribute" : "element");
- if (member == &tmp_zv) {
- zval_dtor(&tmp_zv);
+ if (!Z_STRLEN_P(member)) {
+ php_error_docref(NULL, E_WARNING, "Cannot write or create unnamed %s", attribs ? "attribute" : "element");
+ if (member == &tmp_zv) {
+ zval_dtor(&tmp_zv);
+ }
+ return FAILURE;
}
- return FAILURE;
}
}