Skip to content

Commit 76df3be

Browse files
committed
Merge branch 'master' into jit-dynasm
* master: Don't separate output arguments Avoid useless string duplication time to move next Optimized parse_url() by using "known" strings
2 parents de9b28f + dd4a78b commit 76df3be

File tree

6 files changed

+50
-25
lines changed

6 files changed

+50
-25
lines changed

Zend/zend_builtin_functions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ ZEND_FUNCTION(define)
839839
RETURN_FALSE;
840840
}
841841

842-
ZVAL_DUP(&c.value, val);
842+
ZVAL_COPY(&c.value, val);
843843
zval_ptr_dtor(&val_free);
844844
register_constant:
845845
c.flags = case_sensitive; /* non persistent */

Zend/zend_string.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,14 @@ EMPTY_SWITCH_DEFAULT_CASE()
408408
_(ZEND_STR_SEVERITY, "severity") \
409409
_(ZEND_STR_STRING, "string") \
410410
_(ZEND_STR_TRACE, "trace") \
411+
_(ZEND_STR_SCHEME, "scheme") \
412+
_(ZEND_STR_HOST, "host") \
413+
_(ZEND_STR_PORT, "port") \
414+
_(ZEND_STR_USER, "user") \
415+
_(ZEND_STR_PASS, "pass") \
416+
_(ZEND_STR_PATH, "path") \
417+
_(ZEND_STR_QUERY, "query") \
418+
_(ZEND_STR_FRAGMENT, "fragment") \
411419

412420

