@@ -407,32 +407,35 @@ public override async Task<CSharpSyntaxNode> VisitSimpleArgument(VBasic.Syntax.S
407407 return await node . Expression . AcceptAsync ( TriviaConvertingExpressionVisitor ) ;
408408 var symbol = GetInvocationSymbol ( invocation ) ;
409409 SyntaxToken token = default ( SyntaxToken ) ;
410- var convertedArgExpression = ( ExpressionSyntax ) await node . Expression . AcceptAsync ( TriviaConvertingExpressionVisitor ) ;
410+ var convertedArgExpression = ( ( ExpressionSyntax ) await node . Expression . AcceptAsync ( TriviaConvertingExpressionVisitor ) ) . SkipParens ( ) ;
411411 if ( symbol is IMethodSymbol methodSymbol ) {
412412 var parameters = ( CommonConversions . GetCsOriginalSymbolOrNull ( methodSymbol . OriginalDefinition ) ?? methodSymbol ) . GetParameters ( ) ;
413413 var refType = GetRefConversionType ( node , argList , parameters , out var argName , out var refKind ) ;
414- var convertedExpressionWithoutCast = convertedArgExpression ;
415- convertedArgExpression = CommonConversions . TypeConversionAnalyzer . AddExplicitConversion ( node . Expression , convertedArgExpression , defaultToCast : refKind != RefKind . None ) ;
416414
417415 if ( refType != RefConversion . Inline ) {
418416 string prefix = $ "arg{ argName } ";
417+ var refLhs = convertedArgExpression ;
419418 var expressionTypeInfo = _semanticModel . GetTypeInfo ( node . Expression ) ;
420419 bool useVar = expressionTypeInfo . Type ? . Equals ( expressionTypeInfo . ConvertedType ) == true && ! CommonConversions . ShouldPreferExplicitType ( node . Expression , expressionTypeInfo . ConvertedType , out var _ ) ;
421420 var typeSyntax = CommonConversions . GetTypeSyntax ( expressionTypeInfo . ConvertedType , useVar ) ;
422421
423- if ( convertedExpressionWithoutCast . SkipParens ( ) is ElementAccessExpressionSyntax eae ) {
422+ if ( convertedArgExpression is ElementAccessExpressionSyntax eae ) {
424423 //Hoist out the container so we can assign back to the same one after (like VB does)
425424 var tmpContainer = _additionalLocals . Hoist ( new AdditionalDeclaration ( "tmp" , eae . Expression , ValidSyntaxFactory . VarType ) ) ;
426- convertedExpressionWithoutCast = eae . WithExpression ( tmpContainer . IdentifierName ) ;
427- convertedArgExpression = convertedArgExpression . ReplaceNode ( eae , convertedExpressionWithoutCast ) ;
425+ convertedArgExpression = eae . WithExpression ( tmpContainer . IdentifierName ) ;
428426 }
427+
428+ convertedArgExpression = CommonConversions . TypeConversionAnalyzer . AddExplicitConversion ( node . Expression , convertedArgExpression , defaultToCast : refKind != RefKind . None ) ;
429+
429430 var local = _additionalLocals . Hoist ( new AdditionalDeclaration ( prefix , convertedArgExpression , typeSyntax ) ) ;
431+ convertedArgExpression = local . IdentifierName ;
430432
431433 if ( refType == RefConversion . PreAndPostAssignment ) {
432434 var convertedLocalIdentifier = CommonConversions . TypeConversionAnalyzer . AddExplicitConversion ( node . Expression , local . IdentifierName , forceSourceType : expressionTypeInfo . ConvertedType , forceTargetType : expressionTypeInfo . Type ) ;
433- _additionalLocals . Hoist ( new AdditionalAssignment ( convertedExpressionWithoutCast , convertedLocalIdentifier ) ) ;
435+ _additionalLocals . Hoist ( new AdditionalAssignment ( refLhs , convertedLocalIdentifier ) ) ;
434436 }
435- convertedArgExpression = local . IdentifierName ;
437+ } else {
438+ convertedArgExpression = CommonConversions . TypeConversionAnalyzer . AddExplicitConversion ( node . Expression , convertedArgExpression , defaultToCast : refKind != RefKind . None ) ;
436439 }
437440 token = GetRefToken ( refKind ) ;
438441 } else {
0 commit comments