Skip to content

Commit ceac309

Browse files
Fix extract signature
1 parent 5a110c4 commit ceac309

File tree

6 files changed

+41
-13
lines changed

6 files changed

+41
-13
lines changed

Diff for: resources/functionMap.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@
286286
'array_map' => ['array', 'callback'=>'?callable', 'array'=>'array', '...args='=>'array'],
287287
'array_merge' => ['array', 'arr1'=>'array', '...args='=>'array'],
288288
'array_merge_recursive' => ['array', 'arr1'=>'array', '...args='=>'array'],
289-
'array_multisort' => ['bool', '&rw_array1'=>'array', 'array1_sort_order='=>'array|int', 'array1_sort_flags='=>'array|int', '...args='=>'array|int'],
289+
'array_multisort' => ['bool', 'array1'=>'array', 'array1_sort_order='=>'array|int', 'array1_sort_flags='=>'array|int', '...args='=>'array|int'],
290290
'array_pad' => ['array', 'input'=>'array', 'pad_size'=>'int', 'pad_value'=>'mixed'],
291291
'array_pop' => ['mixed', '&rw_stack'=>'array'],
292292
'array_product' => ['int|float', 'input'=>'array'],
@@ -2637,7 +2637,7 @@
26372637
'explode' => ['list<string>|false', 'separator'=>'string', 'str'=>'string', 'limit='=>'int'],
26382638
'expm1' => ['float', 'number'=>'float'],
26392639
'extension_loaded' => ['bool', 'extension_name'=>'string'],
2640-
'extract' => ['0|positive-int', '&rw_var_array'=>'array', 'extract_type='=>'int', 'prefix='=>'string|null'],
2640+
'extract' => ['0|positive-int', 'array'=>'array', 'flags='=>'int', 'prefix='=>'string|null'],
26412641
'ezmlm_hash' => ['int', 'addr'=>'string'],
26422642
'fam_cancel_monitor' => ['bool', 'fam'=>'resource', 'fam_monitor'=>'resource'],
26432643
'fam_close' => ['void', 'fam'=>'resource'],

Diff for: resources/functionMap_bleedingEdge.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
'scandir' => ['list<string>|false', 'dir'=>'string', 'sorting_order='=>'SCANDIR_SORT_ASCENDING|SCANDIR_SORT_DESCENDING| SCANDIR_SORT_NONE', 'context='=>'resource'],
147147
'stream_socket_client' => ['resource|false', 'remoteaddress'=>'string', '&w_errcode='=>'int', '&w_errstring='=>'string', 'timeout='=>'float', 'flags='=>'int-mask<STREAM_CLIENT_CONNECT|STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_PERSISTENT>', 'context='=>'resource'],
148148
'stream_socket_enable_crypto' => ['0|bool', 'stream'=>'resource', 'enable'=>'bool', 'crypto_method='=>'STREAM_CRYPTO_METHOD_SSLv2_CLIENT|STREAM_CRYPTO_METHOD_SSLv3_CLIENT|STREAM_CRYPTO_METHOD_SSLv23_CLIENT|STREAM_CRYPTO_METHOD_ANY_CLIENT|STREAM_CRYPTO_METHOD_TLS_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT|STREAM_CRYPTO_METHOD_SSLv2_SERVER|STREAM_CRYPTO_METHOD_SSLv3_SERVER|STREAM_CRYPTO_METHOD_SSLv23_SERVER|STREAM_CRYPTO_METHOD_ANY_SERVER|STREAM_CRYPTO_METHOD_TLS_SERVER|STREAM_CRYPTO_METHOD_TLSv1_0_SERVER|STREAM_CRYPTO_METHOD_TLSv1_1_SERVER|STREAM_CRYPTO_METHOD_TLSv1_2_SERVER|STREAM_CRYPTO_METHOD_TLSv1_3_SERVER', 'session_stream='=>'resource'],
149-
'extract' => ['0|positive-int', '&rw_var_array'=>'array', 'extract_type='=>'EXTR_OVERWRITE|EXTR_SKIP|EXTR_PREFIX_SAME|EXTR_PREFIX_ALL|EXTR_PREFIX_INVALID|EXTR_IF_EXISTS|EXTR_PREFIX_IF_EXISTS|EXTR_REFS', 'prefix='=>'string|null'],
149+
'extract' => ['0|positive-int', 'array'=>'array', 'flags='=>'EXTR_OVERWRITE|EXTR_SKIP|EXTR_PREFIX_SAME|EXTR_PREFIX_ALL|EXTR_PREFIX_INVALID|EXTR_IF_EXISTS|EXTR_PREFIX_IF_EXISTS|EXTR_REFS', 'prefix='=>'string|null'],
150150
'RecursiveIteratorIterator::__construct' => ['void', 'iterator'=>'RecursiveIterator|IteratorAggregate', 'mode='=>'RecursiveIteratorIterator::LEAVES_ONLY|RecursiveIteratorIterator::SELF_FIRST|RecursiveIteratorIterator::CHILD_FIRST', 'flags='=>'0|RecursiveIteratorIterator::CATCH_GET_CHILD'],
151151
'Locale::composeLocale' => ['string|false', 'subtags'=>'array{language:string, script?:string, region?:string, variant?:array<array-key,string>, private?:array<array-key,string>, extlang?:array<array-key,string>, variant0?:string, variant1?:string, variant2?:string, variant3?:string, variant4?:string, variant5?:string, variant6?:string, variant7?:string, variant8?:string, variant9?:string, variant10?:string, variant11?:string, variant12?:string, variant13?:string, variant14?:string, private0?:string, private1?:string, private2?:string, private3?:string, private4?:string, private5?:string, private6?:string, private7?:string, private8?:string, private9?:string, private10?:string, private11?:string, private12?:string, private13?:string, private14?:string, extlang0?:string, extlang1?:string, extlang2?:string}'],
152152
'locale_compose' => ['string|false', 'subtags'=>'array{language:string, script?:string, region?:string, variant?:array<array-key,string>, private?:array<array-key,string>, extlang?:array<array-key,string>, variant0?:string, variant1?:string, variant2?:string, variant3?:string, variant4?:string, variant5?:string, variant6?:string, variant7?:string, variant8?:string, variant9?:string, variant10?:string, variant11?:string, variant12?:string, variant13?:string, variant14?:string, private0?:string, private1?:string, private2?:string, private3?:string, private4?:string, private5?:string, private6?:string, private7?:string, private8?:string, private9?:string, private10?:string, private11?:string, private12?:string, private13?:string, private14?:string, extlang0?:string, extlang1?:string, extlang2?:string}'],