413421
typedef enum _zend_known_string_id {

ext/pcre/php_pcre.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ static void php_do_pcre_match(INTERNAL_FUNCTION_PARAMETERS, int global) /* {{{ *
677677
Z_PARAM_STR(regex)
678678
Z_PARAM_STR(subject)
679679
Z_PARAM_OPTIONAL
680-
Z_PARAM_ZVAL_EX(subpats, 0, 1)
680+
Z_PARAM_ZVAL_DEREF(subpats)
681681
Z_PARAM_LONG(flags)
682682
Z_PARAM_LONG(start_offset)
683683
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
@@ -1613,7 +1613,7 @@ static PHP_FUNCTION(preg_replace)
16131613
Z_PARAM_ZVAL(subject)
16141614
Z_PARAM_OPTIONAL
16151615
Z_PARAM_LONG(limit)
1616-
Z_PARAM_ZVAL_EX(zcount, 0, 1)
1616+
Z_PARAM_ZVAL_DEREF(zcount)
16171617
ZEND_PARSE_PARAMETERS_END();
16181618

16191619
if (Z_TYPE_P(replace) == IS_ARRAY && Z_TYPE_P(regex) != IS_ARRAY) {
@@ -1645,7 +1645,7 @@ static PHP_FUNCTION(preg_replace_callback)
16451645
Z_PARAM_ZVAL(subject)
16461646
Z_PARAM_OPTIONAL
16471647
Z_PARAM_LONG(limit)
1648-
Z_PARAM_ZVAL_EX(zcount, 0, 1)
1648+
Z_PARAM_ZVAL_DEREF(zcount)
16491649
ZEND_PARSE_PARAMETERS_END();
16501650

16511651
if (!zend_is_callable(replace, 0, &callback_name)) {
@@ -1680,7 +1680,7 @@ static PHP_FUNCTION(preg_replace_callback_array)
16801680
Z_PARAM_ZVAL(subject)
16811681
Z_PARAM_OPTIONAL
16821682
Z_PARAM_LONG(limit)
1683-
Z_PARAM_ZVAL_EX(zcount, 0, 1)
1683+
Z_PARAM_ZVAL_DEREF(zcount)
16841684
ZEND_PARSE_PARAMETERS_END();
16851685

16861686
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pattern), str_idx, replace) {
@@ -1741,7 +1741,7 @@ static PHP_FUNCTION(preg_filter)
17411741
Z_PARAM_ZVAL(subject)
17421742
Z_PARAM_OPTIONAL
17431743
Z_PARAM_LONG(limit)
1744-
Z_PARAM_ZVAL_EX(zcount, 0, 1)
1744+
Z_PARAM_ZVAL_DEREF(zcount)
17451745
ZEND_PARSE_PARAMETERS_END();
17461746

17471747
if (Z_TYPE_P(replace) == IS_ARRAY && Z_TYPE_P(regex) != IS_ARRAY) {

ext/standard/streamsfuncs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ PHP_FUNCTION(stream_socket_accept)
267267
Z_PARAM_RESOURCE(zstream)
268268
Z_PARAM_OPTIONAL
269269
Z_PARAM_DOUBLE(timeout)
270-
Z_PARAM_ZVAL_EX(zpeername, 0, 1)
270+
Z_PARAM_ZVAL_DEREF(zpeername)
271271
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
272272

273273
php_stream_from_zval(stream, zstream);
@@ -282,7 +282,7 @@ PHP_FUNCTION(stream_socket_accept)
282282
tv.tv_usec = conv % 1000000;
283283
#endif
284284
if (zpeername) {
285-
zval_dtor(zpeername);
285+
zval_ptr_dtor(zpeername);
286286
ZVAL_NULL(zpeername);
287287
}
288288

ext/standard/string.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4103,7 +4103,7 @@ static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensit
41034103
Z_PARAM_ZVAL(replace)
41044104
Z_PARAM_ZVAL(subject)
41054105
Z_PARAM_OPTIONAL
4106-
Z_PARAM_ZVAL_EX(zcount, 0, 1)
4106+
Z_PARAM_ZVAL_DEREF(zcount)
41074107
ZEND_PARSE_PARAMETERS_END();
41084108

41094109
/* Make sure we're dealing with strings and do the replacement. */

ext/standard/url.c

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ PHP_FUNCTION(parse_url)
335335
size_t str_len;
336336
php_url *resource;
337337
zend_long key = -1;
338+
zval tmp;
338339

339340
ZEND_PARSE_PARAMETERS_START(1, 2)
340341
Z_PARAM_STRING(str, str_len)
@@ -385,22 +386,38 @@ PHP_FUNCTION(parse_url)
385386
array_init(return_value);
386387

387388
/* add the various elements to the array */
388-
if (resource->scheme != NULL)
389-
add_assoc_string(return_value, "scheme", resource->scheme);
390-
if (resource->host != NULL)
391-
add_assoc_string(return_value, "host", resource->host);
392-
if (resource->port != 0)
393-
add_assoc_long(return_value, "port", resource->port);
394-
if (resource->user != NULL)
395-
add_assoc_string(return_value, "user", resource->user);
396-
if (resource->pass != NULL)
397-
add_assoc_string(return_value, "pass", resource->pass);
398-
if (resource->path != NULL)
399-
add_assoc_string(return_value, "path", resource->path);
400-
if (resource->query != NULL)
401-
add_assoc_string(return_value, "query", resource->query);
402-
if (resource->fragment != NULL)
403-
add_assoc_string(return_value, "fragment", resource->fragment);
389+
if (resource->scheme != NULL) {
390+
ZVAL_STRING(&tmp, resource->scheme);
391+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_SCHEME), &tmp);
392+
}
393+
if (resource->host != NULL) {
394+
ZVAL_STRING(&tmp, resource->host);
395+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp);
396+
}
397+
if (resource->port != 0) {
398+
ZVAL_LONG(&tmp, resource->port);
399+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp);
400+
}
401+
if (resource->user != NULL) {
402+
ZVAL_STRING(&tmp, resource->user);
403+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_USER), &tmp);
404+
}
405+
if (resource->pass != NULL) {
406+
ZVAL_STRING(&tmp, resource->pass);
407+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PASS), &tmp);
408+
}
409+
if (resource->path != NULL) {
410+
ZVAL_STRING(&tmp, resource->path);
411+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PATH), &tmp);
412+
}
413+
if (resource->query != NULL) {
414+
ZVAL_STRING(&tmp, resource->query);
415+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_QUERY), &tmp);
416+
}
417+
if (resource->fragment != NULL) {
418+
ZVAL_STRING(&tmp, resource->fragment);
419+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_FRAGMENT), &tmp);
420+
}
404421
done:
405422
php_url_free(resource);
406423
}

0 commit comments

Comments
 (0)