11 instantiations of ValueSet
ILLink.RoslynAnalyzer (11)
DataFlow\FeatureChecksValue.cs (1)
27
EnabledFeatures = new
ValueSet
<string>(enabledFeature);
DataFlow\InterproceduralState.cs (1)
57
Methods = new
ValueSet
<MethodBodyValue>(methodsList);
ISymbolExtensions.cs (1)
92
return featureSet.Count == 0 ? ValueSet<string>.Empty : new
ValueSet
<string>(featureSet);
src\runtime\src\tools\illink\src\ILLink.Shared\DataFlow\ValueSet.cs (6)
29
public static readonly ValueSet<TValue> Unknown =
new
(UnknownSentinel);
164
public static implicit operator ValueSet<TValue>(TValue value) =>
new
(value);
268
return new
ValueSet
<TValue>(values);
290
return new
ValueSet
<TValue>(values);
322
return new
ValueSet
<TValue>(copyValue.DeepCopy());
327
return 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)
46
return
new
(input.AsEnumerable().Select(v => v is ArrayValue ? UnknownValue.Instance : v));
TrimAnalysis\ArrayValue.cs (1)
19
result = MultiValueLattice.Meet(result, new
MultiValue
(new ArrayValue(sizeValue)));
190 references to ValueSet
ILLink.RoslynAnalyzer (190)
DataFlow\FeatureChecksValue.cs (13)
18
public
ValueSet
<string> EnabledFeatures;
19
public
ValueSet
<string> DisabledFeatures;
21
public static readonly FeatureChecksValue All = new FeatureChecksValue(
ValueSet
<string>.Unknown,
ValueSet
<string>.Empty);
23
public static readonly FeatureChecksValue None = new FeatureChecksValue(
ValueSet
<string>.Empty,
ValueSet
<string>.Empty);
28
DisabledFeatures =
ValueSet
<string>.Empty;
31
private FeatureChecksValue(
ValueSet
<string> enabled,
ValueSet
<string> disabled)
40
ValueSet
<string>.Union(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()),
41
ValueSet
<string>.Union(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy()));
47
ValueSet
<string>.Intersection(EnabledFeatures.DeepCopy(), other.EnabledFeatures.DeepCopy()),
48
ValueSet
<string>.Intersection(DisabledFeatures.DeepCopy(), other.DisabledFeatures.DeepCopy()));
DataFlow\FeatureChecksVisitor.cs (1)
14
ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>,
DataFlow\FeatureContextLattice.cs (6)
18
public
ValueSet
<string> EnabledFeatures;
20
public static readonly FeatureContext All = new FeatureContext(
ValueSet
<string>.Unknown);
22
public static readonly FeatureContext None = new FeatureContext(
ValueSet
<string>.Empty);
24
public FeatureContext(
ValueSet
<string> enabled)
48
return new FeatureContext(
ValueSet
<string>.Intersection(EnabledFeatures, other.EnabledFeatures));
53
return new FeatureContext(
ValueSet
<string>.Union(EnabledFeatures, other.EnabledFeatures));
DataFlow\InterproceduralState.cs (2)
18
public
ValueSet
<MethodBodyValue> Methods;
30
ValueSet
<MethodBodyValue> methods,
DataFlow\LocalDataFlowVisitor.cs (2)
489
var
capturedReferences = state.Current.LocalState.CapturedReferences.Get(flowCaptureReference.Id);
630
var
capturedReferences = state.Current.LocalState.CapturedReferences.Get(captureRef.Id);
DataFlow\LocalStateLattice.cs (6)
46
public DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>> CapturedReferences;
48
public LocalState(DefaultValueDictionary<LocalKey, TValue> dictionary, DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>> capturedReferences)
55
: this(dictionary, new DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>>(default(
ValueSet
<CapturedReferenceValue>)))
80
public readonly DictionaryLattice<CaptureId,
ValueSet
<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>> CapturedReferenceLattice;
85
CapturedReferenceLattice = new DictionaryLattice<CaptureId,
ValueSet
<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>>(default(ValueSetLattice<CapturedReferenceValue>));
ISymbolExtensions.cs (2)
84
internal static
ValueSet
<string> GetFeatureGuardAnnotations(this IPropertySymbol propertySymbol)
92
return featureSet.Count == 0 ?
ValueSet
<string>.Empty : new ValueSet<string>(featureSet);
RequiresAnalyzerBase.cs (4)
18
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
372
ValueSet
<string> featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations();
406
MultiValue
instance,
407
ImmutableArray<
MultiValue
> arguments
RequiresDynamicCodeAnalyzer.cs (5)
12
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
50
internal override bool IsIntrinsicallyHandled(IMethodSymbol calledMethod,
MultiValue
instance, ImmutableArray<
MultiValue
> arguments)
117
static bool IsKnownInstantiation(
MultiValue
genericParametersArray)
141
if (!array.TryGetValueByIndex(i, out
MultiValue
value))
src\runtime\src\tools\illink\src\ILLink.Shared\DataFlow\ValueSet.cs (19)
16
public readonly struct ValueSet<TValue> : IEquatable<
ValueSet
<TValue>>, IDeepCopyValue<
ValueSet
<TValue>>
21
public static readonly
ValueSet
<TValue> Empty;
29
public static readonly
ValueSet
<TValue> Unknown = new(UnknownSentinel);
164
public static implicit operator
ValueSet
<TValue>(TValue value) => new(value);
169
public override bool Equals(object? obj) => obj is
ValueSet
<TValue> other && Equals(other);
171
public bool Equals(
ValueSet
<TValue> other)
217
public static bool operator ==(
ValueSet
<TValue> left,
ValueSet
<TValue> right) => left.Equals(right);
218
public static bool operator !=(
ValueSet
<TValue> left,
ValueSet
<TValue> right) => !(left == right);
223
return typeof(
ValueSet
<TValue>).GetHashCode();
246
internal static
ValueSet
<TValue> Union(
ValueSet
<TValue> left,
ValueSet
<TValue> right)
271
internal static
ValueSet
<TValue> Intersection(
ValueSet
<TValue> left,
ValueSet
<TValue> right)
310
public
ValueSet
<TValue> DeepCopy()
src\runtime\src\tools\illink\src\ILLink.Shared\DataFlow\ValueSetLattice.cs (6)
12
public readonly struct ValueSetLattice<TValue> : ILattice<
ValueSet
<TValue>>
15
public
ValueSet
<TValue> Top => default;
17
public
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)
6
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
19
public partial bool TryGetValueByIndex(int index, out
MultiValue
value);
21
public static
MultiValue
SanitizeArrayElementValue(
MultiValue
input)
src\runtime\src\tools\illink\src\ILLink.Shared\TrimAnalysis\HandleCallAction.cs (23)
14
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
31
public bool Invoke(MethodProxy calledMethod,
MultiValue
instanceValue, IReadOnlyList<
MultiValue
> argumentValues, IntrinsicId intrinsicId, out
MultiValue
methodReturnValue)
33
MultiValue
? maybeMethodReturnValue;
79
MultiValue
instanceValue,
80
IReadOnlyList<
MultiValue
> argumentValues,
82
out
MultiValue
? methodReturnValue);
86
MultiValue
instanceValue,
87
IReadOnlyList<
MultiValue
> argumentValues,
89
out
MultiValue
? methodReturnValue)
91
MultiValue
? returnValue = methodReturnValue = null;
638
foreach (
var
methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags))
819
foreach (
var
methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags))
1145
if ((argumentValue as ArrayValue)?.TryGetValueByIndex(0, out
var
underlyingMultiValue) == true)
1637
void AddReturnValue(
MultiValue
value)
1643
private IEnumerable<
MultiValue
> ProcessGetMethodByName(TypeProxy type, string methodName, BindingFlags? bindingFlags)
1661
private bool AnalyzeGenericInstantiationTypeArray(in
MultiValue
arrayParam, ImmutableArray<GenericParameterValue> genericParameters)
1693
if (!array.TryGetValueByIndex(i, out
MultiValue
value) || value.AsSingleValue() is UnknownValue)
1707
if (array.TryGetValueByIndex(i, out
MultiValue
value))
1733
in
MultiValue
genericParametersArray,
1761
private void ProcessCreateInstanceByName(MethodProxy calledMethod, IReadOnlyList<
MultiValue
> argumentValues)
1818
internal static BindingFlags? GetBindingFlagsFromValue(in
MultiValue
parameter) => (BindingFlags?)parameter.AsConstInt();
src\runtime\src\tools\illink\src\ILLink.Shared\TrimAnalysis\RequireDynamicallyAccessedMembersAction.cs (2)
9
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
21
public void Invoke(in
MultiValue
value, ValueWithDynamicallyAccessedMembers targetValue)
src\runtime\src\tools\illink\src\ILLink.Shared\TrimAnalysis\ValueExtensions.cs (7)
7
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
45
internal static int? AsConstInt(this in
MultiValue
value)
53
internal static SingleValue? AsSingleValue(this in
MultiValue
node)
62
private static
ValueSet
<SingleValue>.Enumerable Unknown = new
ValueSet
<SingleValue>.Enumerable(UnknownValue.Instance);
66
internal static
ValueSet
<SingleValue>.Enumerable AsEnumerable(this
MultiValue
multiValue)
TrimAnalysis\ArrayValue.cs (9)
6
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
12
public readonly Dictionary<int,
MultiValue
> IndexValues;
14
public static
MultiValue
Create(
MultiValue
size)
16
MultiValue
result = MultiValueLattice.Top;
25
public static
MultiValue
Create(int size) => Create(new ConstIntValue(size));
30
IndexValues = new Dictionary<int,
MultiValue
>();
33
public partial bool TryGetValueByIndex(int index, out
MultiValue
value)
62
if (!otherArr.IndexValues.TryGetValue(kvp.Key, out
MultiValue
value) || !kvp.Value.Equals(value))
TrimAnalysis\FeatureCheckReturnValuePattern.cs (3)
17
public
ValueSet
<string> FeatureCheckAnnotations { get; init; }
23
ValueSet
<string> featureCheckAnnotations,
51
ValueSet
<string> returnValueFeatures = ReturnValue.EnabledFeatures;
TrimAnalysis\HandleCallAction.cs (7)
16
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
98
MultiValue
instanceValue,
99
IReadOnlyList<
MultiValue
> argumentValues,
101
out
MultiValue
? methodReturnValue)
103
MultiValue
? maybeMethodReturnValue = methodReturnValue = null;
237
void AddReturnValue(
MultiValue
value)
239
maybeMethodReturnValue = (maybeMethodReturnValue is null) ? value : multiValueLattice.Meet((
MultiValue
)maybeMethodReturnValue, value);
TrimAnalysis\TrimAnalysisAssignmentPattern.cs (5)
13
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
19
public
MultiValue
Source { get; init; }
20
public
MultiValue
Target { get; init; }
26
MultiValue
source,
27
MultiValue
target,
TrimAnalysis\TrimAnalysisMethodCallPattern.cs (10)
12
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
19
public
MultiValue
Instance { get; init; }
20
public ImmutableArray<
MultiValue
> Arguments { get; init; }
27
MultiValue
instance,
28
ImmutableArray<
MultiValue
> arguments,
37
Arguments = ImmutableArray<
MultiValue
>.Empty;
41
var builder = ImmutableArray.CreateBuilder<
MultiValue
>();
42
foreach (
var
argument in arguments)
63
var argumentsBuilder = ImmutableArray.CreateBuilder<
MultiValue
>();
86
TrimAnalysisVisitor.HandleCall(context.TrimAnalyzer, FeatureContext, typeNameResolver, Operation, OwningSymbol, CalledMethod, Instance, Arguments, location, reportDiagnostic, default, out
var
_);
TrimAnalysis\TrimAnalysisVisitor.cs (50)
18
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
20
ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>,
29
MultiValue
,
51
LocalStateAndContextLattice<
MultiValue
, FeatureContext, ValueSetLattice<SingleValue>, FeatureContextLattice> lattice,
56
InterproceduralState<
MultiValue
, ValueSetLattice<SingleValue>> interproceduralState,
72
public override void ApplyCondition(FeatureChecksValue featureChecksValue, ref LocalStateAndContext<
MultiValue
, FeatureContext> currentState)
83
public override
MultiValue
DefaultVisit(IOperation operation, StateValue argument)
85
var
returnValue = base.DefaultVisit(operation, argument);
93
if (TryGetConstantValue(operation, out
var
constValue))
102
public override
MultiValue
VisitArrayCreation(IArrayCreationOperation operation, StateValue state)
104
var
value = base.VisitArrayCreation(operation, state);
114
var
arrayValue = ArrayValue.Create(Visit(operation.DimensionSizes[0], state));
115
var elements = operation.Initializer?.ElementValues.Select(val => Visit(val, state)).ToArray() ?? System.Array.Empty<
MultiValue
>();
127
public override
MultiValue
VisitConversion(IConversionOperation operation, StateValue state)
129
var
value = base.VisitConversion(operation, state);
140
public override
MultiValue
VisitParameterReference(IParameterReferenceOperation paramRef, StateValue state)
146
public override
MultiValue
VisitInstanceReference(IInstanceReferenceOperation instanceRef, StateValue state)
162
public override
MultiValue
VisitFieldReference(IFieldReferenceOperation fieldRef, StateValue state)
185
if (TryGetConstantValue(fieldRef, out
var
constValue))
192
public override
MultiValue
VisitTypeOf(ITypeOfOperation typeOfOperation, StateValue state)
197
public override
MultiValue
VisitBinaryOperator(IBinaryOperation operation, StateValue argument)
204
MultiValue
leftValue = Visit(operation.LeftOperand, argument);
205
MultiValue
rightValue = Visit(operation.RightOperand, argument);
207
MultiValue
result = TopValue;
237
public override
MultiValue
GetFieldTargetValue(IFieldReferenceOperation fieldReference, in FeatureContext featureContext)
250
public override
MultiValue
GetBackingFieldTargetValue(IPropertyReferenceOperation propertyReference, in FeatureContext featureContext)
264
public override
MultiValue
GetParameterTargetValue(IParameterSymbol parameter)
280
public override void HandleAssignment(
MultiValue
source,
MultiValue
target, IOperation operation, in FeatureContext featureContext)
292
public override
MultiValue
HandleArrayElementRead(
MultiValue
arrayValue,
MultiValue
indexValue, IOperation operation)
302
MultiValue
result = TopValue;
305
if (value is ArrayValue arr && arr.TryGetValueByIndex(index, out
var
elementValue))
313
public override void HandleArrayElementWrite(
MultiValue
arrayValue,
MultiValue
indexValue,
MultiValue
valueToWrite, IOperation operation, bool merge)
327
var
sanitizedValue = ArrayValue.SanitizeArrayElementValue(valueToWrite);
340
public override
MultiValue
HandleMethodCall(
342
MultiValue
instance,
343
ImmutableArray<
MultiValue
> arguments,
357
HandleCall(_trimAnalyzer, FeatureContext.None, _typeNameResolver, operation, OwningSymbol, calledMethod, instance, arguments, Location.None, null, _multiValueLattice, out
MultiValue
methodReturnValue);
370
foreach (
var
argument in arguments)
391
MultiValue
instance,
392
ImmutableArray<
MultiValue
> arguments,
396
out
MultiValue
methodReturnValue)
410
public override void HandleReturnValue(
MultiValue
returnValue, IOperation operation, in FeatureContext featureContext)
439
var
featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations();
449
public override
MultiValue
HandleDelegateCreation(IMethodSymbol method, IOperation operation, in FeatureContext featureContext)
513
private static bool TryGetConstantValue(IOperation operation, out
MultiValue
constValue)
TrimAnalysis\TrimDataFlowAnalysis.cs (4)
17
ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>,
20
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
25
MultiValue
,
64
InterproceduralState<
MultiValue
, ValueSetLattice<SingleValue>> interproceduralState)