|
186 | 186 | use function is_array; |
187 | 187 | use function is_int; |
188 | 188 | use function is_string; |
| 189 | +use function max; |
189 | 190 | use function sprintf; |
190 | 191 | use function strtolower; |
191 | 192 | use function trim; |
@@ -3301,33 +3302,34 @@ private function doCreateCallableParameters(Scope $scope, Expr $closureExpr, ?ar |
3301 | 3302 |
|
3302 | 3303 | $acceptors = $passedToType->getCallableParametersAcceptors($scope); |
3303 | 3304 | foreach ($acceptors as $acceptor) { |
| 3305 | + $acceptorParameters = array_map(static fn (ParameterReflection $callableParameter) => new NativeParameterReflection( |
| 3306 | + $callableParameter->getName(), |
| 3307 | + $callableParameter->isOptional(), |
| 3308 | + $callableParameter->getType(), |
| 3309 | + $callableParameter->passedByReference(), |
| 3310 | + $callableParameter->isVariadic(), |
| 3311 | + $callableParameter->getDefaultValue(), |
| 3312 | + ), $acceptor->getParameters()); |
| 3313 | + |
3304 | 3314 | if ($callableParameters === null) { |
3305 | | - $callableParameters = array_map(static fn (ParameterReflection $callableParameter) => new NativeParameterReflection( |
3306 | | - $callableParameter->getName(), |
3307 | | - $callableParameter->isOptional(), |
3308 | | - $callableParameter->getType(), |
3309 | | - $callableParameter->passedByReference(), |
3310 | | - $callableParameter->isVariadic(), |
3311 | | - $callableParameter->getDefaultValue(), |
3312 | | - ), $acceptor->getParameters()); |
| 3315 | + $callableParameters = $acceptorParameters; |
3313 | 3316 | continue; |
3314 | 3317 | } |
3315 | 3318 |
|
3316 | 3319 | $newParameters = []; |
3317 | | - foreach ($acceptor->getParameters() as $i => $callableParameter) { |
| 3320 | + $parameterCount = max(count($callableParameters), count($acceptorParameters)); |
| 3321 | + for ($i = 0; $i < $parameterCount; $i++) { |
| 3322 | + if (!array_key_exists($i, $acceptorParameters)) { |
| 3323 | + $newParameters[] = $callableParameters[$i]->toOptional(); |
| 3324 | + continue; |
| 3325 | + } |
| 3326 | + |
3318 | 3327 | if (!array_key_exists($i, $callableParameters)) { |
3319 | | - $newParameters[] = $callableParameter; |
| 3328 | + $newParameters[] = $acceptorParameters[$i]->toOptional(); |
3320 | 3329 | continue; |
3321 | 3330 | } |
3322 | 3331 |
|
3323 | | - $newParameters[] = $callableParameters[$i]->union(new NativeParameterReflection( |
3324 | | - $callableParameter->getName(), |
3325 | | - $callableParameter->isOptional(), |
3326 | | - $callableParameter->getType(), |
3327 | | - $callableParameter->passedByReference(), |
3328 | | - $callableParameter->isVariadic(), |
3329 | | - $callableParameter->getDefaultValue(), |
3330 | | - )); |
| 3332 | + $newParameters[] = $callableParameters[$i]->union($acceptorParameters[$i]); |
3331 | 3333 | } |
3332 | 3334 |
|
3333 | 3335 | $callableParameters = $newParameters; |
|
0 commit comments