5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
2474
public sealed class True :
Tests
2498
public sealed class False :
Tests
2524
public sealed class One :
Tests
2988
public sealed class Not :
Tests
3041
public abstract class SequenceTests :
Tests
222 references to Tests
Microsoft.CodeAnalysis.CSharp (222)
Binder\DecisionDagBuilder.cs (214)
191
Tests
tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings);
195
private
Tests
MakeAndSimplifyTestsAndBindings(
201
Tests
tests = MakeTestsAndBindings(input, pattern, bindingsBuilder);
207
private static
Tests
SimplifyTestsAndBindings(
208
Tests
tests,
224
var testsToSimplify = ArrayBuilder<
Tests
?>.GetInstance();
225
var testsToAssemble = ArrayBuilder<
Tests
>.GetInstance();
226
var testsSimplified = ArrayBuilder<
Tests
>.GetInstance();
232
var
current = testsToSimplify.Pop();
236
case
Tests
.SequenceTests seq:
241
case
Tests
.True _:
242
case
Tests
.False _:
245
case
Tests
.One(BoundDagEvaluation e):
255
testsSimplified.Push(
Tests
.True.Instance);
258
case
Tests
.One(BoundDagTest d):
264
case
Tests
.Not n:
271
var
toAssemble = testsToAssemble.Pop();
274
case
Tests
.SequenceTests seq:
276
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
285
case
Tests
.Not:
286
testsSimplified.Push(
Tests
.Not.Create(testsSimplified.Pop()));
299
var
result = testsSimplified.Pop();
314
private
Tests
MakeTestsAndBindings(
327
private
Tests
MakeTestsAndBindings(
343
return
Tests
.True.Instance;
364
private
Tests
MakeTestsAndBindingsForITuplePattern(
377
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + patternLength * 2);
379
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, iTupleType, input)));
381
tests.Add(new
Tests
.One(valueAsITupleEvaluation));
386
tests.Add(new
Tests
.One(lengthEvaluation));
388
tests.Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp)));
394
tests.Add(new
Tests
.One(indexEvaluation));
399
return
Tests
.AndSequence.Create(tests);
436
private
Tests
MakeTestsAndBindingsForDeclarationPattern(
443
var tests = ArrayBuilder<
Tests
>.GetInstance(1);
461
return
Tests
.AndSequence.Create(tests);
464
private
Tests
MakeTestsForTypePattern(
470
var tests = ArrayBuilder<
Tests
>.GetInstance(4);
472
return
Tests
.AndSequence.Create(tests);
479
ArrayBuilder<
Tests
> tests)
486
tests.Add(new
Tests
.One(new BoundDagNonNullTest(syntax, isExplicitTest, input)));
498
ArrayBuilder<
Tests
> tests)
516
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, type, input)));
521
tests.Add(new
Tests
.One(evaluation));
527
private
Tests
MakeTestsForConstantPattern(
535
return new
Tests
.One(new BoundDagExplicitNullTest(constant.Syntax, input));
540
return new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input));
544
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
551
tests.Add(
Tests
.False.Instance);
555
tests.Add(new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input)));
557
return
Tests
.AndSequence.Create(tests);
561
private
Tests
MakeTestsAndBindingsForRecursivePattern(
569
var tests = ArrayBuilder<
Tests
>.GetInstance(5);
579
tests.Add(new
Tests
.One(evaluation));
609
tests.Add(new
Tests
.One(evaluation));
619
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
633
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
648
return
Tests
.AndSequence.Create(tests);
683
tests.Add(new
Tests
.One(evaluation));
688
private
Tests
MakeTestsAndBindingsForNegatedPattern(BoundDagTemp input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings)
690
var
tests = MakeTestsAndBindings(input, neg.Negated, bindings);
691
return
Tests
.Not.Create(tests);
694
private
Tests
MakeTestsAndBindingsForBinaryPattern(
712
Tests
result = MakeTestsAndBindings(input, currentNode.Left, out output, bindings);
723
static
Tests
makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this,
Tests
leftTests, BoundDagTemp leftOutput, BoundDagTemp input, BoundBinaryPattern bin, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings)
725
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
730
var
result =
Tests
.OrSequence.Create(builder);
738
builder = ArrayBuilder<
Tests
>.GetInstance(2);
742
builder.Add(new
Tests
.One(evaluation));
743
return
Tests
.AndSequence.Create(builder);
752
return
Tests
.AndSequence.Create(builder);
757
private
Tests
MakeTestsAndBindingsForRelationalPattern(
765
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
771
tests.Add(
Tests
.False.Instance);
775
tests.Add(new
Tests
.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors)));
778
return
Tests
.AndSequence.Create(tests);
1223
RoslynDebug.Assert(!(first.RemainingTests is
Tests
.False));
1290
stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out
Tests
whenTrueTests, out
Tests
whenFalseTests, ref foundExplicitNullTest);
1423
var
remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e);
1424
if (remainingTests is
Tests
.False)
2257
public readonly
Tests
RemainingTests;
2264
Tests
RemainingTests,
2280
public bool IsFullyMatched => RemainingTests is
Tests
.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True);
2285
public bool PatternIsSatisfied => RemainingTests is
Tests
.True;
2291
public bool IsImpossible => RemainingTests is
Tests
.False;
2311
public StateForCase WithRemainingTests(
Tests
newRemainingTests)
2318
/// <inheritdoc cref="
Tests
.RewriteNestedLengthTests"/>
2341
out
Tests
whenTrue,
2342
out
Tests
whenFalse,
2351
public readonly
Tests
FinalResult;
2357
public readonly
Tests
? ConditionToUseFinalResult;
2358
public readonly
Tests
? TempsUpdatedResult;
2361
Tests
finalResult,
2363
Tests
? conditionToUseFinalResult,
2364
Tests
? tempsUpdatedResult)
2377
public
Tests
RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e)
2382
protected
Tests
RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e)
2391
var finalResult = ArrayBuilder<
Tests
>.GetInstance(2);
2428
private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<
Tests
> assignments)
2443
assignments.Add(new
Tests
.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom)));
2468
public virtual
Tests
RewriteNestedLengthTests() => this;
2484
out
Tests
whenTrue,
2485
out
Tests
whenFalse,
2508
out
Tests
whenTrue,
2509
out
Tests
whenFalse,
2535
out
Tests
whenTrue,
2536
out
Tests
whenFalse,
2562
whenTrue = trueDecisionImpliesTrueOther ?
Tests
.True.Instance : trueDecisionPermitsTrueOther ? this : (
Tests
)
Tests
.False.Instance;
2563
whenFalse = falseDecisionImpliesTrueOther ?
Tests
.True.Instance : falseDecisionPermitsTrueOther ? this : (
Tests
)
Tests
.False.Instance;
2570
public override
Tests
RewriteNestedLengthTests()
2609
static
Tests
? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset)
2638
return new RemoveEvaluationAndUpdateTempReferencesResult(
Tests
.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null);
2653
Tests
finalResult = RemoveEvaluation(tempsUpdatedResult, builder, state, ref tempMap, e, out
var
condition);
2691
public static
Tests
RemoveEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out
Tests
? condition)
2742
private static
Tests
RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1)
2746
return
Tests
.True.Instance;
2752
private static
Tests
RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1)
2758
return
Tests
.True.Instance;
2786
private static
Tests
RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1)
2792
return
Tests
.True.Instance;
2810
private static
Tests
RemoveTypeEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1)
2820
return
Tests
.True.Instance;
2827
private static
Tests
RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out
Tests
? condition)
2847
return
Tests
.True.Instance;
2865
return
Tests
.True.Instance;
2873
condition = new
Tests
.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp));
2875
return
Tests
.True.Instance;
2991
public readonly
Tests
Negated;
2992
private Not(
Tests
negated) => Negated = negated;
2993
public static
Tests
Create(
Tests
negated) => negated switch
2995
Tests
.True _ =>
Tests
.False.Instance,
2996
Tests
.False _ =>
Tests
.True.Instance,
2997
Tests
.Not n => n.Negated, // double negative
2998
Tests
.AndSequence a => new Not(a),
2999
Tests
.OrSequence a =>
Tests
.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences
3000
Tests
.One o => new Not(o),
3003
private static ArrayBuilder<
Tests
> NegateSequenceElements(ImmutableArray<
Tests
> seq)
3005
var builder = ArrayBuilder<
Tests
>.GetInstance(seq.Length);
3006
foreach (
var
t in seq)
3020
public override
Tests
RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests());
3029
out
Tests
whenTrue,
3030
out
Tests
whenFalse,
3033
Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
var
whenTestTrue, out
var
whenTestFalse, ref foundExplicitNullTest);
3043
public readonly ImmutableArray<
Tests
> RemainingTests;
3044
protected SequenceTests(ImmutableArray<
Tests
> remainingTests)
3049
public abstract
Tests
Update(ArrayBuilder<
Tests
> remainingTests);
3056
out
Tests
whenTrue,
3057
out
Tests
whenFalse,
3060
var testsToFilter = ArrayBuilder<
Tests
?>.GetInstance();
3062
var trueTests = ArrayBuilder<
Tests
>.GetInstance();
3063
var falseTests = ArrayBuilder<
Tests
>.GetInstance();
3069
var
current = testsToFilter.Pop();
3091
current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
Tests
oneTrue, out
Tests
oneFalse, ref foundExplicitNullTest);
3113
static void assemble(SequenceTests toAssemble, ArrayBuilder<
Tests
> tests)
3116
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length, null!);
3134
var testsToRewrite = ArrayBuilder<(
Tests
? Tests, bool SkipRewrite)>.GetInstance();
3140
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
3151
ImmutableArray<
Tests
> remainingTests = seq.RemainingTests;
3165
var newSequence = ArrayBuilder<
Tests
>.GetInstance(childCount);
3219
var
result = testsRewritten.Pop();
3248
var leftToRewriteBuilder = ArrayBuilder<
Tests
>.GetInstance();
3275
void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<
Tests
> leftToRewriteBuilder)
3339
void popAndAddChildrenLeftToRewrite(ArrayBuilder<
Tests
> leftToRewriteBuilder)
3357
public sealed override
Tests
RewriteNestedLengthTests()
3359
var testsToRewrite = ArrayBuilder<
Tests
?>.GetInstance();
3361
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
3367
var
current = testsToRewrite.Pop();
3380
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
3396
var
result = testsRewritten.Pop();
3420
var tests1 = ArrayBuilder<
Tests
>.GetInstance();
3421
var tests2 = ArrayBuilder<
Tests
>.GetInstance();
3428
var
t1 = tests1.Pop();
3429
var
t2 = tests2.Pop();
3496
var tests = ArrayBuilder<
Tests
>.GetInstance();
3501
var
t = tests.Pop();
3542
Tests
firstTest;
3574
private AndSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests)
3578
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
3579
public static
Tests
Create(
Tests
t1,
Tests
t2)
3584
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
3589
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
3609
var
result = remainingTests.Count switch
3656
private OrSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests)
3660
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
3661
public static
Tests
Create(
Tests
t1,
Tests
t2)
3666
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
3671
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
3691
var
result = remainingTests.Count switch
Binder\DecisionDagBuilder_ListPatterns.cs (8)
14
private
Tests
MakeTestsAndBindingsForListPattern(BoundDagTemp input, BoundListPattern list, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings)
24
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + subpatterns.Length * 2);
29
tests.Add(new
Tests
.One(new BoundDagTypeTest(list.Syntax, ErrorType(), input, hasErrors: true)));
43
tests.Add(new
Tests
.One(lengthEvaluation));
45
tests.Add(new
Tests
.One(list.HasSlice
67
tests.Add(new
Tests
.One(sliceEvaluation));
82
tests.Add(new
Tests
.One(indexEvaluation));
93
return
Tests
.AndSequence.Create(tests);