5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
2131
public sealed class True :
Tests
2152
public sealed class False :
Tests
2175
public sealed class One :
Tests
2320
public sealed class Not :
Tests
2365
public abstract class SequenceTests :
Tests
204 references to Tests
Microsoft.CodeAnalysis.CSharp (204)
Binder\DecisionDagBuilder.cs (196)
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(
378
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + patternLength * 2);
380
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, iTupleType, input)));
382
tests.Add(new
Tests
.One(valueAsITupleEvaluation));
387
tests.Add(new
Tests
.One(lengthEvaluation));
389
tests.Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp)));
395
tests.Add(new
Tests
.One(indexEvaluation));
400
return
Tests
.AndSequence.Create(tests);
437
private
Tests
MakeTestsAndBindingsForDeclarationPattern(
444
var tests = ArrayBuilder<
Tests
>.GetInstance(1);
462
return
Tests
.AndSequence.Create(tests);
465
private
Tests
MakeTestsForTypePattern(
471
var tests = ArrayBuilder<
Tests
>.GetInstance(4);
473
return
Tests
.AndSequence.Create(tests);
480
ArrayBuilder<
Tests
> tests)
487
tests.Add(new
Tests
.One(new BoundDagNonNullTest(syntax, isExplicitTest, input)));
499
ArrayBuilder<
Tests
> tests)
517
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, type, input)));
522
tests.Add(new
Tests
.One(evaluation));
528
private
Tests
MakeTestsForConstantPattern(
536
return new
Tests
.One(new BoundDagExplicitNullTest(constant.Syntax, input));
541
return new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input));
545
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
552
tests.Add(
Tests
.False.Instance);
556
tests.Add(new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input)));
558
return
Tests
.AndSequence.Create(tests);
562
private
Tests
MakeTestsAndBindingsForRecursivePattern(
570
var tests = ArrayBuilder<
Tests
>.GetInstance(5);
580
tests.Add(new
Tests
.One(evaluation));
610
tests.Add(new
Tests
.One(evaluation));
620
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
634
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
649
return
Tests
.AndSequence.Create(tests);
676
tests.Add(new
Tests
.One(evaluation));
682
private
Tests
MakeTestsAndBindingsForNegatedPattern(BoundDagTemp input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings)
684
var
tests = MakeTestsAndBindings(input, neg.Negated, bindings);
685
return
Tests
.Not.Create(tests);
688
private
Tests
MakeTestsAndBindingsForBinaryPattern(
706
Tests
result = MakeTestsAndBindings(input, currentNode.Left, out output, bindings);
717
static
Tests
makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this,
Tests
leftTests, BoundDagTemp leftOutput, BoundDagTemp input, BoundBinaryPattern bin, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings)
719
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
724
var
result =
Tests
.OrSequence.Create(builder);
732
builder = ArrayBuilder<
Tests
>.GetInstance(2);
736
builder.Add(new
Tests
.One(evaluation));
737
return
Tests
.AndSequence.Create(builder);
746
return
Tests
.AndSequence.Create(builder);
751
private
Tests
MakeTestsAndBindingsForRelationalPattern(
759
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
765
tests.Add(
Tests
.False.Instance);
769
tests.Add(new
Tests
.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors)));
772
return
Tests
.AndSequence.Create(tests);
1060
RoslynDebug.Assert(!(first.RemainingTests is
Tests
.False));
1127
stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out
Tests
whenTrueTests, out
Tests
whenFalseTests, ref foundExplicitNullTest);
1259
var
remainingTests = stateForCase.RemainingTests.RemoveEvaluation(e);
1260
if (remainingTests is
Tests
.False)
1462
out
Tests
relationCondition,
1463
out
Tests
relationEffect)
1465
relationCondition =
Tests
.True.Instance;
1466
relationEffect =
Tests
.True.Instance;
1488
ArrayBuilder<
Tests
>? conditions = null;
1502
relationCondition =
Tests
.AndSequence.Create(conditions);
1506
relationEffect = new
Tests
.One(new BoundDagAssignmentEvaluation(syntax, target: other.Input, input: test.Input));
1546
(conditions ??= ArrayBuilder<
Tests
>.GetInstance()).Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(lengthValue), s1LengthTemp)));
2033
public readonly
Tests
RemainingTests;
2040
Tests
RemainingTests,
2056
public bool IsFullyMatched => RemainingTests is
Tests
.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True);
2061
public bool PatternIsSatisfied => RemainingTests is
Tests
.True;
2067
public bool IsImpossible => RemainingTests is
Tests
.False;
2087
public StateForCase WithRemainingTests(
Tests
newRemainingTests)
2094
/// <inheritdoc cref="
Tests
.RewriteNestedLengthTests"/>
2117
out
Tests
whenTrue,
2118
out
Tests
whenFalse,
2121
public virtual
Tests
RemoveEvaluation(BoundDagEvaluation e) => this;
2125
public virtual
Tests
RewriteNestedLengthTests() => this;
2141
out
Tests
whenTrue,
2142
out
Tests
whenFalse,
2162
out
Tests
whenTrue,
2163
out
Tests
whenFalse,
2186
out
Tests
whenTrue,
2187
out
Tests
whenFalse,
2194
relationCondition: out
Tests
relationCondition,
2195
relationEffect: out
Tests
relationEffect))
2243
static
Tests
rewrite(bool decisionImpliesTrueOther, bool decisionPermitsTrueOther,
Tests
relationCondition,
Tests
relationEffect,
Tests
other)
2253
public override
Tests
RemoveEvaluation(BoundDagEvaluation e) => e.Equals(Test) ?
Tests
.True.Instance : (
Tests
)this;
2257
public override
Tests
RewriteNestedLengthTests()
2296
static
Tests
? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset)
2323
public readonly
Tests
Negated;
2324
private Not(
Tests
negated) => Negated = negated;
2325
public static
Tests
Create(
Tests
negated) => negated switch
2327
Tests
.True _ =>
Tests
.False.Instance,
2328
Tests
.False _ =>
Tests
.True.Instance,
2329
Tests
.Not n => n.Negated, // double negative
2330
Tests
.AndSequence a => new Not(a),
2331
Tests
.OrSequence a =>
Tests
.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences
2332
Tests
.One o => new Not(o),
2335
private static ArrayBuilder<
Tests
> NegateSequenceElements(ImmutableArray<
Tests
> seq)
2337
var builder = ArrayBuilder<
Tests
>.GetInstance(seq.Length);
2338
foreach (
var
t in seq)
2343
public override
Tests
RemoveEvaluation(BoundDagEvaluation e) => Create(Negated.RemoveEvaluation(e));
2344
public override
Tests
RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests());
2353
out
Tests
whenTrue,
2354
out
Tests
whenFalse,
2357
Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
var
whenTestTrue, out
var
whenTestFalse, ref foundExplicitNullTest);
2367
public readonly ImmutableArray<
Tests
> RemainingTests;
2368
protected SequenceTests(ImmutableArray<
Tests
> remainingTests)
2373
public abstract
Tests
Update(ArrayBuilder<
Tests
> remainingTests);
2380
out
Tests
whenTrue,
2381
out
Tests
whenFalse,
2384
var testsToFilter = ArrayBuilder<
Tests
?>.GetInstance();
2386
var trueTests = ArrayBuilder<
Tests
>.GetInstance();
2387
var falseTests = ArrayBuilder<
Tests
>.GetInstance();
2393
var
current = testsToFilter.Pop();
2415
current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
Tests
oneTrue, out
Tests
oneFalse, ref foundExplicitNullTest);
2437
static void assemble(SequenceTests toAssemble, ArrayBuilder<
Tests
> tests)
2440
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length, null!);
2450
public sealed override
Tests
RemoveEvaluation(BoundDagEvaluation e)
2452
var testsToRewrite = ArrayBuilder<
Tests
?>.GetInstance();
2454
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
2460
var
current = testsToRewrite.Pop();
2473
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
2489
var
result = testsRewritten.Pop();
2503
public sealed override
Tests
RewriteNestedLengthTests()
2505
var testsToRewrite = ArrayBuilder<
Tests
?>.GetInstance();
2507
var testsRewritten = ArrayBuilder<
Tests
>.GetInstance();
2513
var
current = testsToRewrite.Pop();
2526
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
2542
var
result = testsRewritten.Pop();
2566
var tests1 = ArrayBuilder<
Tests
>.GetInstance();
2567
var tests2 = ArrayBuilder<
Tests
>.GetInstance();
2574
var
t1 = tests1.Pop();
2575
var
t2 = tests2.Pop();
2642
var tests = ArrayBuilder<
Tests
>.GetInstance();
2647
var
t = tests.Pop();
2688
Tests
firstTest;
2720
private AndSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests) { }
2721
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
2722
public static
Tests
Create(
Tests
t1,
Tests
t2)
2727
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
2732
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
2752
var
result = remainingTests.Count switch
2799
private OrSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests) { }
2800
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
2801
public static
Tests
Create(
Tests
t1,
Tests
t2)
2806
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
2811
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
2831
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);