11 instantiations of ValueSet
ILLink.RoslynAnalyzer (11)
DataFlow\FeatureChecksValue.cs (1)
27EnabledFeatures = new ValueSet<string>(enabledFeature);
DataFlow\InterproceduralState.cs (1)
57Methods = new ValueSet<MethodBodyValue>(methodsList);
ISymbolExtensions.cs (1)
92return featureSet.Count == 0 ? ValueSet<string>.Empty : new ValueSet<string>(featureSet);
src\tools\illink\src\ILLink.Shared\DataFlow\ValueSet.cs (6)
29public static readonly ValueSet<TValue> Unknown = new(UnknownSentinel); 164public static implicit operator ValueSet<TValue>(TValue value) => new(value); 268return new ValueSet<TValue>(values); 290return new ValueSet<TValue>(values); 322return new ValueSet<TValue>(copyValue.DeepCopy()); 327return new ValueSet<TValue>(GetKnownValues().Select(value => value is IDeepCopyValue<TValue> copyValue ? copyValue.DeepCopy() : value));
src\tools\illink\src\ILLink.Shared\TrimAnalysis\ArrayValue.cs (1)
46return new(input.AsEnumerable().Select(v => v is ArrayValue ? UnknownValue.Instance : v));
TrimAnalysis\ArrayValue.cs (1)
19result = MultiValueLattice.Meet(result, new MultiValue(new ArrayValue(sizeValue)));
192 references to ValueSet
ILLink.RoslynAnalyzer (192)
DataFlow\FeatureChecksValue.cs (13)
18public ValueSet<string> EnabledFeatures; 19public ValueSet<string> DisabledFeatures; 21public static readonly FeatureChecksValue All = new FeatureChecksValue(ValueSet<string>.Unknown, ValueSet<string>.Empty); 23public static readonly FeatureChecksValue None = new FeatureChecksValue(ValueSet<string>.Empty, ValueSet<string>.Empty); 28DisabledFeatures = ValueSet<string>.Empty; 31private FeatureChecksValue(ValueSet<string> enabled, ValueSet<string> disabled) 40ValueSet<string>.Union(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()), 41ValueSet<string>.Union(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy())); 47ValueSet<string>.Intersection(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()), 48ValueSet<string>.Intersection(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy()));
DataFlow\FeatureChecksVisitor.cs (1)
14ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>,
DataFlow\FeatureContextLattice.cs (6)
18public ValueSet<string> EnabledFeatures; 20public static readonly FeatureContext All = new FeatureContext(ValueSet<string>.Unknown); 22public static readonly FeatureContext None = new FeatureContext(ValueSet<string>.Empty); 24public FeatureContext(ValueSet<string> enabled) 48return new FeatureContext(ValueSet<string>.Intersection(EnabledFeatures, other.EnabledFeatures)); 53return new FeatureContext(ValueSet<string>.Union(EnabledFeatures, other.EnabledFeatures));
DataFlow\InterproceduralState.cs (2)
18public ValueSet<MethodBodyValue> Methods; 30ValueSet<MethodBodyValue> methods,
DataFlow\LocalDataFlowVisitor.cs (2)
423var capturedReferences = state.Current.LocalState.CapturedReferences.Get(flowCaptureReference.Id); 564var capturedReferences = state.Current.LocalState.CapturedReferences.Get(captureRef.Id);
DataFlow\LocalStateLattice.cs (8)
46public DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>> CapturedReferences; 50new DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>>(default(ValueSet<CapturedReferenceValue>))) 54public LocalState(DefaultValueDictionary<LocalKey, TValue> dictionary, DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>> capturedReferences) 61: this(dictionary, new DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>>(default(ValueSet<CapturedReferenceValue>))) 86public readonly DictionaryLattice<CaptureId, ValueSet<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>> CapturedReferenceLattice; 91CapturedReferenceLattice = new DictionaryLattice<CaptureId, ValueSet<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>>(default(ValueSetLattice<CapturedReferenceValue>));
ISymbolExtensions.cs (2)
84internal static ValueSet<string> GetFeatureGuardAnnotations(this IPropertySymbol propertySymbol) 92return featureSet.Count == 0 ? ValueSet<string>.Empty : new ValueSet<string>(featureSet);
RequiresAnalyzerBase.cs (4)
17using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 349ValueSet<string> featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations(); 383MultiValue instance, 384ImmutableArray<MultiValue> arguments
RequiresDynamicCodeAnalyzer.cs (5)
12using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 49internal override bool IsIntrinsicallyHandled(IMethodSymbol calledMethod, MultiValue instance, ImmutableArray<MultiValue> arguments) 104static bool IsKnownInstantiation(MultiValue genericParametersArray) 128if (!array.TryGetValueByIndex(i, out MultiValue value))
src\tools\illink\src\ILLink.Shared\DataFlow\ValueSet.cs (19)
16public readonly struct ValueSet<TValue> : IEquatable<ValueSet<TValue>>, IDeepCopyValue<ValueSet<TValue>> 21public static readonly ValueSet<TValue> Empty; 29public static readonly ValueSet<TValue> Unknown = new(UnknownSentinel); 164public static implicit operator ValueSet<TValue>(TValue value) => new(value); 169public override bool Equals(object? obj) => obj is ValueSet<TValue> other && Equals(other); 171public bool Equals(ValueSet<TValue> other) 217public static bool operator ==(ValueSet<TValue> left, ValueSet<TValue> right) => left.Equals(right); 218public static bool operator !=(ValueSet<TValue> left, ValueSet<TValue> right) => !(left == right); 223return typeof(ValueSet<TValue>).GetHashCode(); 246internal static ValueSet<TValue> Union(ValueSet<TValue> left, ValueSet<TValue> right) 271internal static ValueSet<TValue> Intersection(ValueSet<TValue> left, ValueSet<TValue> right) 310public ValueSet<TValue> DeepCopy()
src\tools\illink\src\ILLink.Shared\DataFlow\ValueSetLattice.cs (6)
12public readonly struct ValueSetLattice<TValue> : ILattice<ValueSet<TValue>> 15public ValueSet<TValue> Top => default; 17public ValueSet<TValue> Meet(ValueSet<TValue> left, ValueSet<TValue> right) => ValueSet<TValue>.Union(left, right);
src\tools\illink\src\ILLink.Shared\TrimAnalysis\ArrayValue.cs (4)
6using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 19public partial bool TryGetValueByIndex(int index, out MultiValue value); 21public static MultiValue SanitizeArrayElementValue(MultiValue input)
src\tools\illink\src\ILLink.Shared\TrimAnalysis\HandleCallAction.cs (23)
14using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 31public bool Invoke(MethodProxy calledMethod, MultiValue instanceValue, IReadOnlyList<MultiValue> argumentValues, IntrinsicId intrinsicId, out MultiValue methodReturnValue) 33MultiValue? maybeMethodReturnValue; 79MultiValue instanceValue, 80IReadOnlyList<MultiValue> argumentValues, 82out MultiValue? methodReturnValue); 86MultiValue instanceValue, 87IReadOnlyList<MultiValue> argumentValues, 89out MultiValue? methodReturnValue) 91MultiValue? returnValue = methodReturnValue = null; 615foreach (var methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags)) 796foreach (var methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags)) 1121if ((argumentValue as ArrayValue)?.TryGetValueByIndex(0, out var underlyingMultiValue) == true) 1550void AddReturnValue(MultiValue value) 1556private IEnumerable<MultiValue> ProcessGetMethodByName(TypeProxy type, string methodName, BindingFlags? bindingFlags) 1574private bool AnalyzeGenericInstantiationTypeArray(in MultiValue arrayParam, ImmutableArray<GenericParameterValue> genericParameters) 1606if (!array.TryGetValueByIndex(i, out MultiValue value) || value.AsSingleValue() is UnknownValue) 1620if (array.TryGetValueByIndex(i, out MultiValue value)) 1646in MultiValue genericParametersArray, 1674private void ProcessCreateInstanceByName(MethodProxy calledMethod, IReadOnlyList<MultiValue> argumentValues) 1731internal static BindingFlags? GetBindingFlagsFromValue(in MultiValue parameter) => (BindingFlags?)parameter.AsConstInt();
src\tools\illink\src\ILLink.Shared\TrimAnalysis\RequireDynamicallyAccessedMembersAction.cs (2)
9using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 21public void Invoke(in MultiValue value, ValueWithDynamicallyAccessedMembers targetValue)
src\tools\illink\src\ILLink.Shared\TrimAnalysis\ValueExtensions.cs (7)
7using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 45internal static int? AsConstInt(this in MultiValue value) 53internal static SingleValue? AsSingleValue(this in MultiValue node) 62private static ValueSet<SingleValue>.Enumerable Unknown = new ValueSet<SingleValue>.Enumerable(UnknownValue.Instance); 66internal static ValueSet<SingleValue>.Enumerable AsEnumerable(this MultiValue multiValue)
TrimAnalysis\ArrayValue.cs (9)
6using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 12public readonly Dictionary<int, MultiValue> IndexValues; 14public static MultiValue Create(MultiValue size) 16MultiValue result = MultiValueLattice.Top; 25public static MultiValue Create(int size) => Create(new ConstIntValue(size)); 30IndexValues = new Dictionary<int, MultiValue>(); 33public partial bool TryGetValueByIndex(int index, out MultiValue value) 62if (!otherArr.IndexValues.TryGetValue(kvp.Key, out MultiValue value) || !kvp.Value.Equals(value))
TrimAnalysis\FeatureCheckReturnValuePattern.cs (3)
17public ValueSet<string> FeatureCheckAnnotations { get; init; } 23ValueSet<string> featureCheckAnnotations, 51ValueSet<string> returnValueFeatures = ReturnValue.EnabledFeatures;
TrimAnalysis\HandleCallAction.cs (7)
16using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 93MultiValue instanceValue, 94IReadOnlyList<MultiValue> argumentValues, 96out MultiValue? methodReturnValue) 98MultiValue? maybeMethodReturnValue = methodReturnValue = null; 232void AddReturnValue(MultiValue value) 234maybeMethodReturnValue = (maybeMethodReturnValue is null) ? value : multiValueLattice.Meet((MultiValue)maybeMethodReturnValue, value);
TrimAnalysis\TrimAnalysisAssignmentPattern.cs (5)
13using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 19public MultiValue Source { get; init; } 20public MultiValue Target { get; init; } 26MultiValue source, 27MultiValue target,
TrimAnalysis\TrimAnalysisMethodCallPattern.cs (10)
12using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 19public MultiValue Instance { get; init; } 20public ImmutableArray<MultiValue> Arguments { get; init; } 27MultiValue instance, 28ImmutableArray<MultiValue> arguments, 37Arguments = ImmutableArray<MultiValue>.Empty; 41var builder = ImmutableArray.CreateBuilder<MultiValue>(); 42foreach (var argument in arguments) 63var argumentsBuilder = ImmutableArray.CreateBuilder<MultiValue>(); 85TrimAnalysisVisitor.HandleCall(Operation, OwningSymbol, CalledMethod, Instance, Arguments, location, reportDiagnostic, default, out var _);
TrimAnalysis\TrimAnalysisVisitor.cs (50)
18using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 20ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>, 29MultiValue, 48LocalStateAndContextLattice<MultiValue, FeatureContext, ValueSetLattice<SingleValue>, FeatureContextLattice> lattice, 53InterproceduralState<MultiValue, ValueSetLattice<SingleValue>> interproceduralState, 67public override void ApplyCondition(FeatureChecksValue featureChecksValue, ref LocalStateAndContext<MultiValue, FeatureContext> currentState) 78public override MultiValue DefaultVisit(IOperation operation, StateValue argument) 80var returnValue = base.DefaultVisit(operation, argument); 88if (TryGetConstantValue(operation, out var constValue)) 97public override MultiValue VisitArrayCreation(IArrayCreationOperation operation, StateValue state) 99var value = base.VisitArrayCreation(operation, state); 109var arrayValue = ArrayValue.Create(Visit(operation.DimensionSizes[0], state)); 110var elements = operation.Initializer?.ElementValues.Select(val => Visit(val, state)).ToArray() ?? System.Array.Empty<MultiValue>(); 122public override MultiValue VisitConversion(IConversionOperation operation, StateValue state) 124var value = base.VisitConversion(operation, state); 135public override MultiValue VisitParameterReference(IParameterReferenceOperation paramRef, StateValue state) 141public override MultiValue VisitInstanceReference(IInstanceReferenceOperation instanceRef, StateValue state) 157public override MultiValue VisitFieldReference(IFieldReferenceOperation fieldRef, StateValue state) 175if (TryGetConstantValue(fieldRef, out var constValue)) 182public override MultiValue VisitTypeOf(ITypeOfOperation typeOfOperation, StateValue state) 187public override MultiValue VisitBinaryOperator(IBinaryOperation operation, StateValue argument) 194MultiValue leftValue = Visit(operation.LeftOperand, argument); 195MultiValue rightValue = Visit(operation.RightOperand, argument); 197MultiValue result = TopValue; 227public override MultiValue GetFieldTargetValue(IFieldReferenceOperation fieldReference, in FeatureContext featureContext) 240public override MultiValue GetBackingFieldTargetValue(IPropertyReferenceOperation propertyReference, in FeatureContext featureContext) 254public override MultiValue GetParameterTargetValue(IParameterSymbol parameter) 257public override void HandleAssignment(MultiValue source, MultiValue target, IOperation operation, in FeatureContext featureContext) 269public override MultiValue HandleArrayElementRead(MultiValue arrayValue, MultiValue indexValue, IOperation operation) 279MultiValue result = TopValue; 282if (value is ArrayValue arr && arr.TryGetValueByIndex(index, out var elementValue)) 290public override void HandleArrayElementWrite(MultiValue arrayValue, MultiValue indexValue, MultiValue valueToWrite, IOperation operation, bool merge) 304var sanitizedValue = ArrayValue.SanitizeArrayElementValue(valueToWrite); 317public override MultiValue HandleMethodCall( 319MultiValue instance, 320ImmutableArray<MultiValue> arguments, 334HandleCall(operation, OwningSymbol, calledMethod, instance, arguments, Location.None, null, _multiValueLattice, out MultiValue methodReturnValue); 347foreach (var argument in arguments) 365MultiValue instance, 366ImmutableArray<MultiValue> arguments, 370out MultiValue methodReturnValue) 384public override void HandleReturnValue(MultiValue returnValue, IOperation operation, in FeatureContext featureContext) 413var featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations(); 423public override MultiValue HandleDelegateCreation(IMethodSymbol method, IOperation operation, in FeatureContext featureContext) 487private static bool TryGetConstantValue(IOperation operation, out MultiValue constValue)
TrimAnalysis\TrimDataFlowAnalysis.cs (4)
17ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>, 20using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 25MultiValue, 64InterproceduralState<MultiValue, ValueSetLattice<SingleValue>> interproceduralState)