@@ -5767,85 +5767,84 @@ private function processArgs(
57675767
57685768 $ scope = $ scope ->restoreOriginalScopeAfterClosureBind ($ originalScope );
57695769 }
5770- foreach ($ args as $ i => $ arg ) {
5771- if (!isset ($ parameters ) || $ parametersAcceptor === null ) {
5772- continue ;
5773- }
5774-
5775- $ byRefType = new MixedType ();
5776- $ assignByReference = false ;
5777- $ currentParameter = null ;
5778- if (isset ($ parameters [$ i ])) {
5779- $ currentParameter = $ parameters [$ i ];
5780- } elseif (count ($ parameters ) > 0 && $ parametersAcceptor ->isVariadic ()) {
5781- $ currentParameter = array_last ($ parameters );
5782- }
57835770
5784- if ($ currentParameter !== null ) {
5785- $ assignByReference = $ currentParameter ->passedByReference ()->createsNewVariable ();
5786- if ($ assignByReference ) {
5787- if ($ currentParameter instanceof ExtendedParameterReflection && $ currentParameter ->getOutType () !== null ) {
5788- $ byRefType = $ currentParameter ->getOutType ();
5789- } elseif (
5790- $ calleeReflection instanceof MethodReflection
5791- && !$ calleeReflection ->getDeclaringClass ()->isBuiltin ()
5792- ) {
5793- $ byRefType = $ currentParameter ->getType ();
5794- } elseif (
5795- $ calleeReflection instanceof FunctionReflection
5796- && !$ calleeReflection ->isBuiltin ()
5797- ) {
5798- $ byRefType = $ currentParameter ->getType ();
5799- }
5771+ if (isset ($ parameters ) && $ parametersAcceptor !== null ) {
5772+ foreach ($ args as $ i => $ arg ) {
5773+ $ byRefType = new MixedType ();
5774+ $ assignByReference = false ;
5775+ $ currentParameter = null ;
5776+ if (isset ($ parameters [$ i ])) {
5777+ $ currentParameter = $ parameters [$ i ];
5778+ } elseif (count ($ parameters ) > 0 && $ parametersAcceptor ->isVariadic ()) {
5779+ $ currentParameter = array_last ($ parameters );
58005780 }
5801- }
58025781
5803- if ($ assignByReference ) {
5804- if ($ currentParameter === null ) {
5805- throw new ShouldNotHappenException ();
5782+ if ($ currentParameter !== null ) {
5783+ $ assignByReference = $ currentParameter ->passedByReference ()->createsNewVariable ();
5784+ if ($ assignByReference ) {
5785+ if ($ currentParameter instanceof ExtendedParameterReflection && $ currentParameter ->getOutType () !== null ) {
5786+ $ byRefType = $ currentParameter ->getOutType ();
5787+ } elseif (
5788+ $ calleeReflection instanceof MethodReflection
5789+ && !$ calleeReflection ->getDeclaringClass ()->isBuiltin ()
5790+ ) {
5791+ $ byRefType = $ currentParameter ->getType ();
5792+ } elseif (
5793+ $ calleeReflection instanceof FunctionReflection
5794+ && !$ calleeReflection ->isBuiltin ()
5795+ ) {
5796+ $ byRefType = $ currentParameter ->getType ();
5797+ }
5798+ }
58065799 }
58075800
5808- $ argValue = $ arg ->value ;
5809- if (!$ argValue instanceof Variable || $ argValue ->name !== 'this ' ) {
5810- $ paramOutType = $ this ->getParameterOutExtensionsType ($ callLike , $ calleeReflection , $ currentParameter , $ scope );
5811- if ($ paramOutType !== null ) {
5812- $ byRefType = $ paramOutType ;
5801+ if ($ assignByReference ) {
5802+ if ($ currentParameter === null ) {
5803+ throw new ShouldNotHappenException ();
58135804 }
58145805
5815- $ scope = $ this ->processVirtualAssign (
5816- $ scope ,
5817- $ storage ,
5818- $ stmt ,
5819- $ argValue ,
5820- new TypeExpr ($ byRefType ),
5821- $ nodeCallback ,
5822- )->getScope ();
5823- $ scope = $ this ->lookForUnsetAllowedUndefinedExpressions ($ scope , $ argValue );
5824- }
5825- } elseif ($ calleeReflection !== null && $ calleeReflection ->hasSideEffects ()->yes ()) {
5826- $ argType = $ scope ->getType ($ arg ->value );
5827- if (!$ argType ->isObject ()->no ()) {
5828- $ nakedReturnType = null ;
5829- if ($ nakedMethodReflection !== null ) {
5830- $ nakedParametersAcceptor = ParametersAcceptorSelector::selectFromArgs (
5806+ $ argValue = $ arg ->value ;
5807+ if (!$ argValue instanceof Variable || $ argValue ->name !== 'this ' ) {
5808+ $ paramOutType = $ this ->getParameterOutExtensionsType ($ callLike , $ calleeReflection , $ currentParameter , $ scope );
5809+ if ($ paramOutType !== null ) {
5810+ $ byRefType = $ paramOutType ;
5811+ }
5812+
5813+ $ scope = $ this ->processVirtualAssign (
58315814 $ scope ,
5832- $ args ,
5833- $ nakedMethodReflection ->getVariants (),
5834- $ nakedMethodReflection ->getNamedArgumentsVariants (),
5835- );
5836- $ nakedReturnType = $ nakedParametersAcceptor ->getReturnType ();
5837- }
5838- if (
5839- $ nakedReturnType === null
5840- || !(new ThisType ($ nakedMethodReflection ->getDeclaringClass ()))->isSuperTypeOf ($ nakedReturnType )->yes ()
5841- || $ nakedMethodReflection ->isPure ()->no ()
5842- ) {
5815+ $ storage ,
5816+ $ stmt ,
5817+ $ argValue ,
5818+ new TypeExpr ($ byRefType ),
5819+ $ nodeCallback ,
5820+ )->getScope ();
5821+ $ scope = $ this ->lookForUnsetAllowedUndefinedExpressions ($ scope , $ argValue );
5822+ }
5823+ } elseif ($ calleeReflection !== null && $ calleeReflection ->hasSideEffects ()->yes ()) {
5824+ $ argType = $ scope ->getType ($ arg ->value );
5825+ if (!$ argType ->isObject ()->no ()) {
5826+ $ nakedReturnType = null ;
5827+ if ($ nakedMethodReflection !== null ) {
5828+ $ nakedParametersAcceptor = ParametersAcceptorSelector::selectFromArgs (
5829+ $ scope ,
5830+ $ args ,
5831+ $ nakedMethodReflection ->getVariants (),
5832+ $ nakedMethodReflection ->getNamedArgumentsVariants (),
5833+ );
5834+ $ nakedReturnType = $ nakedParametersAcceptor ->getReturnType ();
5835+ }
5836+ if (
5837+ $ nakedReturnType === null
5838+ || !(new ThisType ($ nakedMethodReflection ->getDeclaringClass ()))->isSuperTypeOf ($ nakedReturnType )->yes ()
5839+ || $ nakedMethodReflection ->isPure ()->no ()
5840+ ) {
5841+ $ this ->callNodeCallback ($ nodeCallback , new InvalidateExprNode ($ arg ->value ), $ scope , $ storage );
5842+ $ scope = $ scope ->invalidateExpression ($ arg ->value , true );
5843+ }
5844+ } elseif (!(new ResourceType ())->isSuperTypeOf ($ argType )->no ()) {
58435845 $ this ->callNodeCallback ($ nodeCallback , new InvalidateExprNode ($ arg ->value ), $ scope , $ storage );
58445846 $ scope = $ scope ->invalidateExpression ($ arg ->value , true );
58455847 }
5846- } elseif (!(new ResourceType ())->isSuperTypeOf ($ argType )->no ()) {
5847- $ this ->callNodeCallback ($ nodeCallback , new InvalidateExprNode ($ arg ->value ), $ scope , $ storage );
5848- $ scope = $ scope ->invalidateExpression ($ arg ->value , true );
58495848 }
58505849 }
58515850 }
0 commit comments