5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
3376public sealed class True : Tests 3400public sealed class False : Tests 3426public sealed class One : Tests 4000public sealed class Not : Tests 4053public abstract class SequenceTests : Tests
248 references to Tests
Microsoft.CodeAnalysis.CSharp (248)
Binder\DecisionDagBuilder.cs (240)
199Tests tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings); 203private Tests MakeAndSimplifyTestsAndBindings( 209Tests tests = MakeTestsAndBindings(input, pattern, bindingsBuilder); 215private static Tests SimplifyTestsAndBindings( 216Tests tests, 232var testsToSimplify = ArrayBuilder<Tests?>.GetInstance(); 233var testsToAssemble = ArrayBuilder<Tests>.GetInstance(); 234var testsSimplified = ArrayBuilder<Tests>.GetInstance(); 240var current = testsToSimplify.Pop(); 244case Tests.SequenceTests seq: 249case Tests.True _: 250case Tests.False _: 253case Tests.One(BoundDagEvaluation e): 263testsSimplified.Push(Tests.True.Instance); 266case Tests.One(BoundDagTest d): 272case Tests.Not n: 279var toAssemble = testsToAssemble.Pop(); 282case Tests.SequenceTests seq: 284var newSequence = ArrayBuilder<Tests>.GetInstance(length); 293case Tests.Not: 294testsSimplified.Push(Tests.Not.Create(testsSimplified.Pop())); 307var result = testsSimplified.Pop(); 322private Tests MakeTestsAndBindings( 358private Tests MakeTestsAndBindings( 381return Tests.True.Instance; 412private BoundDagTemp PrepareForUnionValuePropertyMatching(ref TestInputOutputInfo input, ArrayBuilder<Tests> tests) 418tests.Add(new Tests.One(valueEvaluation)); 490private Tests MakeTestsAndBindingsForITuplePattern( 503var tests = ArrayBuilder<Tests>.GetInstance(4 + patternLength * 2); 510tests.Add(new Tests.One(lengthEvaluation)); 512tests.Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp))); 518tests.Add(new Tests.One(indexEvaluation)); 523return Tests.AndSequence.Create(tests); 577private Tests MakeTestsAndBindingsForDeclarationPattern( 584var tests = ArrayBuilder<Tests>.GetInstance(1); 603return Tests.AndSequence.Create(tests); 606private Tests MakeTestsForTypePattern( 612var tests = ArrayBuilder<Tests>.GetInstance(4); 614return Tests.AndSequence.Create(tests); 621ArrayBuilder<Tests> tests) 628tests.Add(new Tests.One(new BoundDagNonNullTest(syntax, isExplicitTest, input))); 742private bool TryMakeTestsForUnionHasValue(SyntaxNode syntax, TestInputOutputInfo inputInfo, bool sense, [NotNullWhen(true)] out Tests? tests) 752Tests test = MakeConstantTest(syntax, temp, sense ? ConstantValue.True : ConstantValue.False); 753Debug.Assert(test is Tests.One { Test: BoundDagValueTest }); 755tests = Tests.AndSequence.Create(new Tests.One(hasValueEvaluation), test); 776ArrayBuilder<Tests> tests) 781TryMakeTestsForUnionHasValue(syntax, inputInfo, sense: true, out var hasValueTests)) 792tests.Add(new Tests.One(deconstructEvaluation)); 797Tests test = MakeConstantTest(syntax, boolResult, ConstantValue.True); 798Debug.Assert(test is Tests.One { Test: var tryGetValueResultTest } && IsUnionTryGetValueTest(tryGetValueResultTest, out _, out _, out _)); 808tests.Add(new Tests.One(typeEvaluation)); 813tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, typeEvaluationTemp))); 815tests.Add(new Tests.One(typeEvaluation)); 847tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, input))); 852tests.Add(new Tests.One(evaluation)); 858private Tests MakeTestsForConstantPattern( 865if (TryMakeTestsForUnionHasValue(constant.Syntax, inputInfo, sense: false, out var tests)) 871var builder = ArrayBuilder<Tests>.GetInstance(2); 874builder.Add(new Tests.One(new BoundDagExplicitNullTest(constant.Syntax, input))); 875return Tests.AndSequence.Create(builder); 882Tests makeTestsForNonNullConstantPattern(TestInputOutputInfo inputInfo, BoundConstantPattern constant, out TestInputOutputInfo output) 887var tests = ArrayBuilder<Tests>.GetInstance(2); 890tests.Add(new Tests.One(new BoundDagValueTest(constant.Syntax, constantValue, input))); 891return Tests.AndSequence.Create(tests); 895var tests = ArrayBuilder<Tests>.GetInstance(2); 905return Tests.AndSequence.Create(tests); 910private static Tests MakeConstantTest(SyntaxNode syntax, BoundDagTemp input, ConstantValue constantValue) 916return Tests.False.Instance; 920return new Tests.One(new BoundDagValueTest(syntax, constantValue, input)); 924private Tests MakeTestsAndBindingsForRecursivePattern( 933var tests = ArrayBuilder<Tests>.GetInstance(5); 944tests.Add(new Tests.One(evaluation)); 975tests.Add(new Tests.One(evaluation)); 986tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1034return Tests.AndSequence.Create(tests); 1060tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1088tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1092tests.Add(new Tests.One(evaluation)); 1097private Tests MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 1099var tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings); 1100return Tests.Not.Create(tests); 1103private Tests MakeTestsAndBindingsForBinaryPattern( 1121Tests result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings); 1132Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 1134var builder = ArrayBuilder<Tests>.GetInstance(2); 1139var result = Tests.OrSequence.Create(builder); 1147builder = ArrayBuilder<Tests>.GetInstance(2); 1153builder.Add(new Tests.One(evaluation)); 1154return Tests.AndSequence.Create(builder); 1166return Tests.AndSequence.Create(builder); 1171private Tests MakeTestsAndBindingsForRelationalPattern( 1179var tests = ArrayBuilder<Tests>.GetInstance(2); 1186tests.Add(Tests.False.Instance); 1190tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 1193return Tests.AndSequence.Create(tests); 1638RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1705stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundExplicitNullTest); 1920var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e); 1921if (remainingTests is Tests.False) 3159public readonly Tests RemainingTests; 3166Tests RemainingTests, 3182public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 3187public bool PatternIsSatisfied => RemainingTests is Tests.True; 3193public bool IsImpossible => RemainingTests is Tests.False; 3213public StateForCase WithRemainingTests(Tests newRemainingTests) 3220/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 3243out Tests whenTrue, 3244out Tests whenFalse, 3253public readonly Tests FinalResult; 3259public readonly Tests? ConditionToUseFinalResult; 3260public readonly Tests? TempsUpdatedResult; 3263Tests finalResult, 3265Tests? conditionToUseFinalResult, 3266Tests? tempsUpdatedResult) 3279public Tests RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e) 3284protected Tests RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e) 3293var finalResult = ArrayBuilder<Tests>.GetInstance(2); 3330private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<Tests> assignments) 3345assignments.Add(new Tests.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom))); 3370public virtual Tests RewriteNestedLengthTests() => this; 3386out Tests whenTrue, 3387out Tests whenFalse, 3410out Tests whenTrue, 3411out Tests whenFalse, 3437out Tests whenTrue, 3438out Tests whenFalse, 3491void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out Tests whenTrue, out Tests whenFalse) 3493whenTrue = trueDecisionImpliesTrueOther ? Tests.True.Instance : trueDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3494whenFalse = falseDecisionImpliesTrueOther ? Tests.True.Instance : falseDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3502public override Tests RewriteNestedLengthTests() 3541static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 3575return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3585return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3600Tests finalResult = RemoveEvaluation(tempsUpdatedResult, builder, state, ref tempMap, e, out var condition); 3638public static Tests RemoveEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out Tests? condition) 3689private static Tests RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1) 3693return Tests.True.Instance; 3699private static Tests RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1) 3705return Tests.True.Instance; 3733private static Tests RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1) 3739return Tests.True.Instance; 3757private static Tests RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1) 3767return Tests.True.Instance; 3799static Tests? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval) 3824return AndSequence.Create(new Tests.One(newTypeEval), new Tests.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp))); 3834private static Tests RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out Tests? condition) 3854return Tests.True.Instance; 3872return Tests.True.Instance; 3880condition = new Tests.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp)); 3882return Tests.True.Instance; 4003public readonly Tests Negated; 4004private Not(Tests negated) => Negated = negated; 4005public static Tests Create(Tests negated) => negated switch 4007Tests.True _ => Tests.False.Instance, 4008Tests.False _ => Tests.True.Instance, 4009Tests.Not n => n.Negated, // double negative 4010Tests.AndSequence a => new Not(a), 4011Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 4012Tests.One o => new Not(o), 4015private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 4017var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 4018foreach (var t in seq) 4032public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 4041out Tests whenTrue, 4042out Tests whenFalse, 4045Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundExplicitNullTest); 4055public readonly ImmutableArray<Tests> RemainingTests; 4056protected SequenceTests(ImmutableArray<Tests> remainingTests) 4061public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 4068out Tests whenTrue, 4069out Tests whenFalse, 4072var testsToFilter = ArrayBuilder<Tests?>.GetInstance(); 4074var trueTests = ArrayBuilder<Tests>.GetInstance(); 4075var falseTests = ArrayBuilder<Tests>.GetInstance(); 4081var current = testsToFilter.Pop(); 4103current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundExplicitNullTest); 4125static void assemble(SequenceTests toAssemble, ArrayBuilder<Tests> tests) 4128var newSequence = ArrayBuilder<Tests>.GetInstance(length, null!); 4146var testsToRewrite = ArrayBuilder<(Tests? Tests, bool SkipRewrite)>.GetInstance(); 4152var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4163ImmutableArray<Tests> remainingTests = seq.RemainingTests; 4177var newSequence = ArrayBuilder<Tests>.GetInstance(childCount); 4231var result = testsRewritten.Pop(); 4260var leftToRewriteBuilder = ArrayBuilder<Tests>.GetInstance(); 4287void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<Tests> leftToRewriteBuilder) 4351void popAndAddChildrenLeftToRewrite(ArrayBuilder<Tests> leftToRewriteBuilder) 4369public sealed override Tests RewriteNestedLengthTests() 4371var testsToRewrite = ArrayBuilder<Tests?>.GetInstance(); 4373var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4379var current = testsToRewrite.Pop(); 4392var newSequence = ArrayBuilder<Tests>.GetInstance(length); 4408var result = testsRewritten.Pop(); 4432var tests1 = ArrayBuilder<Tests>.GetInstance(); 4433var tests2 = ArrayBuilder<Tests>.GetInstance(); 4440var t1 = tests1.Pop(); 4441var t2 = tests2.Pop(); 4512var tests = ArrayBuilder<Tests>.GetInstance(); 4517var t = tests.Pop(); 4558Tests firstTest; 4590private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4594public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4595public static Tests Create(Tests t1, Tests t2) 4600var builder = ArrayBuilder<Tests>.GetInstance(2); 4605public static Tests Create(ArrayBuilder<Tests> remainingTests) 4625var result = remainingTests.Count switch 4696private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4700public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4701public static Tests Create(Tests t1, Tests t2) 4706var builder = ArrayBuilder<Tests>.GetInstance(2); 4711public static Tests Create(ArrayBuilder<Tests> remainingTests) 4731var result = remainingTests.Count switch
Binder\DecisionDagBuilder_ListPatterns.cs (8)
14private Tests MakeTestsAndBindingsForListPattern(TestInputOutputInfo inputInfo, BoundListPattern list, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 26var tests = ArrayBuilder<Tests>.GetInstance(4 + subpatterns.Length * 2); 32tests.Add(new Tests.One(new BoundDagTypeTest(list.Syntax, ErrorType(), input, hasErrors: true))); 47tests.Add(new Tests.One(lengthEvaluation)); 49tests.Add(new Tests.One(list.HasSlice 71tests.Add(new Tests.One(sliceEvaluation)); 86tests.Add(new Tests.One(indexEvaluation)); 99return Tests.AndSequence.Create(tests);