コード例 #1
0
            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)))))));
                    }
                }
            }