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\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\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)));
192 references to ValueSet
ILLink.RoslynAnalyzer (192)
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)
423
var
capturedReferences = state.Current.LocalState.CapturedReferences.Get(flowCaptureReference.Id);
564
var
capturedReferences = state.Current.LocalState.CapturedReferences.Get(captureRef.Id);
DataFlow\LocalStateLattice.cs (8)
46
public DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>> CapturedReferences;
50
new DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>>(default(
ValueSet
<CapturedReferenceValue>)))
54
public LocalState(DefaultValueDictionary<LocalKey, TValue> dictionary, DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>> capturedReferences)
61
: this(dictionary, new DefaultValueDictionary<CaptureId,
ValueSet
<CapturedReferenceValue>>(default(
ValueSet
<CapturedReferenceValue>)))
86
public readonly DictionaryLattice<CaptureId,
ValueSet
<CapturedReferenceValue>, ValueSetLattice<CapturedReferenceValue>> CapturedReferenceLattice;
91
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)
17
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
349
ValueSet
<string> featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations();
383
MultiValue
instance,
384
ImmutableArray<
MultiValue
> arguments
RequiresDynamicCodeAnalyzer.cs (5)
12
using MultiValue = ILLink.Shared.DataFlow.
ValueSet
<ILLink.Shared.DataFlow.SingleValue>;
49
internal override bool IsIntrinsicallyHandled(IMethodSymbol calledMethod,
MultiValue
instance, ImmutableArray<
MultiValue
> arguments)
104
static bool IsKnownInstantiation(
MultiValue
genericParametersArray)
128
if (!array.TryGetValueByIndex(i, out
MultiValue
value))
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\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\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\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;
615
foreach (
var
methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags))
796
foreach (
var
methodValue in ProcessGetMethodByName(systemTypeValue.RepresentedType, stringValue.Contents, bindingFlags))
1121
if ((argumentValue as ArrayValue)?.TryGetValueByIndex(0, out
var
underlyingMultiValue) == true)
1550
void AddReturnValue(
MultiValue
value)
1556
private IEnumerable<
MultiValue
> ProcessGetMethodByName(TypeProxy type, string methodName, BindingFlags? bindingFlags)
1574
private bool AnalyzeGenericInstantiationTypeArray(in
MultiValue
arrayParam, ImmutableArray<GenericParameterValue> genericParameters)
1606
if (!array.TryGetValueByIndex(i, out
MultiValue
value) || value.AsSingleValue() is UnknownValue)
1620
if (array.TryGetValueByIndex(i, out
MultiValue
value))
1646
in
MultiValue
genericParametersArray,
1674
private void ProcessCreateInstanceByName(MethodProxy calledMethod, IReadOnlyList<
MultiValue
> argumentValues)
1731
internal static BindingFlags? GetBindingFlagsFromValue(in
MultiValue
parameter) => (BindingFlags?)parameter.AsConstInt();
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\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>;
93
MultiValue
instanceValue,
94
IReadOnlyList<
MultiValue
> argumentValues,
96
out
MultiValue
? methodReturnValue)
98
MultiValue
? maybeMethodReturnValue = methodReturnValue = null;
232
void AddReturnValue(
MultiValue
value)
234
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
>();
85
TrimAnalysisVisitor.HandleCall(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
,
48
LocalStateAndContextLattice<
MultiValue
, FeatureContext, ValueSetLattice<SingleValue>, FeatureContextLattice> lattice,
53
InterproceduralState<
MultiValue
, ValueSetLattice<SingleValue>> interproceduralState,
67
public override void ApplyCondition(FeatureChecksValue featureChecksValue, ref LocalStateAndContext<
MultiValue
, FeatureContext> currentState)
78
public override
MultiValue
DefaultVisit(IOperation operation, StateValue argument)
80
var
returnValue = base.DefaultVisit(operation, argument);
88
if (TryGetConstantValue(operation, out
var
constValue))
97
public override
MultiValue
VisitArrayCreation(IArrayCreationOperation operation, StateValue state)
99
var
value = base.VisitArrayCreation(operation, state);
109
var
arrayValue = ArrayValue.Create(Visit(operation.DimensionSizes[0], state));
110
var elements = operation.Initializer?.ElementValues.Select(val => Visit(val, state)).ToArray() ?? System.Array.Empty<
MultiValue
>();
122
public override
MultiValue
VisitConversion(IConversionOperation operation, StateValue state)
124
var
value = base.VisitConversion(operation, state);
135
public override
MultiValue
VisitParameterReference(IParameterReferenceOperation paramRef, StateValue state)
141
public override
MultiValue
VisitInstanceReference(IInstanceReferenceOperation instanceRef, StateValue state)
157
public override
MultiValue
VisitFieldReference(IFieldReferenceOperation fieldRef, StateValue state)
175
if (TryGetConstantValue(fieldRef, out
var
constValue))
182
public override
MultiValue
VisitTypeOf(ITypeOfOperation typeOfOperation, StateValue state)
187
public override
MultiValue
VisitBinaryOperator(IBinaryOperation operation, StateValue argument)
194
MultiValue
leftValue = Visit(operation.LeftOperand, argument);
195
MultiValue
rightValue = Visit(operation.RightOperand, argument);
197
MultiValue
result = TopValue;
227
public override
MultiValue
GetFieldTargetValue(IFieldReferenceOperation fieldReference, in FeatureContext featureContext)
240
public override
MultiValue
GetBackingFieldTargetValue(IPropertyReferenceOperation propertyReference, in FeatureContext featureContext)
254
public override
MultiValue
GetParameterTargetValue(IParameterSymbol parameter)
257
public override void HandleAssignment(
MultiValue
source,
MultiValue
target, IOperation operation, in FeatureContext featureContext)
269
public override
MultiValue
HandleArrayElementRead(
MultiValue
arrayValue,
MultiValue
indexValue, IOperation operation)
279
MultiValue
result = TopValue;
282
if (value is ArrayValue arr && arr.TryGetValueByIndex(index, out
var
elementValue))
290
public override void HandleArrayElementWrite(
MultiValue
arrayValue,
MultiValue
indexValue,
MultiValue
valueToWrite, IOperation operation, bool merge)
304
var
sanitizedValue = ArrayValue.SanitizeArrayElementValue(valueToWrite);
317
public override
MultiValue
HandleMethodCall(
319
MultiValue
instance,
320
ImmutableArray<
MultiValue
> arguments,
334
HandleCall(operation, OwningSymbol, calledMethod, instance, arguments, Location.None, null, _multiValueLattice, out
MultiValue
methodReturnValue);
347
foreach (
var
argument in arguments)
365
MultiValue
instance,
366
ImmutableArray<
MultiValue
> arguments,
370
out
MultiValue
methodReturnValue)
384
public override void HandleReturnValue(
MultiValue
returnValue, IOperation operation, in FeatureContext featureContext)
413
var
featureCheckAnnotations = propertySymbol.GetFeatureGuardAnnotations();
423
public override
MultiValue
HandleDelegateCreation(IMethodSymbol method, IOperation operation, in FeatureContext featureContext)
487
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)