5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
2089
public sealed class True :
Tests
2110
public sealed class False :
Tests
2133
public sealed class One :
Tests
2278
public sealed class Not :
Tests
2323
public abstract class SequenceTests :
Tests
183 references to Tests
Microsoft.CodeAnalysis.CSharp (183)
Binder\DecisionDagBuilder.cs (175)
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
result = scanAndSimplify(tests);
228
Tests
scanAndSimplify(
Tests
tests)
232
case
Tests
.SequenceTests seq:
235
var newSequence = ArrayBuilder<
Tests
>.GetInstance(length);
242
case
Tests
.True _:
243
case
Tests
.False _:
245
case
Tests
.One(BoundDagEvaluation e):
254
return
Tests
.True.Instance;
256
case
Tests
.One(BoundDagTest d):
260
case
Tests
.Not n:
261
return
Tests
.Not.Create(scanAndSimplify(n.Negated));
268
private
Tests
MakeTestsAndBindings(
281
private
Tests
MakeTestsAndBindings(
297
return
Tests
.True.Instance;
318
private
Tests
MakeTestsAndBindingsForITuplePattern(
332
var tests = ArrayBuilder<
Tests
>.GetInstance(4 + patternLength * 2);
334
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, iTupleType, input)));
336
tests.Add(new
Tests
.One(valueAsITupleEvaluation));
341
tests.Add(new
Tests
.One(lengthEvaluation));
343
tests.Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp)));
349
tests.Add(new
Tests
.One(indexEvaluation));
354
return
Tests
.AndSequence.Create(tests);
391
private
Tests
MakeTestsAndBindingsForDeclarationPattern(
398
var tests = ArrayBuilder<
Tests
>.GetInstance(1);
416
return
Tests
.AndSequence.Create(tests);
419
private
Tests
MakeTestsForTypePattern(
425
var tests = ArrayBuilder<
Tests
>.GetInstance(4);
427
return
Tests
.AndSequence.Create(tests);
434
ArrayBuilder<
Tests
> tests)
441
tests.Add(new
Tests
.One(new BoundDagNonNullTest(syntax, isExplicitTest, input)));
453
ArrayBuilder<
Tests
> tests)
471
tests.Add(new
Tests
.One(new BoundDagTypeTest(syntax, type, input)));
476
tests.Add(new
Tests
.One(evaluation));
482
private
Tests
MakeTestsForConstantPattern(
490
return new
Tests
.One(new BoundDagExplicitNullTest(constant.Syntax, input));
495
return new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input));
499
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
506
tests.Add(
Tests
.False.Instance);
510
tests.Add(new
Tests
.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input)));
512
return
Tests
.AndSequence.Create(tests);
516
private
Tests
MakeTestsAndBindingsForRecursivePattern(
524
var tests = ArrayBuilder<
Tests
>.GetInstance(5);
534
tests.Add(new
Tests
.One(evaluation));
564
tests.Add(new
Tests
.One(evaluation));
574
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
588
tests.Add(new
Tests
.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true)));
603
return
Tests
.AndSequence.Create(tests);
630
tests.Add(new
Tests
.One(evaluation));
636
private
Tests
MakeTestsAndBindingsForNegatedPattern(BoundDagTemp input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings)
638
var
tests = MakeTestsAndBindings(input, neg.Negated, bindings);
639
return
Tests
.Not.Create(tests);
642
private
Tests
MakeTestsAndBindingsForBinaryPattern(
660
Tests
result = MakeTestsAndBindings(input, currentNode.Left, out output, bindings);
671
static
Tests
makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this,
Tests
leftTests, BoundDagTemp leftOutput, BoundDagTemp input, BoundBinaryPattern bin, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings)
673
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
678
var
result =
Tests
.OrSequence.Create(builder);
686
builder = ArrayBuilder<
Tests
>.GetInstance(2);
690
builder.Add(new
Tests
.One(evaluation));
691
return
Tests
.AndSequence.Create(builder);
700
return
Tests
.AndSequence.Create(builder);
705
private
Tests
MakeTestsAndBindingsForRelationalPattern(
713
var tests = ArrayBuilder<
Tests
>.GetInstance(2);
719
tests.Add(
Tests
.False.Instance);
723
tests.Add(new
Tests
.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors)));
726
return
Tests
.AndSequence.Create(tests);
1014
RoslynDebug.Assert(!(first.RemainingTests is
Tests
.False));
1081
stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out
Tests
whenTrueTests, out
Tests
whenFalseTests, ref foundExplicitNullTest);
1213
var
remainingTests = stateForCase.RemainingTests.RemoveEvaluation(e);
1214
if (remainingTests is
Tests
.False)
1416
out
Tests
relationCondition,
1417
out
Tests
relationEffect)
1419
relationCondition =
Tests
.True.Instance;
1420
relationEffect =
Tests
.True.Instance;
1442
ArrayBuilder<
Tests
>? conditions = null;
1456
relationCondition =
Tests
.AndSequence.Create(conditions);
1460
relationEffect = new
Tests
.One(new BoundDagAssignmentEvaluation(syntax, target: other.Input, input: test.Input));
1504
(conditions ??= ArrayBuilder<
Tests
>.GetInstance()).Add(new
Tests
.One(new BoundDagValueTest(syntax, ConstantValue.Create(lengthValue), s1LengthTemp)));
1991
public readonly
Tests
RemainingTests;
1998
Tests
RemainingTests,
2014
public bool IsFullyMatched => RemainingTests is
Tests
.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True);
2019
public bool PatternIsSatisfied => RemainingTests is
Tests
.True;
2025
public bool IsImpossible => RemainingTests is
Tests
.False;
2045
public StateForCase WithRemainingTests(
Tests
newRemainingTests)
2052
/// <inheritdoc cref="
Tests
.RewriteNestedLengthTests"/>
2075
out
Tests
whenTrue,
2076
out
Tests
whenFalse,
2079
public virtual
Tests
RemoveEvaluation(BoundDagEvaluation e) => this;
2083
public virtual
Tests
RewriteNestedLengthTests() => this;
2099
out
Tests
whenTrue,
2100
out
Tests
whenFalse,
2120
out
Tests
whenTrue,
2121
out
Tests
whenFalse,
2144
out
Tests
whenTrue,
2145
out
Tests
whenFalse,
2152
relationCondition: out
Tests
relationCondition,
2153
relationEffect: out
Tests
relationEffect))
2201
static
Tests
rewrite(bool decisionImpliesTrueOther, bool decisionPermitsTrueOther,
Tests
relationCondition,
Tests
relationEffect,
Tests
other)
2211
public override
Tests
RemoveEvaluation(BoundDagEvaluation e) => e.Equals(Test) ?
Tests
.True.Instance : (
Tests
)this;
2215
public override
Tests
RewriteNestedLengthTests()
2254
static
Tests
? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset)
2281
public readonly
Tests
Negated;
2282
private Not(
Tests
negated) => Negated = negated;
2283
public static
Tests
Create(
Tests
negated) => negated switch
2285
Tests
.True _ =>
Tests
.False.Instance,
2286
Tests
.False _ =>
Tests
.True.Instance,
2287
Tests
.Not n => n.Negated, // double negative
2288
Tests
.AndSequence a => new Not(a),
2289
Tests
.OrSequence a =>
Tests
.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences
2290
Tests
.One o => new Not(o),
2293
private static ArrayBuilder<
Tests
> NegateSequenceElements(ImmutableArray<
Tests
> seq)
2295
var builder = ArrayBuilder<
Tests
>.GetInstance(seq.Length);
2296
foreach (
var
t in seq)
2301
public override
Tests
RemoveEvaluation(BoundDagEvaluation e) => Create(Negated.RemoveEvaluation(e));
2302
public override
Tests
RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests());
2311
out
Tests
whenTrue,
2312
out
Tests
whenFalse,
2315
Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
var
whenTestTrue, out
var
whenTestFalse, ref foundExplicitNullTest);
2325
public readonly ImmutableArray<
Tests
> RemainingTests;
2326
protected SequenceTests(ImmutableArray<
Tests
> remainingTests)
2331
public abstract
Tests
Update(ArrayBuilder<
Tests
> remainingTests);
2338
out
Tests
whenTrue,
2339
out
Tests
whenFalse,
2342
var trueBuilder = ArrayBuilder<
Tests
>.GetInstance(RemainingTests.Length);
2343
var falseBuilder = ArrayBuilder<
Tests
>.GetInstance(RemainingTests.Length);
2344
foreach (
var
other in RemainingTests)
2346
other.Filter(builder, test, state, whenTrueValues, whenFalseValues, out
Tests
oneTrue, out
Tests
oneFalse, ref foundExplicitNullTest);
2354
public sealed override
Tests
RemoveEvaluation(BoundDagEvaluation e)
2356
var builder = ArrayBuilder<
Tests
>.GetInstance(RemainingTests.Length);
2357
foreach (
var
test in RemainingTests)
2362
public sealed override
Tests
RewriteNestedLengthTests()
2364
var builder = ArrayBuilder<
Tests
>.GetInstance(RemainingTests.Length);
2365
foreach (
var
test in RemainingTests)
2387
private AndSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests) { }
2388
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
2389
public static
Tests
Create(
Tests
t1,
Tests
t2)
2394
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
2399
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
2419
var
result = remainingTests.Count switch
2466
private OrSequence(ImmutableArray<
Tests
> remainingTests) : base(remainingTests) { }
2468
public override
Tests
Update(ArrayBuilder<
Tests
> remainingTests) => Create(remainingTests);
2469
public static
Tests
Create(
Tests
t1,
Tests
t2)
2474
var builder = ArrayBuilder<
Tests
>.GetInstance(2);
2479
public static
Tests
Create(ArrayBuilder<
Tests
> remainingTests)
2499
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);