5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
3356public sealed class True : Tests 3380public sealed class False : Tests 3406public sealed class One : Tests 3980public sealed class Not : Tests 4033public abstract class SequenceTests : Tests
247 references to Tests
Microsoft.CodeAnalysis.CSharp (247)
Binder\DecisionDagBuilder.cs (239)
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))); 1019tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1037return Tests.AndSequence.Create(tests); 1072tests.Add(new Tests.One(evaluation)); 1077private Tests MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 1079var tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings); 1080return Tests.Not.Create(tests); 1083private Tests MakeTestsAndBindingsForBinaryPattern( 1101Tests result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings); 1112Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 1114var builder = ArrayBuilder<Tests>.GetInstance(2); 1119var result = Tests.OrSequence.Create(builder); 1127builder = ArrayBuilder<Tests>.GetInstance(2); 1133builder.Add(new Tests.One(evaluation)); 1134return Tests.AndSequence.Create(builder); 1146return Tests.AndSequence.Create(builder); 1151private Tests MakeTestsAndBindingsForRelationalPattern( 1159var tests = ArrayBuilder<Tests>.GetInstance(2); 1166tests.Add(Tests.False.Instance); 1170tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 1173return Tests.AndSequence.Create(tests); 1618RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1685stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundExplicitNullTest); 1900var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e); 1901if (remainingTests is Tests.False) 3139public readonly Tests RemainingTests; 3146Tests RemainingTests, 3162public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 3167public bool PatternIsSatisfied => RemainingTests is Tests.True; 3173public bool IsImpossible => RemainingTests is Tests.False; 3193public StateForCase WithRemainingTests(Tests newRemainingTests) 3200/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 3223out Tests whenTrue, 3224out Tests whenFalse, 3233public readonly Tests FinalResult; 3239public readonly Tests? ConditionToUseFinalResult; 3240public readonly Tests? TempsUpdatedResult; 3243Tests finalResult, 3245Tests? conditionToUseFinalResult, 3246Tests? tempsUpdatedResult) 3259public Tests RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e) 3264protected Tests RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e) 3273var finalResult = ArrayBuilder<Tests>.GetInstance(2); 3310private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<Tests> assignments) 3325assignments.Add(new Tests.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom))); 3350public virtual Tests RewriteNestedLengthTests() => this; 3366out Tests whenTrue, 3367out Tests whenFalse, 3390out Tests whenTrue, 3391out Tests whenFalse, 3417out Tests whenTrue, 3418out Tests whenFalse, 3471void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out Tests whenTrue, out Tests whenFalse) 3473whenTrue = trueDecisionImpliesTrueOther ? Tests.True.Instance : trueDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3474whenFalse = falseDecisionImpliesTrueOther ? Tests.True.Instance : falseDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3482public override Tests RewriteNestedLengthTests() 3521static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 3555return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3565return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3580Tests finalResult = RemoveEvaluation(tempsUpdatedResult, builder, state, ref tempMap, e, out var condition); 3618public static Tests RemoveEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out Tests? condition) 3669private static Tests RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1) 3673return Tests.True.Instance; 3679private static Tests RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1) 3685return Tests.True.Instance; 3713private static Tests RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1) 3719return Tests.True.Instance; 3737private static Tests RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1) 3747return Tests.True.Instance; 3779static Tests? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval) 3804return AndSequence.Create(new Tests.One(newTypeEval), new Tests.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp))); 3814private static Tests RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out Tests? condition) 3834return Tests.True.Instance; 3852return Tests.True.Instance; 3860condition = new Tests.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp)); 3862return Tests.True.Instance; 3983public readonly Tests Negated; 3984private Not(Tests negated) => Negated = negated; 3985public static Tests Create(Tests negated) => negated switch 3987Tests.True _ => Tests.False.Instance, 3988Tests.False _ => Tests.True.Instance, 3989Tests.Not n => n.Negated, // double negative 3990Tests.AndSequence a => new Not(a), 3991Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 3992Tests.One o => new Not(o), 3995private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 3997var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 3998foreach (var t in seq) 4012public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 4021out Tests whenTrue, 4022out Tests whenFalse, 4025Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundExplicitNullTest); 4035public readonly ImmutableArray<Tests> RemainingTests; 4036protected SequenceTests(ImmutableArray<Tests> remainingTests) 4041public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 4048out Tests whenTrue, 4049out Tests whenFalse, 4052var testsToFilter = ArrayBuilder<Tests?>.GetInstance(); 4054var trueTests = ArrayBuilder<Tests>.GetInstance(); 4055var falseTests = ArrayBuilder<Tests>.GetInstance(); 4061var current = testsToFilter.Pop(); 4083current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundExplicitNullTest); 4105static void assemble(SequenceTests toAssemble, ArrayBuilder<Tests> tests) 4108var newSequence = ArrayBuilder<Tests>.GetInstance(length, null!); 4126var testsToRewrite = ArrayBuilder<(Tests? Tests, bool SkipRewrite)>.GetInstance(); 4132var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4143ImmutableArray<Tests> remainingTests = seq.RemainingTests; 4157var newSequence = ArrayBuilder<Tests>.GetInstance(childCount); 4211var result = testsRewritten.Pop(); 4240var leftToRewriteBuilder = ArrayBuilder<Tests>.GetInstance(); 4267void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<Tests> leftToRewriteBuilder) 4331void popAndAddChildrenLeftToRewrite(ArrayBuilder<Tests> leftToRewriteBuilder) 4349public sealed override Tests RewriteNestedLengthTests() 4351var testsToRewrite = ArrayBuilder<Tests?>.GetInstance(); 4353var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4359var current = testsToRewrite.Pop(); 4372var newSequence = ArrayBuilder<Tests>.GetInstance(length); 4388var result = testsRewritten.Pop(); 4412var tests1 = ArrayBuilder<Tests>.GetInstance(); 4413var tests2 = ArrayBuilder<Tests>.GetInstance(); 4420var t1 = tests1.Pop(); 4421var t2 = tests2.Pop(); 4492var tests = ArrayBuilder<Tests>.GetInstance(); 4497var t = tests.Pop(); 4538Tests firstTest; 4570private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4574public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4575public static Tests Create(Tests t1, Tests t2) 4580var builder = ArrayBuilder<Tests>.GetInstance(2); 4585public static Tests Create(ArrayBuilder<Tests> remainingTests) 4605var result = remainingTests.Count switch 4676private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4680public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4681public static Tests Create(Tests t1, Tests t2) 4686var builder = ArrayBuilder<Tests>.GetInstance(2); 4691public static Tests Create(ArrayBuilder<Tests> remainingTests) 4711var 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);