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\runtime\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\runtime\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)));
190 references to ValueSet
ILLink.RoslynAnalyzer (190)
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)
489var capturedReferences = state.Current.LocalState.CapturedReferences.Get(flowCaptureReference.Id); 630var capturedReferences = state.Current.LocalState.CapturedReferences.Get(captureRef.Id);
DataFlow\LocalStateLattice.cs (6)
46public DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>> CapturedReferences; 48public LocalState(DefaultValueDictionary<LocalKey, TValue> dictionary, DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>> capturedReferences) 55: this(dictionary, new DefaultValueDictionary<CaptureId, ValueSet<CapturedReferenceValue>>(default(ValueSet<CapturedReferenceValue>))) 80public readonly DictionaryLattice<CaptureId, ValueSet<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>> CapturedReferenceLattice; 85CapturedReferenceLattice = 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)
18using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 372ValueSet<string> featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations(); 406MultiValue instance, 407ImmutableArray<MultiValue> arguments
RequiresDynamicCodeAnalyzer.cs (5)
12using MultiValue = ILLink.Shared.DataFlow.ValueSet<ILLink.Shared.DataFlow.SingleValue>; 50internal override bool IsIntrinsicallyHandled(IMethodSymbol calledMethod, MultiValue instance, ImmutableArray<MultiValue> arguments) 117static bool IsKnownInstantiation(MultiValue genericParametersArray) 141if (!array.TryGetValueByIndex(i, out MultiValue value))
src\runtime\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\runtime\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\runtime\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\runtime\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; 638foreach (var methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags)) 819foreach (var methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags)) 1145if ((argumentValue as ArrayValue)?.TryGetValueByIndex(0, out var underlyingMultiValue) == true) 1637void AddReturnValue(MultiValue value) 1643private IEnumerable<MultiValue> ProcessGetMethodByName(TypeProxy type, string methodName, BindingFlags? bindingFlags) 1661private bool AnalyzeGenericInstantiationTypeArray(in MultiValue arrayParam, ImmutableArray<GenericParameterValue> genericParameters) 1693if (!array.TryGetValueByIndex(i, out MultiValue value) || value.AsSingleValue() is UnknownValue) 1707if (array.TryGetValueByIndex(i, out MultiValue value)) 1733in MultiValue genericParametersArray, 1761private void ProcessCreateInstanceByName(MethodProxy calledMethod, IReadOnlyList<MultiValue> argumentValues) 1818internal static BindingFlags? GetBindingFlagsFromValue(in MultiValue parameter) => (BindingFlags?)parameter.AsConstInt();
src\runtime\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\runtime\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>; 98MultiValue instanceValue, 99IReadOnlyList<MultiValue> argumentValues, 101out MultiValue? methodReturnValue) 103MultiValue? maybeMethodReturnValue = methodReturnValue = null; 237void AddReturnValue(MultiValue value) 239maybeMethodReturnValue = (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>(); 86TrimAnalysisVisitor.HandleCall(context.TrimAnalyzer, FeatureContext, typeNameResolver, 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, 51LocalStateAndContextLattice<MultiValue, FeatureContext, ValueSetLattice<SingleValue>, FeatureContextLattice> lattice, 56InterproceduralState<MultiValue, ValueSetLattice<SingleValue>> interproceduralState, 72public override void ApplyCondition(FeatureChecksValue featureChecksValue, ref LocalStateAndContext<MultiValue, FeatureContext> currentState) 83public override MultiValue DefaultVisit(IOperation operation, StateValue argument) 85var returnValue = base.DefaultVisit(operation, argument); 93if (TryGetConstantValue(operation, out var constValue)) 102public override MultiValue VisitArrayCreation(IArrayCreationOperation operation, StateValue state) 104var value = base.VisitArrayCreation(operation, state); 114var arrayValue = ArrayValue.Create(Visit(operation.DimensionSizes[0], state)); 115var elements = operation.Initializer?.ElementValues.Select(val => Visit(val, state)).ToArray() ?? System.Array.Empty<MultiValue>(); 127public override MultiValue VisitConversion(IConversionOperation operation, StateValue state) 129var value = base.VisitConversion(operation, state); 140public override MultiValue VisitParameterReference(IParameterReferenceOperation paramRef, StateValue state) 146public override MultiValue VisitInstanceReference(IInstanceReferenceOperation instanceRef, StateValue state) 162public override MultiValue VisitFieldReference(IFieldReferenceOperation fieldRef, StateValue state) 185if (TryGetConstantValue(fieldRef, out var constValue)) 192public override MultiValue VisitTypeOf(ITypeOfOperation typeOfOperation, StateValue state) 197public override MultiValue VisitBinaryOperator(IBinaryOperation operation, StateValue argument) 204MultiValue leftValue = Visit(operation.LeftOperand, argument); 205MultiValue rightValue = Visit(operation.RightOperand, argument); 207MultiValue result = TopValue; 237public override MultiValue GetFieldTargetValue(IFieldReferenceOperation fieldReference, in FeatureContext featureContext) 250public override MultiValue GetBackingFieldTargetValue(IPropertyReferenceOperation propertyReference, in FeatureContext featureContext) 264public override MultiValue GetParameterTargetValue(IParameterSymbol parameter) 280public override void HandleAssignment(MultiValue source, MultiValue target, IOperation operation, in FeatureContext featureContext) 292public override MultiValue HandleArrayElementRead(MultiValue arrayValue, MultiValue indexValue, IOperation operation) 302MultiValue result = TopValue; 305if (value is ArrayValue arr && arr.TryGetValueByIndex(index, out var elementValue)) 313public override void HandleArrayElementWrite(MultiValue arrayValue, MultiValue indexValue, MultiValue valueToWrite, IOperation operation, bool merge) 327var sanitizedValue = ArrayValue.SanitizeArrayElementValue(valueToWrite); 340public override MultiValue HandleMethodCall( 342MultiValue instance, 343ImmutableArray<MultiValue> arguments, 357HandleCall(_trimAnalyzer, FeatureContext.None, _typeNameResolver, operation, OwningSymbol, calledMethod, instance, arguments, Location.None, null, _multiValueLattice, out MultiValue methodReturnValue); 370foreach (var argument in arguments) 391MultiValue instance, 392ImmutableArray<MultiValue> arguments, 396out MultiValue methodReturnValue) 410public override void HandleReturnValue(MultiValue returnValue, IOperation operation, in FeatureContext featureContext) 439var featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations(); 449public override MultiValue HandleDelegateCreation(IMethodSymbol method, IOperation operation, in FeatureContext featureContext) 513private 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)