diff options
author | Xinchen Hui <laruence@php.net> | 2014-06-18 23:37:47 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-06-18 23:37:47 +0800 |
commit | 17f35c9a295a55b8af09a5c8ba7dbc8894d3861b (patch) | |
tree | cbd1f091c85ea6bbd361196244d4aa7bc3f04ad4 /Zend/zend_compile.c | |
parent | b38f6f3de96990163d36c82c248fb29e6f0815c4 (diff) | |
parent | b108267f2c5c09bd153cfb1d4e580d5fc9c52d51 (diff) | |
download | php-git-17f35c9a295a55b8af09a5c8ba7dbc8894d3861b.tar.gz |
Merge branch 'phpng' of git.php.net:php-src into phpng
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d414a46a5c..c6116693b7 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3461,41 +3461,45 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{ } } if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) { - zval zv; + zval *zv = precv->op2.zv; - ZVAL_DUP(&zv, precv->op2.zv); - zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC); - if (Z_TYPE(zv) == IS_FALSE) { + if (Z_TYPE_P(zv) == IS_CONSTANT) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, Z_STRLEN_P(zv)); + memcpy(offset, Z_STRVAL_P(zv), Z_STRLEN_P(zv)); + offset += Z_STRLEN_P(zv); + } else if (Z_TYPE_P(zv) == IS_FALSE) { memcpy(offset, "false", 5); offset += 5; - } else if (Z_TYPE(zv) == IS_TRUE) { + } else if (Z_TYPE_P(zv) == IS_TRUE) { memcpy(offset, "true", 4); offset += 4; - } else if (Z_TYPE(zv) == IS_NULL) { + } else if (Z_TYPE_P(zv) == IS_NULL) { memcpy(offset, "NULL", 4); offset += 4; - } else if (Z_TYPE(zv) == IS_STRING) { + } else if (Z_TYPE_P(zv) == IS_STRING) { *(offset++) = '\''; - REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN(zv), 10)); - memcpy(offset, Z_STRVAL(zv), MIN(Z_STRLEN(zv), 10)); - offset += MIN(Z_STRLEN(zv), 10); - if (Z_STRLEN(zv) > 10) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN_P(zv), 10)); + memcpy(offset, Z_STRVAL_P(zv), MIN(Z_STRLEN_P(zv), 10)); + offset += MIN(Z_STRLEN_P(zv), 10); + if (Z_STRLEN_P(zv) > 10) { *(offset++) = '.'; *(offset++) = '.'; *(offset++) = '.'; } *(offset++) = '\''; - } else if (Z_TYPE(zv) == IS_ARRAY) { + } else if (Z_TYPE_P(zv) == IS_ARRAY) { memcpy(offset, "Array", 5); offset += 5; + } else if (Z_TYPE_P(zv) == IS_CONSTANT_AST) { + memcpy(offset, "<expression>", 12); + offset += 12; } else { - zend_string *str = zval_get_string(&zv); + zend_string *str = zval_get_string(zv); REALLOC_BUF_IF_EXCEED(buf, offset, length, str->len); memcpy(offset, str->val, str->len); offset += str->len; STR_RELEASE(str); } - zval_ptr_dtor(&zv); } } else { memcpy(offset, "NULL", 4); |