Diff for: resources/functionMap_php74delta.php

+10-10
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
*/
2323
return [
2424
'new' => [
25-
'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'],
26-
'FFI::alignof' => ['int', '&ptr'=>'mixed'],
25+
'FFI::addr' => ['FFI\CData', 'ptr'=>'FFI\CData'],
26+
'FFI::alignof' => ['int', 'ptr'=>'mixed'],
2727
'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dims'=>'array<int,int>'],
28-
'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''],
28+
'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', 'ptr'=>''],
2929
'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'],
30-
'FFI::free' => ['void', '&ptr'=>'FFI\CData'],
30+
'FFI::free' => ['void', 'ptr'=>'FFI\CData'],
3131
'FFI::load' => ['FFI', 'filename'=>'string'],
32-
'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'],
33-
'FFI::memcpy' => ['void', '&dst'=>'FFI\CData', '&src'=>'string|FFI\CData', 'size'=>'int'],
34-
'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'ch'=>'int', 'size'=>'int'],
32+
'FFI::memcmp' => ['int', 'ptr1'=>'FFI\CData|string', 'ptr2'=>'FFI\CData|string', 'size'=>'int'],
33+
'FFI::memcpy' => ['void', 'dst'=>'FFI\CData', 'src'=>'string|FFI\CData', 'size'=>'int'],
34+
'FFI::memset' => ['void', 'ptr'=>'FFI\CData', 'ch'=>'int', 'size'=>'int'],
3535
'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'],
3636
'FFI::scope' => ['FFI', 'scope_name'=>'string'],
37-
'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'],
38-
'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'],
39-
'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'],
37+
'FFI::sizeof' => ['int', 'ptr'=>'FFI\CData|FFI\CType'],
38+
'FFI::string' => ['string', 'ptr'=>'FFI\CData', 'size='=>'int'],
39+
'FFI::typeof' => ['FFI\CType', 'ptr'=>'FFI\CData'],
4040
'FFI::type' => ['FFI\CType', 'type'=>'string'],
4141
'fread' => ['string|false', 'fp'=>'resource', 'length'=>'positive-int'],
4242
'get_mangled_object_vars' => ['array', 'obj'=>'object'],

Diff for: tests/PHPStan/Analyser/nsrt/extract.php

+18
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,21 @@ function doTyped3(array $vars): void
6666

6767
assertVariableCertainty(TrinaryLogic::createNo(), $none);
6868
}
69+
70+
function doTyped4(): void
71+
{
72+
extract(['foo' => 42]);
73+
74+
assertVariableCertainty(TrinaryLogic::createYes(), $foo);
75+
assertType('42', $foo);
76+
}
77+
78+
79+
function doTyped5(): void
80+
{
81+
$foo = ['foo' => 42];
82+
extract($foo);
83+
84+
assertVariableCertainty(TrinaryLogic::createYes(), $foo);
85+
assertType('42', $foo);
86+
}

Diff for: tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -1898,4 +1898,9 @@ public function testBug9224(): void
18981898
$this->analyse([__DIR__ . '/data/bug-9224.php'], []);
18991899
}
19001900

1901+
public function testBug11759(): void
1902+
{
1903+
$this->analyse([__DIR__ . '/data/bug-11759.php'], []);
1904+
}
1905+
19011906
}

Diff for: tests/PHPStan/Rules/Functions/data/bug-11759.php

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
namespace Bug11759;
4+
5+
extract(['answer' => 42 ]);

0 commit comments

Comments
 (0)