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); }
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()) ); } }