6 types derived from Tests
Microsoft.CodeAnalysis.CSharp (6)
Binder\DecisionDagBuilder.cs (6)
3387
public sealed class True :
Tests
3411
public sealed class False :
Tests
3437
public sealed class One :
Tests
4039
public sealed class ValueSet :
Tests
4184
public sealed class Not :
Tests
4240
public abstract class SequenceTests :
Tests
260 references to Tests
Microsoft.CodeAnalysis.CSharp (260)
Binder\DecisionDagBuilder_ListPatterns.cs (8)
14
private
Tests
MakeTestsAndBindingsForListPattern(TestInputOutputInfo inputInfo, BoundListPattern list, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings)
26
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + subpatterns.Length * 2);
32
tests.Add(new
Tests
.One(new BoundDagTypeTest(list.Syntax, ErrorType(), input, hasErrors: true)));
47
tests.Add(new
Tests
.One(lengthEvaluation));
49
tests.Add(new
Tests
.One(list.HasSlice
71
tests.Add(new
Tests
.One(sliceEvaluation));
86
tests.Add(new
Tests
.One(indexEvaluation));
99
return
Tests
.AndSequence.Create(tests);
Binder\DecisionDagBuilder.cs (252)
202
Tests
tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings);
206
private
Tests
MakeAndSimplifyTestsAndBindings(
212
Tests
tests = MakeTestsAndBindings(input, pattern, bindingsBuilder);
218
private static
Tests
SimplifyTestsAndBindings(
219
Tests
tests,
235
var testsToSimplify = ArrayBuilder<
Tests
?>.GetInstance();
236
var testsToAssemble = ArrayBuilder<
Tests
>.GetInstance();
237
var testsSimplified = ArrayBuilder<
Tests
>.GetInstance();
243
var
current = testsToSimplify.Pop();
247
case
Tests
.SequenceTests seq:
252
case
Tests
.True _:
253
case
Tests
.False _:
256
case
Tests
.One(BoundDagEvaluation e):
266
testsSimplified.Push(
Tests
.True.Instance);
269
case
Tests
.One(BoundDagTest d):
275
case
Tests
.ValueSet v:
281
case
Tests
.Not n:
288
var
toAssemble = testsToAssemble.Pop();
291
case
Tests
.SequenceTests seq:
293
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
302
case
Tests
.Not:
303
testsSimplified.Push(
Tests
.Not.Create(testsSimplified.Pop()));
316
var
result = testsSimplified.Pop();
331
private
Tests
MakeTestsAndBindings(
367
private
Tests
MakeTestsAndBindings(
390
return
Tests
.True.Instance;
421
private BoundDagTemp PrepareForUnionValuePropertyMatching(ref TestInputOutputInfo input, ArrayBuilder<
Tests
> tests)
427
tests.Add(new
Tests
.One(valueEvaluation));
499
private
Tests
MakeTestsAndBindingsForITuplePattern(
512
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + patternLength * 2);
519
tests.Add(new
Tests
.One(lengthEvaluation));
521
tests.Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp)));
527
tests.Add(new
Tests
.One(indexEvaluation));
532
return
Tests
.AndSequence.Create(tests);
586
private
Tests
MakeTestsAndBindingsForDeclarationPattern(
593
var tests = ArrayBuilder<
Tests
>.GetInstance(1);
612
return
Tests
.AndSequence.Create(tests);
615
private
Tests
MakeTestsForTypePattern(
621
var tests = ArrayBuilder<
Tests
>.GetInstance(4);
623
return
Tests
.AndSequence.Create(tests);
630
ArrayBuilder<
Tests
> tests)
637
tests.Add(new
Tests
.One(new BoundDagNonNullTest(syntax, isExplicitTest, input)));
751
private bool TryMakeTestsForUnionHasValue(SyntaxNode syntax, TestInputOutputInfo inputInfo, bool sense, [NotNullWhen(true)] out
Tests
? tests)
761
Tests
test = MakeConstantTest(syntax, temp, sense ? ConstantValue.True : ConstantValue.False);
762
Debug.Assert(test is
Tests
.One { Test: BoundDagValueTest });
764
tests =
Tests
.AndSequence.Create(new
Tests
.One(hasValueEvaluation), test);
785
ArrayBuilder<
Tests
> tests)
790
TryMakeTestsForUnionHasValue(syntax, inputInfo, sense: true, out
var
hasValueTests))
801
tests.Add(new
Tests
.One(deconstructEvaluation));
806
Tests
test = MakeConstantTest(syntax, boolResult, ConstantValue.True);
807
Debug.Assert(test is
Tests
.One { Test: var tryGetValueResultTest } && IsUnionTryGetValueTest(tryGetValueResultTest, out _, out _, out _));
817
tests.Add(new
Tests
.One(typeEvaluation));
822
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, type, typeEvaluationTemp)));
824
tests.Add(new
Tests
.One(typeEvaluation));
856
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, type, input)));
861
tests.Add(new
Tests
.One(evaluation));
867
private
Tests
MakeTestsForConstantPattern(
874
if (TryMakeTestsForUnionHasValue(constant.Syntax, inputInfo, sense: false, out
var
tests))
880
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
883
builder.Add(new
Tests
.One(new BoundDagExplicitNullTest(constant.Syntax, input)));
884
return
Tests
.AndSequence.Create(builder);
891
Tests
makeTestsForNonNullConstantPattern(TestInputOutputInfo inputInfo, BoundConstantPattern constant, out TestInputOutputInfo output)
896
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
899
tests.Add(new
Tests
.One(new BoundDagValueTest(constant.Syntax, constantValue, input)));
900
return
Tests
.AndSequence.Create(tests);
904
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
914
return
Tests
.AndSequence.Create(tests);
919
private static
Tests
MakeConstantTest(SyntaxNode syntax, BoundDagTemp input, ConstantValue constantValue)
925
return
Tests
.False.Instance;
929
return new
Tests
.One(new BoundDagValueTest(syntax, constantValue, input));
933
private
Tests
MakeTestsAndBindingsForRecursivePattern(
942
var tests = ArrayBuilder<
Tests
>.GetInstance(5);
953
tests.Add(new
Tests
.One(evaluation));
984
tests.Add(new
Tests
.One(evaluation));
995
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
1043
return
Tests
.AndSequence.Create(tests);
1069
tests.Add(new
Tests
.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true)));
1097
tests.Add(new
Tests
.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true)));
1101
tests.Add(new
Tests
.One(evaluation));
1106
private
Tests
MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings)
1108
var
tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings);
1109
return
Tests
.Not.Create(tests);
1112
private
Tests
MakeTestsAndBindingsForBinaryPattern(
1130
Tests
result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings);
1141
Tests
makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this,
Tests
leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings)
1143
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
1148
var
result =
Tests
.OrSequence.Create(builder);
1156
builder = ArrayBuilder<
Tests
>.GetInstance(2);
1162
builder.Add(new
Tests
.One(evaluation));
1163
return
Tests
.AndSequence.Create(builder);
1175
return
Tests
.AndSequence.Create(builder);
1180
private
Tests
MakeTestsAndBindingsForRelationalPattern(
1188
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
1195
tests.Add(
Tests
.False.Instance);
1199
tests.Add(new
Tests
.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors)));
1202
return
Tests
.AndSequence.Create(tests);
1647
RoslynDebug.Assert(!(first.RemainingTests is
Tests
.False));
1714
stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out
Tests
whenTrueTests, out
Tests
whenFalseTests, ref foundRelatedExplicitNullTest);
1929
var
remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e);
1930
if (remainingTests is
Tests
.False)
3170
public readonly
Tests
RemainingTests;
3177
Tests
RemainingTests,
3193
public bool IsFullyMatched => RemainingTests is
Tests
.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True);
3198
public bool PatternIsSatisfied => RemainingTests is
Tests
.True;
3204
public bool IsImpossible => RemainingTests is
Tests
.False;
3224
public StateForCase WithRemainingTests(
Tests
newRemainingTests)
3231
/// <inheritdoc cref="
Tests
.RewriteNestedLengthTests"/>
3254
out
Tests
whenTrue,
3255
out
Tests
whenFalse,
3264
public readonly
Tests
FinalResult;
3270
public readonly
Tests
? ConditionToUseFinalResult;
3271
public readonly
Tests
? TempsUpdatedResult;
3274
Tests
finalResult,
3276
Tests
? conditionToUseFinalResult,
3277
Tests
? tempsUpdatedResult)
3290
public
Tests
RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e)
3295
protected
Tests
RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e)
3304
var finalResult = ArrayBuilder<
Tests
>.GetInstance(2);
3341
private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<
Tests
> assignments)
3356
assignments.Add(new
Tests
.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom)));
3381
public virtual
Tests
RewriteNestedLengthTests() => this;
3397
out
Tests
whenTrue,
3398
out
Tests
whenFalse,
3421
out
Tests
whenTrue,
3422
out
Tests
whenFalse,
3448
out
Tests
whenTrue,
3449
out
Tests
whenFalse,
3502
void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out
Tests
whenTrue, out
Tests
whenFalse)
3504
whenTrue = trueDecisionImpliesTrueOther ?
Tests
.True.Instance : trueDecisionPermitsTrueOther ? this : (
Tests
)
Tests
.False.Instance;
3505
whenFalse = falseDecisionImpliesTrueOther ?
Tests
.True.Instance : falseDecisionPermitsTrueOther ? this : (
Tests
)
Tests
.False.Instance;
3513
public override
Tests
RewriteNestedLengthTests()
3552
static
Tests
? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset)
3586
return new RemoveEvaluationAndUpdateTempReferencesResult(
Tests
.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null);
3596
return new RemoveEvaluationAndUpdateTempReferencesResult(
Tests
.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null);
3611
Tests
finalResult;
3612
Tests
? condition;
3659
static
Tests
removeEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out
Tests
? condition)
3703
Tests
result = removeEvaluation(tests, builder, state, ref tempMap, e, out
Tests
? condition);
3723
private static
Tests
RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1)
3727
return
Tests
.True.Instance;
3733
private static
Tests
RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1)
3739
return
Tests
.True.Instance;
3767
private static
Tests
RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1)
3773
return
Tests
.True.Instance;
3791
private static
Tests
RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1)
3801
return
Tests
.True.Instance;
3833
static
Tests
? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval)
3858
return AndSequence.Create(new
Tests
.One(newTypeEval), new
Tests
.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp)));
3868
private static
Tests
RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out
Tests
? condition)
3888
return
Tests
.True.Instance;
3906
return
Tests
.True.Instance;
3914
condition = new
Tests
.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp));
3916
return
Tests
.True.Instance;
4059
out
Tests
whenTrue,
4060
out
Tests
whenFalse,
4128
private
Tests
ComputeFilteredResult(IValueSet? possibleValues)
4171
public override
Tests
RewriteNestedLengthTests()
4187
public readonly
Tests
Negated;
4188
private Not(
Tests
negated) => Negated = negated;
4189
public static
Tests
Create(
Tests
negated) => negated switch
4191
Tests
.True _ =>
Tests
.False.Instance,
4192
Tests
.False _ =>
Tests
.True.Instance,
4193
Tests
.Not n => n.Negated, // double negative
4194
Tests
.AndSequence a => new Not(a),
4195
Tests
.OrSequence a =>
Tests
.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences
4196
Tests
.ValueSet v => new Not(v),
4197
Tests
.One o => new Not(o),
4200
private static ArrayBuilder<
Tests
> NegateSequenceElements(ImmutableArray<
Tests
> seq)
4202
var builder = ArrayBuilder<
Tests
>.GetInstance(seq.Length);
4203
foreach (
var
t in seq)
4219
public override
Tests
RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests());
4228
out
Tests
whenTrue,
4229
out
Tests
whenFalse,
4232
Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
var
whenTestTrue, out
var
whenTestFalse, ref foundRelatedExplicitNullTest);
4242
public readonly ImmutableArray<
Tests
> RemainingTests;
4243
protected SequenceTests(ImmutableArray<
Tests
> remainingTests)
4248
public abstract
Tests
Update(ArrayBuilder<
Tests
> remainingTests);
4255
out
Tests
whenTrue,
4256
out
Tests
whenFalse,
4259
var testsToFilter = ArrayBuilder<
Tests
?>.GetInstance();
4261
var trueTests = ArrayBuilder<
Tests
>.GetInstance();
4262
var falseTests = ArrayBuilder<
Tests
>.GetInstance();
4268
var
current = testsToFilter.Pop();
4290
current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
Tests
oneTrue, out
Tests
oneFalse, ref foundRelatedExplicitNullTest);
4312
static void assemble(SequenceTests toAssemble, ArrayBuilder<
Tests
> tests)
4315
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length, fillWithValue: null!);
4333
var testsToRewrite = ArrayBuilder<(
Tests
? Tests, bool SkipRewrite)>.GetInstance();
4339
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
4350
ImmutableArray<
Tests
> remainingTests = seq.RemainingTests;
4364
var newSequence = ArrayBuilder<
Tests
>.GetInstance(childCount);
4418
var
result = testsRewritten.Pop();
4447
var leftToRewriteBuilder = ArrayBuilder<
Tests
>.GetInstance();
4474
void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<
Tests
> leftToRewriteBuilder)
4538
void popAndAddChildrenLeftToRewrite(ArrayBuilder<
Tests
> leftToRewriteBuilder)
4556
public sealed override
Tests
RewriteNestedLengthTests()
4558
var testsToRewrite = ArrayBuilder<
Tests
?>.GetInstance();
4560
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
4566
var
current = testsToRewrite.Pop();
4579
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
4595
var
result = testsRewritten.Pop();
4619
var tests1 = ArrayBuilder<
Tests
>.GetInstance();
4620
var tests2 = ArrayBuilder<
Tests
>.GetInstance();
4627
var
t1 = tests1.Pop();
4628
var
t2 = tests2.Pop();
4699
var tests = ArrayBuilder<
Tests
>.GetInstance();
4704
var
t = tests.Pop();
4745
Tests
firstTest;
4777
private AndSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests)
4781
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
4782
public static
Tests
Create(
Tests
t1,
Tests
t2)
4787
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
4792
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
4812
var
result = remainingTests.Count switch
4883
private OrSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests)
4887
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
4888
public static
Tests
Create(
Tests
t1,
Tests
t2)
4893
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
4898
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
4927
var builder = ImmutableArray.CreateBuilder<
Tests
>(count);
4952
if (TryCreateValueSet(builder, out
Tests
? valueSet))
4960
private static bool TryCreateValueSet(ImmutableArray<
Tests
>.Builder builder, [NotNullWhen(true)] out
Tests
? result)
5027
static IConstantValueSet getValueSetForElement(
Tests
element, IConstantValueSetFactory factory)