|
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