|
50 | 50 | use function constant; |
51 | 51 | use function count; |
52 | 52 | use function defined; |
| 53 | +use function is_int; |
53 | 54 | use function is_string; |
54 | 55 | use function sprintf; |
55 | 56 | use const ARRAY_FILTER_USE_BOTH; |
@@ -126,33 +127,46 @@ public static function selectFromArgs( |
126 | 127 |
|
127 | 128 | if (count($args) >= 3 && (bool) $args[0]->getAttribute(CurlSetOptArgVisitor::ATTRIBUTE_NAME)) { |
128 | 129 | $optType = $scope->getType($args[1]->value); |
129 | | - if ($optType instanceof ConstantIntegerType) { |
130 | | - $optValueType = self::getCurlOptValueType($optType->getValue()); |
131 | | - |
132 | | - if ($optValueType !== null) { |
133 | | - $acceptor = $parametersAcceptors[0]; |
134 | | - $parameters = $acceptor->getParameters(); |
135 | | - |
136 | | - $parameters[2] = new NativeParameterReflection( |
137 | | - $parameters[2]->getName(), |
138 | | - $parameters[2]->isOptional(), |
139 | | - $optValueType, |
140 | | - $parameters[2]->passedByReference(), |
141 | | - $parameters[2]->isVariadic(), |
142 | | - $parameters[2]->getDefaultValue(), |
143 | | - ); |
144 | | - |
145 | | - $parametersAcceptors = [ |
146 | | - new FunctionVariant( |
147 | | - $acceptor->getTemplateTypeMap(), |
148 | | - $acceptor->getResolvedTemplateTypeMap(), |
149 | | - array_values($parameters), |
150 | | - $acceptor->isVariadic(), |
151 | | - $acceptor->getReturnType(), |
152 | | - $acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(), |
153 | | - ), |
154 | | - ]; |
| 130 | + |
| 131 | + $valueTypes = []; |
| 132 | + foreach ($optType->getConstantScalarValues() as $scalarValue) { |
| 133 | + if (!is_int($scalarValue)) { |
| 134 | + $valueTypes = []; |
| 135 | + break; |
| 136 | + } |
| 137 | + |
| 138 | + $valueType = self::getCurlOptValueType($scalarValue); |
| 139 | + if ($valueType === null) { |
| 140 | + $valueTypes = []; |
| 141 | + break; |
155 | 142 | } |
| 143 | + |
| 144 | + $valueTypes[] = $valueType; |
| 145 | + } |
| 146 | + |
| 147 | + if (count($valueTypes) !== 0) { |
| 148 | + $acceptor = $parametersAcceptors[0]; |
| 149 | + $parameters = $acceptor->getParameters(); |
| 150 | + |
| 151 | + $parameters[2] = new NativeParameterReflection( |
| 152 | + $parameters[2]->getName(), |
| 153 | + $parameters[2]->isOptional(), |
| 154 | + TypeCombinator::union(...$valueTypes), |
| 155 | + $parameters[2]->passedByReference(), |
| 156 | + $parameters[2]->isVariadic(), |
| 157 | + $parameters[2]->getDefaultValue(), |
| 158 | + ); |
| 159 | + |
| 160 | + $parametersAcceptors = [ |
| 161 | + new FunctionVariant( |
| 162 | + $acceptor->getTemplateTypeMap(), |
| 163 | + $acceptor->getResolvedTemplateTypeMap(), |
| 164 | + array_values($parameters), |
| 165 | + $acceptor->isVariadic(), |
| 166 | + $acceptor->getReturnType(), |
| 167 | + $acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(), |
| 168 | + ), |
| 169 | + ]; |
156 | 170 | } |
157 | 171 | } |
158 | 172 |
|
|
0 commit comments