/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/ArgumentAnalysisResult.cs
136 строк
6 KB
CyrusNajmabadi
Run 'make struct readonly' on compiler code (#63675)
31 авг 2022, 00:37
Не верифицирован
31 авг 2022, 00:37
4088142
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Collections.Immutable; using System.Diagnostics; namespace Microsoft.CodeAnalysis.CSharp { internal readonly struct ArgumentAnalysisResult { public readonly ImmutableArray<int> ArgsToParamsOpt; public readonly int ArgumentPosition; public readonly int ParameterPosition; public readonly ArgumentAnalysisResultKind Kind; public int ParameterFromArgument(int arg) { Debug.Assert(arg >= 0); if (ArgsToParamsOpt.IsDefault) { return arg; } Debug.Assert(arg < ArgsToParamsOpt.Length); return ArgsToParamsOpt[arg]; } private ArgumentAnalysisResult(ArgumentAnalysisResultKind kind, int argumentPosition, int parameterPosition, ImmutableArray<int> argsToParamsOpt) { this.Kind = kind; this.ArgumentPosition = argumentPosition; this.ParameterPosition = parameterPosition; this.ArgsToParamsOpt = argsToParamsOpt; } public bool IsValid { get { return this.Kind < ArgumentAnalysisResultKind.FirstInvalid; } } public static ArgumentAnalysisResult NameUsedForPositional(int argumentPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.NameUsedForPositional, argumentPosition, 0, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult NoCorrespondingParameter(int argumentPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.NoCorrespondingParameter, argumentPosition, 0, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult NoCorrespondingNamedParameter(int argumentPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.NoCorrespondingNamedParameter, argumentPosition, 0, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult DuplicateNamedArgument(int argumentPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.DuplicateNamedArgument, argumentPosition, 0, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult RequiredParameterMissing(int parameterPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.RequiredParameterMissing, 0, parameterPosition, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult BadNonTrailingNamedArgument(int argumentPosition) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.BadNonTrailingNamedArgument, argumentPosition, 0, default(ImmutableArray<int>)); } public static ArgumentAnalysisResult NormalForm(ImmutableArray<int> argsToParamsOpt) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.Normal, 0, 0, argsToParamsOpt); } public static ArgumentAnalysisResult ExpandedForm(ImmutableArray<int> argsToParamsOpt) { return new ArgumentAnalysisResult(ArgumentAnalysisResultKind.Expanded, 0, 0, argsToParamsOpt); } #if DEBUG #pragma warning disable IDE0051 // Remove unused private members private string Dump() #pragma warning restore IDE0051 // Remove unused private members { string s = ""; switch (Kind) { case ArgumentAnalysisResultKind.Normal: s += "Valid in normal form."; break; case ArgumentAnalysisResultKind.Expanded: s += "Valid in expanded form."; break; case ArgumentAnalysisResultKind.NameUsedForPositional: s += "Invalid because argument " + ArgumentPosition + " had a name."; break; case ArgumentAnalysisResultKind.DuplicateNamedArgument: s += "Invalid because named argument " + ArgumentPosition + " was specified twice."; break; case ArgumentAnalysisResultKind.NoCorrespondingParameter: s += "Invalid because argument " + ArgumentPosition + " has no corresponding parameter."; break; case ArgumentAnalysisResultKind.NoCorrespondingNamedParameter: s += "Invalid because named argument " + ArgumentPosition + " has no corresponding parameter."; break; case ArgumentAnalysisResultKind.RequiredParameterMissing: s += "Invalid because parameter " + ParameterPosition + " has no corresponding argument."; break; case ArgumentAnalysisResultKind.BadNonTrailingNamedArgument: s += "Invalid because named argument " + ParameterPosition + " is used out of position but some following argument(s) are not named."; break; } if (!ArgsToParamsOpt.IsDefault) { for (int i = 0; i < ArgsToParamsOpt.Length; ++i) { s += "\nArgument " + i + " corresponds to parameter " + ArgsToParamsOpt[i]; } } return s; } #endif } }