Skip to content

Commit 17ccabc

Browse files
authored
Generate optimizer func info from stubs for ext/curl, ext/mysqli, ext/pcre (php#7407)
1 parent 6e1bede commit 17ccabc

File tree

8 files changed

+190
-81
lines changed

8 files changed

+190
-81
lines changed

Zend/Optimizer/zend_func_info.c

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -342,75 +342,8 @@ static const func_info_t old_func_infos[] = {
342342
F1("sys_get_temp_dir", MAY_BE_STRING),
343343

344344
/* ext/preg */
345-
FN("preg_replace", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
346-
FN("preg_replace_callback", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
347-
F1("preg_filter", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
348-
F1("preg_split", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
349345
F1("preg_grep", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
350346

351-
/* ext/mysqli */
352-
F1("mysqli_connect", MAY_BE_FALSE | MAY_BE_OBJECT),
353-
F0("mysqli_close", MAY_BE_TRUE),
354-
F1("mysqli_connect_error", MAY_BE_NULL | MAY_BE_STRING),
355-
F1("mysqli_get_client_stats", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
356-
F1("mysqli_error_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
357-
F1("mysqli_get_links_stats", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
358-
F1("mysqli_query", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
359-
F1("mysqli_get_charset", MAY_BE_NULL | MAY_BE_OBJECT),
360-
F1("mysqli_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
361-
F1("mysqli_fetch_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
362-
F1("mysqli_fetch_all", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
363-
F1("mysqli_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
364-
F1("mysqli_affected_rows", MAY_BE_LONG | MAY_BE_STRING),
365-
F1("mysqli_character_set_name", MAY_BE_STRING),
366-
F0("mysqli_debug", MAY_BE_TRUE),
367-
F1("mysqli_error", MAY_BE_STRING),
368-
F1("mysqli_reap_async_query", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
369-
F1("mysqli_stmt_get_result", MAY_BE_FALSE | MAY_BE_OBJECT),
370-
F1("mysqli_get_warnings", MAY_BE_FALSE | MAY_BE_OBJECT),
371-
F1("mysqli_stmt_error_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
372-
F1("mysqli_stmt_get_warnings", MAY_BE_FALSE | MAY_BE_OBJECT),
373-
F1("mysqli_fetch_field", MAY_BE_FALSE | MAY_BE_OBJECT),
374-
F1("mysqli_fetch_fields", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_OBJECT),
375-
F1("mysqli_fetch_field_direct", MAY_BE_FALSE | MAY_BE_OBJECT),
376-
F1("mysqli_fetch_lengths", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
377-
F1("mysqli_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
378-
F1("mysqli_get_client_info", MAY_BE_STRING),
379-
F1("mysqli_get_host_info", MAY_BE_STRING),
380-
F1("mysqli_get_server_info", MAY_BE_STRING),
381-
F1("mysqli_info", MAY_BE_NULL | MAY_BE_STRING),
382-
F1("mysqli_init", MAY_BE_FALSE | MAY_BE_OBJECT),
383-
F1("mysqli_insert_id", MAY_BE_LONG | MAY_BE_STRING),
384-
F1("mysqli_num_rows", MAY_BE_LONG | MAY_BE_STRING),
385-
F1("mysqli_prepare", MAY_BE_FALSE | MAY_BE_OBJECT),
386-
F1("mysqli_real_escape_string", MAY_BE_STRING),
387-
F1("mysqli_stmt_affected_rows", MAY_BE_LONG | MAY_BE_STRING),
388-
F1("mysqli_stmt_insert_id", MAY_BE_LONG | MAY_BE_STRING),
389-
F1("mysqli_stmt_num_rows", MAY_BE_LONG | MAY_BE_STRING),
390-
F1("mysqli_sqlstate", MAY_BE_STRING),
391-
F0("mysqli_ssl_set", MAY_BE_TRUE),
392-
F1("mysqli_stat", MAY_BE_FALSE | MAY_BE_STRING),
393-
F1("mysqli_stmt_error", MAY_BE_STRING),
394-
F1("mysqli_stmt_init", MAY_BE_FALSE | MAY_BE_OBJECT),
395-
F1("mysqli_stmt_result_metadata", MAY_BE_FALSE | MAY_BE_OBJECT),
396-
F1("mysqli_stmt_sqlstate", MAY_BE_STRING),
397-
F1("mysqli_store_result", MAY_BE_FALSE | MAY_BE_OBJECT),
398-
F1("mysqli_use_result", MAY_BE_FALSE | MAY_BE_OBJECT),
399-
400-
/* ext/curl */
401-
F1("curl_init", MAY_BE_FALSE | MAY_BE_OBJECT),
402-
F1("curl_copy_handle", MAY_BE_FALSE | MAY_BE_OBJECT),
403-
F1("curl_version", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
404-
F1("curl_error", MAY_BE_STRING),
405-
F1("curl_strerror", MAY_BE_NULL | MAY_BE_STRING),
406-
F1("curl_multi_strerror", MAY_BE_NULL | MAY_BE_STRING),
407-
F1("curl_escape", MAY_BE_FALSE | MAY_BE_STRING),
408-
F1("curl_unescape", MAY_BE_FALSE | MAY_BE_STRING),
409-
F1("curl_multi_init", MAY_BE_OBJECT),
410-
F1("curl_multi_info_read", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_OBJECT),
411-
F1("curl_share_init", MAY_BE_OBJECT),
412-
F1("curl_file_create", MAY_BE_OBJECT),
413-
414347
/* ext/mbstring */
415348
F1("mb_convert_case", MAY_BE_STRING),
416349
F1("mb_strtoupper", MAY_BE_STRING),

Zend/Optimizer/zend_func_infos.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ static const func_info_t func_infos[] = {
8484
F1("stream_socket_accept", MAY_BE_RESOURCE|MAY_BE_FALSE),
8585
FN("zip_open", MAY_BE_RESOURCE|MAY_BE_LONG|MAY_BE_FALSE),
8686
FN("zip_read", MAY_BE_RESOURCE|MAY_BE_FALSE),
87+
F1("curl_copy_handle", MAY_BE_OBJECT|MAY_BE_FALSE),
88+
F1("curl_error", MAY_BE_STRING),
89+
F1("curl_escape", MAY_BE_STRING|MAY_BE_FALSE),
90+
F1("curl_unescape", MAY_BE_STRING|MAY_BE_FALSE),
91+
F1("curl_file_create", MAY_BE_OBJECT),
92+
F1("curl_init", MAY_BE_OBJECT|MAY_BE_FALSE),
93+
F1("curl_multi_info_read", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_FALSE),
94+
F1("curl_multi_init", MAY_BE_OBJECT),
95+
F1("curl_multi_strerror", MAY_BE_STRING|MAY_BE_NULL),
96+
F1("curl_share_init", MAY_BE_OBJECT),
97+
F1("curl_share_strerror", MAY_BE_STRING|MAY_BE_NULL),
98+
F1("curl_strerror", MAY_BE_STRING|MAY_BE_NULL),
99+
F1("curl_version", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_FALSE),
87100
F1("json_encode", MAY_BE_STRING|MAY_BE_FALSE),
88101
F1("json_last_error_msg", MAY_BE_STRING),
89102
F1("finfo_open", MAY_BE_OBJECT|MAY_BE_FALSE),
@@ -139,10 +152,71 @@ static const func_info_t func_infos[] = {
139152
#if defined(HAVE_BIND_TEXTDOMAIN_CODESET)
140153
F1("bind_textdomain_codeset", MAY_BE_STRING|MAY_BE_FALSE),
141154
#endif
155+
F1("mysqli_affected_rows", MAY_BE_LONG|MAY_BE_STRING),
156+
F1("mysqli_character_set_name", MAY_BE_STRING),
157+
F0("mysqli_close", MAY_BE_TRUE),
158+
F1("mysqli_connect", MAY_BE_OBJECT|MAY_BE_FALSE),
159+
F1("mysqli_connect_error", MAY_BE_STRING|MAY_BE_NULL),
160+
F0("mysqli_debug", MAY_BE_TRUE),
161+
F1("mysqli_error", MAY_BE_STRING),
162+
F1("mysqli_error_list", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ARRAY),
163+
F1("mysqli_fetch_field", MAY_BE_OBJECT|MAY_BE_FALSE),
164+
F1("mysqli_fetch_fields", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_OBJECT),
165+
F1("mysqli_fetch_field_direct", MAY_BE_OBJECT|MAY_BE_FALSE),
166+
F1("mysqli_fetch_lengths", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG|MAY_BE_FALSE),
167+
F1("mysqli_fetch_all", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY),
168+
F1("mysqli_fetch_array", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_NULL|MAY_BE_FALSE),
169+
F1("mysqli_fetch_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_NULL|MAY_BE_FALSE),
170+
F1("mysqli_fetch_object", MAY_BE_OBJECT|MAY_BE_NULL|MAY_BE_FALSE),
171+
F1("mysqli_fetch_row", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY|MAY_BE_NULL|MAY_BE_FALSE),
172+
#if defined(MYSQLI_USE_MYSQLND)
173+
F1("mysqli_get_connection_stats", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY),
174+
#endif
175+
#if defined(MYSQLI_USE_MYSQLND)
176+
F1("mysqli_get_client_stats", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING),
177+
#endif
178+
F1("mysqli_get_charset", MAY_BE_OBJECT|MAY_BE_NULL),
179+
F1("mysqli_get_client_info", MAY_BE_STRING),
180+
F1("mysqli_get_links_stats", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
181+
F1("mysqli_get_host_info", MAY_BE_STRING),
182+
F1("mysqli_get_server_info", MAY_BE_STRING),
183+
F1("mysqli_get_warnings", MAY_BE_OBJECT|MAY_BE_FALSE),
184+
F1("mysqli_init", MAY_BE_OBJECT|MAY_BE_FALSE),
185+
F1("mysqli_info", MAY_BE_STRING|MAY_BE_NULL),
186+
F1("mysqli_insert_id", MAY_BE_LONG|MAY_BE_STRING),
187+
F1("mysqli_num_rows", MAY_BE_LONG|MAY_BE_STRING),
188+
F1("mysqli_prepare", MAY_BE_OBJECT|MAY_BE_FALSE),
189+
F1("mysqli_query", MAY_BE_OBJECT|MAY_BE_BOOL),
190+
F1("mysqli_real_escape_string", MAY_BE_STRING),
191+
#if defined(MYSQLI_USE_MYSQLND)
192+
F1("mysqli_reap_async_query", MAY_BE_OBJECT|MAY_BE_BOOL),
193+
#endif
194+
F1("mysqli_stmt_affected_rows", MAY_BE_LONG|MAY_BE_STRING),
195+
F0("mysqli_stmt_close", MAY_BE_TRUE),
196+
F1("mysqli_stmt_error", MAY_BE_STRING),
197+
F1("mysqli_stmt_error_list", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ARRAY),
198+
#if defined(MYSQLI_USE_MYSQLND)
199+
F1("mysqli_stmt_get_result", MAY_BE_OBJECT|MAY_BE_FALSE),
200+
#endif
201+
F1("mysqli_stmt_get_warnings", MAY_BE_OBJECT|MAY_BE_FALSE),
202+
F1("mysqli_stmt_init", MAY_BE_OBJECT|MAY_BE_FALSE),
203+
F1("mysqli_stmt_insert_id", MAY_BE_LONG|MAY_BE_STRING),
204+
F1("mysqli_stmt_num_rows", MAY_BE_LONG|MAY_BE_STRING),
205+
F1("mysqli_stmt_result_metadata", MAY_BE_OBJECT|MAY_BE_FALSE),
206+
F1("mysqli_stmt_sqlstate", MAY_BE_STRING),
207+
F1("mysqli_sqlstate", MAY_BE_STRING),
208+
F0("mysqli_ssl_set", MAY_BE_TRUE),
209+
F1("mysqli_stat", MAY_BE_STRING|MAY_BE_FALSE),
210+
F1("mysqli_store_result", MAY_BE_OBJECT|MAY_BE_FALSE),
211+
F1("mysqli_use_result", MAY_BE_OBJECT|MAY_BE_FALSE),
142212
F1("exif_tagname", MAY_BE_STRING|MAY_BE_FALSE),
143213
F1("exif_read_data", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_FALSE),
144214
F1("exif_thumbnail", MAY_BE_STRING|MAY_BE_FALSE),
145215
F1("pg_socket", MAY_BE_RESOURCE|MAY_BE_FALSE),
216+
FN("preg_replace", MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_NULL),
217+
FN("preg_filter", MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_NULL),
218+
FN("preg_replace_callback", MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_NULL),
219+
F1("preg_split", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_FALSE),
146220
FN("sodium_crypto_kx_client_session_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_STRING),
147221
FN("sodium_crypto_kx_server_session_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_STRING),
148222
F0("sodium_crypto_generichash_update", MAY_BE_TRUE),

ext/curl/curl.stub.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,30 @@ final class CurlShareHandle
2828

2929
function curl_close(CurlHandle $handle): void {}
3030

31+
/** @refcount 1 */
3132
function curl_copy_handle(CurlHandle $handle): CurlHandle|false {}
3233

3334
function curl_errno(CurlHandle $handle): int {}
3435

36+
/** @refcount 1 */
3537
function curl_error(CurlHandle $handle): string {}
3638

39+
/** @refcount 1 */
3740
function curl_escape(CurlHandle $handle, string $string): string|false {}
3841

42+
/** @refcount 1 */
3943
function curl_unescape(CurlHandle $handle, string $string): string|false {}
4044

4145
function curl_multi_setopt(CurlMultiHandle $multi_handle, int $option, mixed $value): bool {}
4246

4347
function curl_exec(CurlHandle $handle): string|bool {}
4448

49+
/** @refcount 1 */
4550
function curl_file_create(string $filename, ?string $mime_type = null, ?string $posted_filename = null): CURLFile {}
4651

4752
function curl_getinfo(CurlHandle $handle, ?int $option = null): mixed {}
4853

54+
/** @refcount 1 */
4955
function curl_init(?string $url = null): CurlHandle|false {}
5056

5157
function curl_multi_add_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int {}
@@ -59,15 +65,21 @@ function curl_multi_exec(CurlMultiHandle $multi_handle, &$still_running): int {}
5965

6066
function curl_multi_getcontent(CurlHandle $handle): ?string {}
6167

62-
/** @param int $queued_messages */
68+
/**
69+
* @param int $queued_messages
70+
* @return array<string, int|object>|false
71+
* @refcount 1
72+
*/
6373
function curl_multi_info_read(CurlMultiHandle $multi_handle, &$queued_messages = null): array|false {}
6474

75+
/** @refcount 1 */
6576
function curl_multi_init(): CurlMultiHandle {}
6677

6778
function curl_multi_remove_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int {}
6879

6980
function curl_multi_select(CurlMultiHandle $multi_handle, float $timeout = 1.0): int {}
7081

82+
/** @refcount 1 */
7183
function curl_multi_strerror(int $error_code): ?string {}
7284

7385
function curl_pause(CurlHandle $handle, int $flags): int {}
@@ -82,12 +94,19 @@ function curl_share_close(CurlShareHandle $share_handle): void {}
8294

8395
function curl_share_errno(CurlShareHandle $share_handle): int {}
8496

97+
/** @refcount 1 */
8598
function curl_share_init(): CurlShareHandle {}
8699

87100
function curl_share_setopt(CurlShareHandle $share_handle, int $option, mixed $value): bool {}
88101

102+
/** @refcount 1 */
89103
function curl_share_strerror(int $error_code): ?string {}
90104

105+
/** @refcount 1 */
91106
function curl_strerror(int $error_code): ?string {}
92107

108+
/**
109+
* @return array<string, int|string|array>|false
110+
* @refcount 1
111+
*/
93112
function curl_version(): array|false {}

ext/curl/curl_arginfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: c667191d35c8822b6e1f38ddd1e2743e78d4c3c0 */
2+
* Stub hash: 3abf3f6d5dfb14d2e22ebf5730a869e2c17c7958 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0)
55
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)

0 commit comments

Comments
 (0)