com php-src: Optimized parse_url() by using "know n" strings: Zend/zend_string.h ext/standard/url .c

[email protected] (Dmitry Stogov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    293d99052db363dd655ebe24a3c1fed3c095012a
Author:    Dmitry Stogov <[email protected]>         Mon, 22 May 2017 23:23:12 +0300
Parents:   26a6d20ab50b47291eba0870a36c59f1840df602
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=293d99052db363dd655ebe24a3c1fed3c095012a

Log:
Optimized parse_url() by using "known" strings

Changed paths:
  M  Zend/zend_string.h
  M  ext/standard/url.c


Diff:
diff --git a/Zend/zend_string.h b/Zend/zend_string.h
index 77dd083..81db801 100644
--- a/Zend/zend_string.h
+++ b/Zend/zend_string.h
@@ -408,6 +408,14 @@ EMPTY_SWITCH_DEFAULT_CASE()
 	_(ZEND_STR_SEVERITY,               "severity") \
 	_(ZEND_STR_STRING,                 "string") \
 	_(ZEND_STR_TRACE,                  "trace") \
+	_(ZEND_STR_SCHEME,                 "scheme") \
+	_(ZEND_STR_HOST,                   "host") \
+	_(ZEND_STR_PORT,                   "port") \
+	_(ZEND_STR_USER,                   "user") \
+	_(ZEND_STR_PASS,                   "pass") \
+	_(ZEND_STR_PATH,                   "path") \
+	_(ZEND_STR_QUERY,                  "query") \
+	_(ZEND_STR_FRAGMENT,               "fragment") \
 
 
 typedef enum _zend_known_string_id {
diff --git a/ext/standard/url.c b/ext/standard/url.c
index c2d7865..9806ed5 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -335,6 +335,7 @@ PHP_FUNCTION(parse_url)
 	size_t str_len;
 	php_url *resource;
 	zend_long key = -1;
+	zval tmp;
 
 	ZEND_PARSE_PARAMETERS_START(1, 2)
 		Z_PARAM_STRING(str, str_len)
@@ -385,22 +386,38 @@ PHP_FUNCTION(parse_url)
 	array_init(return_value);
 
     /* add the various elements to the array */
-	if (resource->scheme != NULL)
-		add_assoc_string(return_value, "scheme", resource->scheme);
-	if (resource->host != NULL)
-		add_assoc_string(return_value, "host", resource->host);
-	if (resource->port != 0)
-		add_assoc_long(return_value, "port", resource->port);
-	if (resource->user != NULL)
-		add_assoc_string(return_value, "user", resource->user);
-	if (resource->pass != NULL)
-		add_assoc_string(return_value, "pass", resource->pass);
-	if (resource->path != NULL)
-		add_assoc_string(return_value, "path", resource->path);
-	if (resource->query != NULL)
-		add_assoc_string(return_value, "query", resource->query);
-	if (resource->fragment != NULL)
-		add_assoc_string(return_value, "fragment", resource->fragment);
+	if (resource->scheme != NULL) {
+		ZVAL_STRING(&tmp, resource->scheme);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_SCHEME), &tmp);
+	}
+	if (resource->host != NULL) {
+		ZVAL_STRING(&tmp, resource->host);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp);
+	}
+	if (resource->port != 0) {
+		ZVAL_LONG(&tmp, resource->port);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp);
+	}
+	if (resource->user != NULL) {
+		ZVAL_STRING(&tmp, resource->user);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_USER), &tmp);
+	}
+	if (resource->pass != NULL) {
+		ZVAL_STRING(&tmp, resource->pass);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PASS), &tmp);
+	}
+	if (resource->path != NULL) {
+		ZVAL_STRING(&tmp, resource->path);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PATH), &tmp);
+	}
+	if (resource->query != NULL) {
+		ZVAL_STRING(&tmp, resource->query);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_QUERY), &tmp);
+	}
+	if (resource->fragment != NULL) {
+		ZVAL_STRING(&tmp, resource->fragment);
+		zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_FRAGMENT), &tmp);
+	}
 done:
 	php_url_free(resource);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.