private AttributeSyntax AddAggressiveInlining(AttributeSyntax syntax, AttributeData attributeData) { if (attributeData.ConstructorArguments.Length == 0) { return(aggressiveInliningAttribute); } else { var argConst = attributeData.ConstructorArguments[0]; var argSyntax = syntax.ArgumentList.Arguments[0]; if (argSyntax.NameEquals == null) { AttributeArgumentSyntax arg; if (argConst.Type.SpecialType is SpecialType.System_Int16) { arg = argSyntax.WithExpression( BinaryExpression( SyntaxKind.BitwiseOrExpression, argSyntax.Expression, LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(256)))); } else if (SymbolEqualityComparer.Default.Equals(argConst.Type, methodImplOptions)) { arg = argSyntax.WithExpression( BinaryExpression( SyntaxKind.BitwiseOrExpression, argSyntax.Expression, SyntaxHelpers.AggressiveInliningMember(methodImplOptions.ToMinimalDisplayString(semanticModel, position)))); } else { throw new InvalidProgramException("invalid MethodImplAttribute argument"); } return(syntax.WithArgumentList( AttributeArgumentList( syntax.ArgumentList.Arguments.Replace(syntax.ArgumentList.Arguments[0], arg)))); } else { return(syntax.WithArgumentList( AttributeArgumentList( syntax.ArgumentList.Arguments.Insert(0, AttributeArgument(SyntaxHelpers.AggressiveInliningMember(methodImplOptions.ToMinimalDisplayString(semanticModel, position))))))); } } }