Improved branch prediction.
}
/* }}} */
-ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy) /* {{{ */
+ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy) /* {{{ */
{
if (Z_TYPE_P(expr) == IS_STRING) {
- *use_copy = 0;
- return;
+ return 0;
}
again:
Z_ADDREF_P(z);
if (Z_TYPE_P(z) != IS_OBJECT) {
- zend_make_printable_zval(z, expr_copy, use_copy);
- if (*use_copy) {
+ if (zend_make_printable_zval(z, expr_copy)) {
zval_ptr_dtor(z);
} else {
ZVAL_ZVAL(expr_copy, z, 0, 1);
- *use_copy = 1;
}
- return;
+ return 1;
}
zval_ptr_dtor(z);
}
expr = Z_REFVAL_P(expr);
if (Z_TYPE_P(expr) == IS_STRING) {
ZVAL_STR(expr_copy, STR_COPY(Z_STR_P(expr)));
- *use_copy = 1;
- return;
+ return 1;
}
goto again;
break;
convert_to_string(expr_copy);
break;
}
- *use_copy = 1;
+ return 1;
}
/* }}} */
BEGIN_EXTERN_C()
ZEND_API char *get_zend_version(void);
-ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy);
+ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy);
ZEND_API int zend_print_zval(zval *expr, int indent TSRMLS_DC);
ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC);
ZEND_API void zend_print_zval_r(zval *expr, int indent TSRMLS_DC);
}
}
if (!Z_OBJ_HANDLER_P(arg, cast_object) && Z_OBJ_HANDLER_P(arg, get)) {
- int use_copy;
zval rv;
zval *z = Z_OBJ_HANDLER_P(arg, get)(arg, &rv TSRMLS_CC);
Z_ADDREF_P(z);
if(Z_TYPE_P(z) != IS_OBJECT) {
zval_dtor(arg);
ZVAL_NULL(arg);
- zend_make_printable_zval(z, arg, &use_copy);
- if (!use_copy) {
+ if (!zend_make_printable_zval(z, arg)) {
ZVAL_ZVAL(arg, z, 1, 1);
}
*pl = Z_STRLEN_P(arg);
}
}
if (!Z_OBJ_HANDLER_P(arg, cast_object) && Z_OBJ_HANDLER_P(arg, get)) {
- int use_copy;
zval rv;
zval *z = Z_OBJ_HANDLER_P(arg, get)(arg, &rv TSRMLS_CC);
Z_ADDREF_P(z);
if(Z_TYPE_P(z) != IS_OBJECT) {
zval_dtor(arg);
ZVAL_NULL(arg);
- zend_make_printable_zval(z, arg, &use_copy);
- if (!use_copy) {
+ if (!zend_make_printable_zval(z, arg)) {
ZVAL_ZVAL(arg, z, 1, 1);
}
*str = Z_STR_P(arg);
zval op1_copy, op2_copy;
int use_copy1 = 0, use_copy2 = 0;
- if (Z_TYPE_P(op1) != IS_STRING || Z_TYPE_P(op2) != IS_STRING) {
+ if (UNEXPECTED(Z_TYPE_P(op1) != IS_STRING) ||
+ UNEXPECTED(Z_TYPE_P(op2) != IS_STRING)) {
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT);
if (Z_TYPE_P(op1) != IS_STRING) {
- zend_make_printable_zval(op1, &op1_copy, &use_copy1);
+ use_copy1 = zend_make_printable_zval(op1, &op1_copy);
}
if (Z_TYPE_P(op2) != IS_STRING) {
- zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+ use_copy2 = zend_make_printable_zval(op2, &op2_copy);
}
}
if (use_copy2) {
op2 = &op2_copy;
}
+
if (result==op1 && !IS_INTERNED(Z_STR_P(op1))) { /* special case, perform operations on result */
uint op1_len = Z_STRLEN_P(op1);
uint op2_len = Z_STRLEN_P(op2);
buf->val[length] = 0;
ZVAL_NEW_STR(result, buf);
}
- if (use_copy1) {
+ if (UNEXPECTED(use_copy1)) {
zval_dtor(op1);
}
- if (use_copy2) {
+ if (UNEXPECTED(use_copy2)) {
zval_dtor(op2);
}
return SUCCESS;
if (IS_INTERNED(s)) {
ret = STR_ALLOC(len, persistent);
memcpy(ret->val, s->val, (len > s->len ? s->len : len) + 1);
- } else if (STR_REFCOUNT(s) == 1) {
+ } else if (EXPECTED(STR_REFCOUNT(s) == 1)) {
ret = (zend_string *)perealloc(s, _STR_HEADER_SIZE + len + 1, persistent);
ret->len = len;
STR_FORGET_HASH_VAL(ret);
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if (Z_TYPE_P(var) != IS_STRING) {
ZVAL_DEREF(var);
if (Z_TYPE_P(var) != IS_STRING) {
- zend_make_printable_zval(var, &var_copy, &use_copy);
+ use_copy = zend_make_printable_zval(var, &var_copy);
if (use_copy) {
var = &var_copy;
if( Z_TYPE_P(arg) != IS_STRING )
{
- zend_make_printable_zval(arg, &arg_copy, &use_copy);
+ use_copy = zend_make_printable_zval(arg, &arg_copy);
if( use_copy )
{
for (i = 0; i < op_array->last_literal; i++) {
zval zv = op_array->literals[i].constant;
- zend_make_printable_zval(&op_array->literals[i].constant, &zv, &use_copy);
+ use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv);
fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
if (use_copy) {
zval_dtor(&zv);
for (i = 0; i < op_array->last_literal; i++) {
zval zv = op_array->literals[i].constant;
- zend_make_printable_zval(&op_array->literals[i].constant, &zv, &use_copy);
+ use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv);
fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
if (use_copy) {
zval_dtor(&zv);
}
if (Z_TYPE(key) != IS_STRING) {
- int use_copy;
- zend_make_printable_zval(&key, &key_copy, &use_copy);
- if (use_copy) {
+ if (zend_make_printable_zval(&key, &key_copy)) {
key = key_copy;
}
}
}
ZVAL_UNDEF(&subject_copy);
- zend_make_printable_zval(subject_ptr, &subject_copy, &use_copy);
+ use_copy = zend_make_printable_zval(subject_ptr, &subject_copy);
if (use_copy) {
subject = Z_STRVAL(subject_copy);
subject_len = Z_STRLEN(subject_copy);
} else {
ZVAL_COPY_VALUE(&intern->u.caching.zstr, &intern->current.data);
}
- zend_make_printable_zval(&intern->u.caching.zstr, &expr_copy, &use_copy);
+ use_copy = zend_make_printable_zval(&intern->u.caching.zstr, &expr_copy);
if (use_copy) {
ZVAL_COPY(&intern->u.caching.zstr, &expr_copy);
//??? INIT_PZVAL(intern->u.caching.zstr);
zval expr_copy;
int use_copy;
- zend_make_printable_zval(callback_name, &expr_copy, &use_copy);
+ use_copy = zend_make_printable_zval(callback_name, &expr_copy);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot call the messagehandler %s", Z_STRVAL(expr_copy));
zval_dtor(&expr_copy);
}
switch (*fmt) {
case 'Z':
zvp = (zval*) va_arg(ap, zval*);
- zend_make_printable_zval(zvp, &zcopy, &free_zcopy);
+ free_zcopy = zend_make_printable_zval(zvp, &zcopy);
if (free_zcopy) {
zvp = &zcopy;
}
switch (*fmt) {
case 'Z':
zvp = (zval*) va_arg(ap, zval*);
- zend_make_printable_zval(zvp, &zcopy, &free_zcopy);
+ free_zcopy = zend_make_printable_zval(zvp, &zcopy);
if (free_zcopy) {
zvp = &zcopy;
}