6 types derived from Tests
Microsoft.CodeAnalysis.CSharp (6)
Binder\DecisionDagBuilder.cs (6)
3386public sealed class True : Tests 3410public sealed class False : Tests 3436public sealed class One : Tests 4038public sealed class ValueSet : Tests 4183public sealed class Not : Tests 4239public abstract class SequenceTests : Tests
260 references to Tests
Microsoft.CodeAnalysis.CSharp (260)
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);
Binder\DecisionDagBuilder.cs (252)
201Tests tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings); 205private Tests MakeAndSimplifyTestsAndBindings( 211Tests tests = MakeTestsAndBindings(input, pattern, bindingsBuilder); 217private static Tests SimplifyTestsAndBindings( 218Tests tests, 234var testsToSimplify = ArrayBuilder<Tests?>.GetInstance(); 235var testsToAssemble = ArrayBuilder<Tests>.GetInstance(); 236var testsSimplified = ArrayBuilder<Tests>.GetInstance(); 242var current = testsToSimplify.Pop(); 246case Tests.SequenceTests seq: 251case Tests.True _: 252case Tests.False _: 255case Tests.One(BoundDagEvaluation e): 265testsSimplified.Push(Tests.True.Instance); 268case Tests.One(BoundDagTest d): 274case Tests.ValueSet v: 280case Tests.Not n: 287var toAssemble = testsToAssemble.Pop(); 290case Tests.SequenceTests seq: 292var newSequence = ArrayBuilder<Tests>.GetInstance(length); 301case Tests.Not: 302testsSimplified.Push(Tests.Not.Create(testsSimplified.Pop())); 315var result = testsSimplified.Pop(); 330private Tests MakeTestsAndBindings( 366private Tests MakeTestsAndBindings( 389return Tests.True.Instance; 420private BoundDagTemp PrepareForUnionValuePropertyMatching(ref TestInputOutputInfo input, ArrayBuilder<Tests> tests) 426tests.Add(new Tests.One(valueEvaluation)); 498private Tests MakeTestsAndBindingsForITuplePattern( 511var tests = ArrayBuilder<Tests>.GetInstance(4 + patternLength * 2); 518tests.Add(new Tests.One(lengthEvaluation)); 520tests.Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp))); 526tests.Add(new Tests.One(indexEvaluation)); 531return Tests.AndSequence.Create(tests); 585private Tests MakeTestsAndBindingsForDeclarationPattern( 592var tests = ArrayBuilder<Tests>.GetInstance(1); 611return Tests.AndSequence.Create(tests); 614private Tests MakeTestsForTypePattern( 620var tests = ArrayBuilder<Tests>.GetInstance(4); 622return Tests.AndSequence.Create(tests); 629ArrayBuilder<Tests> tests) 636tests.Add(new Tests.One(new BoundDagNonNullTest(syntax, isExplicitTest, input))); 750private bool TryMakeTestsForUnionHasValue(SyntaxNode syntax, TestInputOutputInfo inputInfo, bool sense, [NotNullWhen(true)] out Tests? tests) 760Tests test = MakeConstantTest(syntax, temp, sense ? ConstantValue.True : ConstantValue.False); 761Debug.Assert(test is Tests.One { Test: BoundDagValueTest }); 763tests = Tests.AndSequence.Create(new Tests.One(hasValueEvaluation), test); 784ArrayBuilder<Tests> tests) 789TryMakeTestsForUnionHasValue(syntax, inputInfo, sense: true, out var hasValueTests)) 800tests.Add(new Tests.One(deconstructEvaluation)); 805Tests test = MakeConstantTest(syntax, boolResult, ConstantValue.True); 806Debug.Assert(test is Tests.One { Test: var tryGetValueResultTest } && IsUnionTryGetValueTest(tryGetValueResultTest, out _, out _, out _)); 816tests.Add(new Tests.One(typeEvaluation)); 821tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, typeEvaluationTemp))); 823tests.Add(new Tests.One(typeEvaluation)); 855tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, input))); 860tests.Add(new Tests.One(evaluation)); 866private Tests MakeTestsForConstantPattern( 873if (TryMakeTestsForUnionHasValue(constant.Syntax, inputInfo, sense: false, out var tests)) 879var builder = ArrayBuilder<Tests>.GetInstance(2); 882builder.Add(new Tests.One(new BoundDagExplicitNullTest(constant.Syntax, input))); 883return Tests.AndSequence.Create(builder); 890Tests makeTestsForNonNullConstantPattern(TestInputOutputInfo inputInfo, BoundConstantPattern constant, out TestInputOutputInfo output) 895var tests = ArrayBuilder<Tests>.GetInstance(2); 898tests.Add(new Tests.One(new BoundDagValueTest(constant.Syntax, constantValue, input))); 899return Tests.AndSequence.Create(tests); 903var tests = ArrayBuilder<Tests>.GetInstance(2); 913return Tests.AndSequence.Create(tests); 918private static Tests MakeConstantTest(SyntaxNode syntax, BoundDagTemp input, ConstantValue constantValue) 924return Tests.False.Instance; 928return new Tests.One(new BoundDagValueTest(syntax, constantValue, input)); 932private Tests MakeTestsAndBindingsForRecursivePattern( 941var tests = ArrayBuilder<Tests>.GetInstance(5); 952tests.Add(new Tests.One(evaluation)); 983tests.Add(new Tests.One(evaluation)); 994tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1042return Tests.AndSequence.Create(tests); 1068tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1096tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1100tests.Add(new Tests.One(evaluation)); 1105private Tests MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 1107var tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings); 1108return Tests.Not.Create(tests); 1111private Tests MakeTestsAndBindingsForBinaryPattern( 1129Tests result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings); 1140Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 1142var builder = ArrayBuilder<Tests>.GetInstance(2); 1147var result = Tests.OrSequence.Create(builder); 1155builder = ArrayBuilder<Tests>.GetInstance(2); 1161builder.Add(new Tests.One(evaluation)); 1162return Tests.AndSequence.Create(builder); 1174return Tests.AndSequence.Create(builder); 1179private Tests MakeTestsAndBindingsForRelationalPattern( 1187var tests = ArrayBuilder<Tests>.GetInstance(2); 1194tests.Add(Tests.False.Instance); 1198tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 1201return Tests.AndSequence.Create(tests); 1646RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1713stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundRelatedExplicitNullTest); 1928var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e); 1929if (remainingTests is Tests.False) 3169public readonly Tests RemainingTests; 3176Tests RemainingTests, 3192public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 3197public bool PatternIsSatisfied => RemainingTests is Tests.True; 3203public bool IsImpossible => RemainingTests is Tests.False; 3223public StateForCase WithRemainingTests(Tests newRemainingTests) 3230/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 3253out Tests whenTrue, 3254out Tests whenFalse, 3263public readonly Tests FinalResult; 3269public readonly Tests? ConditionToUseFinalResult; 3270public readonly Tests? TempsUpdatedResult; 3273Tests finalResult, 3275Tests? conditionToUseFinalResult, 3276Tests? tempsUpdatedResult) 3289public Tests RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e) 3294protected Tests RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e) 3303var finalResult = ArrayBuilder<Tests>.GetInstance(2); 3340private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<Tests> assignments) 3355assignments.Add(new Tests.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom))); 3380public virtual Tests RewriteNestedLengthTests() => this; 3396out Tests whenTrue, 3397out Tests whenFalse, 3420out Tests whenTrue, 3421out Tests whenFalse, 3447out Tests whenTrue, 3448out Tests whenFalse, 3501void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out Tests whenTrue, out Tests whenFalse) 3503whenTrue = trueDecisionImpliesTrueOther ? Tests.True.Instance : trueDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3504whenFalse = falseDecisionImpliesTrueOther ? Tests.True.Instance : falseDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3512public override Tests RewriteNestedLengthTests() 3551static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 3585return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3595return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3610Tests finalResult; 3611Tests? condition; 3658static Tests removeEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out Tests? condition) 3702Tests result = removeEvaluation(tests, builder, state, ref tempMap, e, out Tests? condition); 3722private static Tests RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1) 3726return Tests.True.Instance; 3732private static Tests RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1) 3738return Tests.True.Instance; 3766private static Tests RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1) 3772return Tests.True.Instance; 3790private static Tests RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1) 3800return Tests.True.Instance; 3832static Tests? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval) 3857return AndSequence.Create(new Tests.One(newTypeEval), new Tests.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp))); 3867private static Tests RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out Tests? condition) 3887return Tests.True.Instance; 3905return Tests.True.Instance; 3913condition = new Tests.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp)); 3915return Tests.True.Instance; 4058out Tests whenTrue, 4059out Tests whenFalse, 4127private Tests ComputeFilteredResult(IValueSet? possibleValues) 4170public override Tests RewriteNestedLengthTests() 4186public readonly Tests Negated; 4187private Not(Tests negated) => Negated = negated; 4188public static Tests Create(Tests negated) => negated switch 4190Tests.True _ => Tests.False.Instance, 4191Tests.False _ => Tests.True.Instance, 4192Tests.Not n => n.Negated, // double negative 4193Tests.AndSequence a => new Not(a), 4194Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 4195Tests.ValueSet v => new Not(v), 4196Tests.One o => new Not(o), 4199private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 4201var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 4202foreach (var t in seq) 4218public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 4227out Tests whenTrue, 4228out Tests whenFalse, 4231Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundRelatedExplicitNullTest); 4241public readonly ImmutableArray<Tests> RemainingTests; 4242protected SequenceTests(ImmutableArray<Tests> remainingTests) 4247public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 4254out Tests whenTrue, 4255out Tests whenFalse, 4258var testsToFilter = ArrayBuilder<Tests?>.GetInstance(); 4260var trueTests = ArrayBuilder<Tests>.GetInstance(); 4261var falseTests = ArrayBuilder<Tests>.GetInstance(); 4267var current = testsToFilter.Pop(); 4289current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundRelatedExplicitNullTest); 4311static void assemble(SequenceTests toAssemble, ArrayBuilder<Tests> tests) 4314var newSequence = ArrayBuilder<Tests>.GetInstance(length, fillWithValue: null!); 4332var testsToRewrite = ArrayBuilder<(Tests? Tests, bool SkipRewrite)>.GetInstance(); 4338var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4349ImmutableArray<Tests> remainingTests = seq.RemainingTests; 4363var newSequence = ArrayBuilder<Tests>.GetInstance(childCount); 4417var result = testsRewritten.Pop(); 4446var leftToRewriteBuilder = ArrayBuilder<Tests>.GetInstance(); 4473void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<Tests> leftToRewriteBuilder) 4537void popAndAddChildrenLeftToRewrite(ArrayBuilder<Tests> leftToRewriteBuilder) 4555public sealed override Tests RewriteNestedLengthTests() 4557var testsToRewrite = ArrayBuilder<Tests?>.GetInstance(); 4559var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4565var current = testsToRewrite.Pop(); 4578var newSequence = ArrayBuilder<Tests>.GetInstance(length); 4594var result = testsRewritten.Pop(); 4618var tests1 = ArrayBuilder<Tests>.GetInstance(); 4619var tests2 = ArrayBuilder<Tests>.GetInstance(); 4626var t1 = tests1.Pop(); 4627var t2 = tests2.Pop(); 4698var tests = ArrayBuilder<Tests>.GetInstance(); 4703var t = tests.Pop(); 4744Tests firstTest; 4776private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4780public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4781public static Tests Create(Tests t1, Tests t2) 4786var builder = ArrayBuilder<Tests>.GetInstance(2); 4791public static Tests Create(ArrayBuilder<Tests> remainingTests) 4811var result = remainingTests.Count switch 4882private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4886public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4887public static Tests Create(Tests t1, Tests t2) 4892var builder = ArrayBuilder<Tests>.GetInstance(2); 4897public static Tests Create(ArrayBuilder<Tests> remainingTests) 4926var builder = ImmutableArray.CreateBuilder<Tests>(count); 4951if (TryCreateValueSet(builder, out Tests? valueSet)) 4959private static bool TryCreateValueSet(ImmutableArray<Tests>.Builder builder, [NotNullWhen(true)] out Tests? result) 5026static IConstantValueSet getValueSetForElement(Tests element, IConstantValueSetFactory factory)