5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
3329public sealed class True : Tests 3353public sealed class False : Tests 3379public sealed class One : Tests 3953public sealed class Not : Tests 4006public abstract class SequenceTests : Tests
245 references to Tests
Microsoft.CodeAnalysis.CSharp (245)
Binder\DecisionDagBuilder.cs (237)
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))); 748private bool TryMakeTestsForUnionHasValue(SyntaxNode syntax, TestInputOutputInfo inputInfo, bool sense, [NotNullWhen(true)] out Tests? tests) 758Tests test = MakeConstantTest(syntax, temp, sense ? ConstantValue.True : ConstantValue.False); 759Debug.Assert(test is Tests.One { Test: BoundDagValueTest }); 761tests = Tests.AndSequence.Create(new Tests.One(hasValueEvaluation), test); 782ArrayBuilder<Tests> tests) 787TryMakeTestsForUnionHasValue(syntax, inputInfo, sense: true, out var hasValueTests)) 798tests.Add(new Tests.One(deconstructEvaluation)); 803Tests test = MakeConstantTest(syntax, boolResult, ConstantValue.True); 804Debug.Assert(test is Tests.One { Test: var tryGetValueResultTest } && IsUnionTryGetValueTest(tryGetValueResultTest, out _, out _, out _)); 814tests.Add(new Tests.One(typeEvaluation)); 844tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, input))); 849tests.Add(new Tests.One(evaluation)); 855private Tests MakeTestsForConstantPattern( 862if (TryMakeTestsForUnionHasValue(constant.Syntax, inputInfo, sense: false, out var tests)) 868var builder = ArrayBuilder<Tests>.GetInstance(2); 871builder.Add(new Tests.One(new BoundDagExplicitNullTest(constant.Syntax, input))); 872return Tests.AndSequence.Create(builder); 879Tests makeTestsForNonNullConstantPattern(TestInputOutputInfo inputInfo, BoundConstantPattern constant, out TestInputOutputInfo output) 884var tests = ArrayBuilder<Tests>.GetInstance(2); 887tests.Add(new Tests.One(new BoundDagValueTest(constant.Syntax, constantValue, input))); 888return Tests.AndSequence.Create(tests); 892var tests = ArrayBuilder<Tests>.GetInstance(2); 902return Tests.AndSequence.Create(tests); 907private static Tests MakeConstantTest(SyntaxNode syntax, BoundDagTemp input, ConstantValue constantValue) 913return Tests.False.Instance; 917return new Tests.One(new BoundDagValueTest(syntax, constantValue, input)); 921private Tests MakeTestsAndBindingsForRecursivePattern( 930var tests = ArrayBuilder<Tests>.GetInstance(5); 941tests.Add(new Tests.One(evaluation)); 972tests.Add(new Tests.One(evaluation)); 983tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1013tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1031return Tests.AndSequence.Create(tests); 1066tests.Add(new Tests.One(evaluation)); 1071private Tests MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 1073var tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings); 1074return Tests.Not.Create(tests); 1077private Tests MakeTestsAndBindingsForBinaryPattern( 1095Tests result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings); 1106Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 1108var builder = ArrayBuilder<Tests>.GetInstance(2); 1113var result = Tests.OrSequence.Create(builder); 1121builder = ArrayBuilder<Tests>.GetInstance(2); 1128builder.Add(new Tests.One(evaluation)); 1129return Tests.AndSequence.Create(builder); 1141return Tests.AndSequence.Create(builder); 1146private Tests MakeTestsAndBindingsForRelationalPattern( 1154var tests = ArrayBuilder<Tests>.GetInstance(2); 1161tests.Add(Tests.False.Instance); 1165tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 1168return Tests.AndSequence.Create(tests); 1613RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1680stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundExplicitNullTest); 1895var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e); 1896if (remainingTests is Tests.False) 3112public readonly Tests RemainingTests; 3119Tests RemainingTests, 3135public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 3140public bool PatternIsSatisfied => RemainingTests is Tests.True; 3146public bool IsImpossible => RemainingTests is Tests.False; 3166public StateForCase WithRemainingTests(Tests newRemainingTests) 3173/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 3196out Tests whenTrue, 3197out Tests whenFalse, 3206public readonly Tests FinalResult; 3212public readonly Tests? ConditionToUseFinalResult; 3213public readonly Tests? TempsUpdatedResult; 3216Tests finalResult, 3218Tests? conditionToUseFinalResult, 3219Tests? tempsUpdatedResult) 3232public Tests RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e) 3237protected Tests RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e) 3246var finalResult = ArrayBuilder<Tests>.GetInstance(2); 3283private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<Tests> assignments) 3298assignments.Add(new Tests.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom))); 3323public virtual Tests RewriteNestedLengthTests() => this; 3339out Tests whenTrue, 3340out Tests whenFalse, 3363out Tests whenTrue, 3364out Tests whenFalse, 3390out Tests whenTrue, 3391out Tests whenFalse, 3444void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out Tests whenTrue, out Tests whenFalse) 3446whenTrue = trueDecisionImpliesTrueOther ? Tests.True.Instance : trueDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3447whenFalse = falseDecisionImpliesTrueOther ? Tests.True.Instance : falseDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3455public override Tests RewriteNestedLengthTests() 3494static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 3528return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3538return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3553Tests finalResult = RemoveEvaluation(tempsUpdatedResult, builder, state, ref tempMap, e, out var condition); 3591public static Tests RemoveEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out Tests? condition) 3642private static Tests RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1) 3646return Tests.True.Instance; 3652private static Tests RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1) 3658return Tests.True.Instance; 3686private static Tests RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1) 3692return Tests.True.Instance; 3710private static Tests RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1) 3720return Tests.True.Instance; 3752static Tests? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval) 3777return AndSequence.Create(new Tests.One(newTypeEval), new Tests.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp))); 3787private static Tests RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out Tests? condition) 3807return Tests.True.Instance; 3825return Tests.True.Instance; 3833condition = new Tests.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp)); 3835return Tests.True.Instance; 3956public readonly Tests Negated; 3957private Not(Tests negated) => Negated = negated; 3958public static Tests Create(Tests negated) => negated switch 3960Tests.True _ => Tests.False.Instance, 3961Tests.False _ => Tests.True.Instance, 3962Tests.Not n => n.Negated, // double negative 3963Tests.AndSequence a => new Not(a), 3964Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 3965Tests.One o => new Not(o), 3968private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 3970var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 3971foreach (var t in seq) 3985public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 3994out Tests whenTrue, 3995out Tests whenFalse, 3998Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundExplicitNullTest); 4008public readonly ImmutableArray<Tests> RemainingTests; 4009protected SequenceTests(ImmutableArray<Tests> remainingTests) 4014public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 4021out Tests whenTrue, 4022out Tests whenFalse, 4025var testsToFilter = ArrayBuilder<Tests?>.GetInstance(); 4027var trueTests = ArrayBuilder<Tests>.GetInstance(); 4028var falseTests = ArrayBuilder<Tests>.GetInstance(); 4034var current = testsToFilter.Pop(); 4056current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundExplicitNullTest); 4078static void assemble(SequenceTests toAssemble, ArrayBuilder<Tests> tests) 4081var newSequence = ArrayBuilder<Tests>.GetInstance(length, null!); 4099var testsToRewrite = ArrayBuilder<(Tests? Tests, bool SkipRewrite)>.GetInstance(); 4105var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4116ImmutableArray<Tests> remainingTests = seq.RemainingTests; 4130var newSequence = ArrayBuilder<Tests>.GetInstance(childCount); 4184var result = testsRewritten.Pop(); 4213var leftToRewriteBuilder = ArrayBuilder<Tests>.GetInstance(); 4240void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<Tests> leftToRewriteBuilder) 4304void popAndAddChildrenLeftToRewrite(ArrayBuilder<Tests> leftToRewriteBuilder) 4322public sealed override Tests RewriteNestedLengthTests() 4324var testsToRewrite = ArrayBuilder<Tests?>.GetInstance(); 4326var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4332var current = testsToRewrite.Pop(); 4345var newSequence = ArrayBuilder<Tests>.GetInstance(length); 4361var result = testsRewritten.Pop(); 4385var tests1 = ArrayBuilder<Tests>.GetInstance(); 4386var tests2 = ArrayBuilder<Tests>.GetInstance(); 4393var t1 = tests1.Pop(); 4394var t2 = tests2.Pop(); 4461var tests = ArrayBuilder<Tests>.GetInstance(); 4466var t = tests.Pop(); 4507Tests firstTest; 4539private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4543public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4544public static Tests Create(Tests t1, Tests t2) 4549var builder = ArrayBuilder<Tests>.GetInstance(2); 4554public static Tests Create(ArrayBuilder<Tests> remainingTests) 4574var result = remainingTests.Count switch 4645private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4649public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4650public static Tests Create(Tests t1, Tests t2) 4655var builder = ArrayBuilder<Tests>.GetInstance(2); 4660public static Tests Create(ArrayBuilder<Tests> remainingTests) 4680var 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);