예제 #1
0
        internal virtual ImmutableArray <CustomModifier> SubstituteCustomModifiers(
            ImmutableArray <CustomModifier> customModifiers
            )
        {
            if (customModifiers.IsDefaultOrEmpty)
            {
                return(customModifiers);
            }

            for (int i = 0; i < customModifiers.Length; i++)
            {
                NamedTypeSymbol modifier =
                    ((CSharpCustomModifier)customModifiers[i]).ModifierSymbol;
                var substituted = SubstituteNamedType(modifier);

                if (!TypeSymbol.Equals(modifier, substituted, TypeCompareKind.ConsiderEverything2))
                {
                    var builder = ArrayBuilder <CustomModifier> .GetInstance(customModifiers.Length);

                    builder.AddRange(customModifiers, i);

                    builder.Add(
                        customModifiers[i].IsOptional
                          ? CSharpCustomModifier.CreateOptional(substituted)
                          : CSharpCustomModifier.CreateRequired(substituted)
                        );
                    for (i++; i < customModifiers.Length; i++)
                    {
                        modifier    = ((CSharpCustomModifier)customModifiers[i]).ModifierSymbol;
                        substituted = SubstituteNamedType(modifier);

                        if (
                            !TypeSymbol.Equals(
                                modifier,
                                substituted,
                                TypeCompareKind.ConsiderEverything2
                                )
                            )
                        {
                            builder.Add(
                                customModifiers[i].IsOptional
                                  ? CSharpCustomModifier.CreateOptional(substituted)
                                  : CSharpCustomModifier.CreateRequired(substituted)
                                );
                        }
                        else
                        {
                            builder.Add(customModifiers[i]);
                        }
                    }

                    Debug.Assert(builder.Count == customModifiers.Length);
                    return(builder.ToImmutableAndFree());
                }
            }

            return(customModifiers);
        }
예제 #2
0
        internal ImmutableArray <CustomModifier> SubstituteCustomModifiers(ImmutableArray <CustomModifier> customModifiers)
        {
            if (customModifiers.IsDefaultOrEmpty)
            {
                return(customModifiers);
            }

            for (int i = 0; i < customModifiers.Length; i++)
            {
                var modifier    = (NamedTypeSymbol)customModifiers[i].Modifier;
                var substituted = SubstituteNamedType(modifier);

                if (modifier != substituted)
                {
                    var builder = ArrayBuilder <CustomModifier> .GetInstance(customModifiers.Length);

                    builder.AddRange(customModifiers, i);

                    builder.Add(customModifiers[i].IsOptional ? CSharpCustomModifier.CreateOptional(substituted) : CSharpCustomModifier.CreateRequired(substituted));
                    for (i++; i < customModifiers.Length; i++)
                    {
                        modifier    = (NamedTypeSymbol)customModifiers[i].Modifier;
                        substituted = SubstituteNamedType(modifier);

                        if (modifier != substituted)
                        {
                            builder.Add(customModifiers[i].IsOptional ? CSharpCustomModifier.CreateOptional(substituted) : CSharpCustomModifier.CreateRequired(substituted));
                        }
                        else
                        {
                            builder.Add(customModifiers[i]);
                        }
                    }

                    Debug.Assert(builder.Count == customModifiers.Length);
                    return(builder.ToImmutableAndFree());
                }
            }

            return(customModifiers);
        }
 internal CodeblockEvalMethod(NamedTypeSymbol container)
     : base(container, "Eval")
 {
     if (this.Manager.Compilation.Options.XSharpRuntime)
     {
         _parameters = ImmutableArray.Create <ParameterSymbol>(
             new SynthesizedParamsParameterSymbol(this, this.Manager.Compilation.CreateArrayTypeSymbol(this.Manager.UsualType), 0, RefKind.None, "args")
             );
     }
     else
     {
         _parameters = ImmutableArray.Create <ParameterSymbol>(
             new SynthesizedParamsParameterSymbol(this, this.Manager.Compilation.CreateArrayTypeSymbol(this.Manager.UsualType), 0, RefKind.None, "args",
                                                  customModifiers: new[] { CSharpCustomModifier.CreateOptional(this.Manager.Compilation.GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_IsConst)) }.ToImmutableArray())
             );
     }
 }