Uh oh!
There was an error while loading. Please reload this page.
Expose duplicate generic interface bindings in Reflection - #6
Conversation
Uh oh!
There was an error while loading. Please reload this page.
12a5b4e to
a42547fCompareprateekbhujel
commented
May 14, 2026
Small note: if any of my patches from these generics branches make it into the final php-src implementation, could you please keep my author attribution where possible? If the commits need to be reshaped or squashed, a Co-authored-by trailer with |
azjezz
commented
May 14, 2026
@prateekbhujel, I'm closing this now since it's already implemented in the PR. The RFC also needs updating. Regarding the commits, well see if I can squash mine and yours separately. I think it's best to slow down work on the PR until the RFC is approved, as I don't believe any fundamental changes are necessary. |
prateekbhujel
commented
May 14, 2026
Makes sense, I’ll pause here for now; separate squash would be nice if it fits, otherwise Co-authored-by is fine too. |
…dict ``` Direct leak of 52 byte(s) in 1 object(s) allocated from: #0 0x7ff90cd2c161 in malloc (/usr/lib/libasan.so.8+0x12c161) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e) #1 0x55de10c9a468 in tracked_malloc /work/php-8.4/Zend/zend_alloc.c:2973 #2 0x55de10c99443 in _emalloc /work/php-8.4/Zend/zend_alloc.c:2740 #3 0x55de102deb86 in zlib_create_dictionary_string /work/php-8.4/ext/zlib/zlib.c:836 #4 0x55de102e145a in zif_deflate_init /work/php-8.4/ext/zlib/zlib.c:1144 #5 0x55de10dcac6c in ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER /work/php-8.4/Zend/zend_vm_execute.h:1351 #6 0x55de10f2d69d in execute_ex /work/php-8.4/Zend/zend_vm_execute.h:58907 #7 0x55de10f41666 in zend_execute /work/php-8.4/Zend/zend_vm_execute.h:64334 php#8 0x55de110a6cf8 in zend_execute_script /work/php-8.4/Zend/zend.c:1934 php#9 0x55de10af0ddb in php_execute_script_ex /work/php-8.4/main/main.c:2577 php#10 0x55de10af128f in php_execute_script /work/php-8.4/main/main.c:2617 php#11 0x55de110ac5e1 in do_cli /work/php-8.4/sapi/cli/php_cli.c:935 php#12 0x55de110ae592 in main /work/php-8.4/sapi/cli/php_cli.c:1322 php#13 0x7ff90c027740 (/usr/lib/libc.so.6+0x27740) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049) php#14 0x7ff90c027878 in __libc_start_main (/usr/lib/libc.so.6+0x27878) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049) php#15 0x55de10005964 in _start (/work/php-8.4/sapi/cli/php+0x605964) (BuildId: 5f144db4e56ea623e070c56445fb1dfa3f8d085d) SUMMARY: AddressSanitizer: 52 byte(s) leaked in 1 allocation(s). ``` ClosesphpGH-22101.
Native generic syntax can bind the same interface more than once, for example
Foo<string>, Foo<int>. A singular Reflection API cannot expose that shape without picking one binding and hiding the rest.This keeps the parent-interface Reflection API set-based with
ReflectionClass::getGenericArgumentSetsForParentInterface(). Each returned entry is the list ofReflectionTypearguments for one inheritance path / use-site, in traversal order. A non-generic use-site is represented as an empty argument set.While wiring this through, the collection path also avoids re-walking interfaces that were already reached through a generic binding from PHP's flattened resolved interface table. That prevents unmapped transitive entries from leaking into the result.
Tests:
TEST_PHP_EXECUTABLE=sapi/cli/php sapi/cli/php run-tests.php -q Zend/tests/generics ext/reflection/tests/generics ext/reflection/tests/ReflectionClass_toString_001.phpt