| File: DataFlow\FeatureChecksValue.cs | Web Access |
| Project: src\runtime\src\tools\illink\src\ILLink.RoslynAnalyzer\ILLink.RoslynAnalyzer.csproj (ILLink.RoslynAnalyzer) |
// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using ILLink.Shared.DataFlow; namespace ILLink.RoslynAnalyzer.DataFlow { // Represents the feature conditions checked in a conditional expression, // such as // Debug.Assert(RuntimeFeatures.IsDynamicCodeSupported) // or // if (!RuntimeFeatures.IsDynamicCodeSupported) // For now, this is only designed to track the built-in "features"/"capabilities" // like RuntimeFeatures.IsDynamicCodeSupported, where a true return value // indicates that a feature/capability is available. public record struct FeatureChecksValue : INegate<FeatureChecksValue>, IDeepCopyValue<FeatureChecksValue> { public ValueSet<string> EnabledFeatures; public ValueSet<string> DisabledFeatures; public static readonly FeatureChecksValue All = new FeatureChecksValue(ValueSet<string>.Unknown, ValueSet<string>.Empty); public static readonly FeatureChecksValue None = new FeatureChecksValue(ValueSet<string>.Empty, ValueSet<string>.Empty); public FeatureChecksValue(string enabledFeature) { EnabledFeatures = new ValueSet<string>(enabledFeature); DisabledFeatures = ValueSet<string>.Empty; } private FeatureChecksValue(ValueSet<string> enabled, ValueSet<string> disabled) { EnabledFeatures = enabled; DisabledFeatures = disabled; } public FeatureChecksValue And(FeatureChecksValue other) { return new FeatureChecksValue( ValueSet<string>.Union(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()), ValueSet<string>.Union(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy())); } public FeatureChecksValue Or(FeatureChecksValue other) { return new FeatureChecksValue( ValueSet<string>.Intersection(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()), ValueSet<string>.Intersection(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy())); } public FeatureChecksValue Negate() { return new FeatureChecksValue(DisabledFeatures.DeepCopy(), EnabledFeatures.DeepCopy()); } public FeatureChecksValue DeepCopy() { return new FeatureChecksValue(EnabledFeatures.DeepCopy(), DisabledFeatures.DeepCopy()); } } }