6 types derived from Tests
Microsoft.CodeAnalysis.CSharp (6)
Binder\DecisionDagBuilder.cs (6)
3387public sealed class True : Tests 3411public sealed class False : Tests 3437public sealed class One : Tests 4039public sealed class ValueSet : Tests 4184public sealed class Not : Tests 4240public 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)
202Tests tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings); 206private Tests MakeAndSimplifyTestsAndBindings( 212Tests tests = MakeTestsAndBindings(input, pattern, bindingsBuilder); 218private static Tests SimplifyTestsAndBindings( 219Tests tests, 235var testsToSimplify = ArrayBuilder<Tests?>.GetInstance(); 236var testsToAssemble = ArrayBuilder<Tests>.GetInstance(); 237var testsSimplified = ArrayBuilder<Tests>.GetInstance(); 243var current = testsToSimplify.Pop(); 247case Tests.SequenceTests seq: 252case Tests.True _: 253case Tests.False _: 256case Tests.One(BoundDagEvaluation e): 266testsSimplified.Push(Tests.True.Instance); 269case Tests.One(BoundDagTest d): 275case Tests.ValueSet v: 281case Tests.Not n: 288var toAssemble = testsToAssemble.Pop(); 291case Tests.SequenceTests seq: 293var newSequence = ArrayBuilder<Tests>.GetInstance(length); 302case Tests.Not: 303testsSimplified.Push(Tests.Not.Create(testsSimplified.Pop())); 316var result = testsSimplified.Pop(); 331private Tests MakeTestsAndBindings( 367private Tests MakeTestsAndBindings( 390return Tests.True.Instance; 421private BoundDagTemp PrepareForUnionValuePropertyMatching(ref TestInputOutputInfo input, ArrayBuilder<Tests> tests) 427tests.Add(new Tests.One(valueEvaluation)); 499private Tests MakeTestsAndBindingsForITuplePattern( 512var tests = ArrayBuilder<Tests>.GetInstance(4 + patternLength * 2); 519tests.Add(new Tests.One(lengthEvaluation)); 521tests.Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp))); 527tests.Add(new Tests.One(indexEvaluation)); 532return Tests.AndSequence.Create(tests); 586private Tests MakeTestsAndBindingsForDeclarationPattern( 593var tests = ArrayBuilder<Tests>.GetInstance(1); 612return Tests.AndSequence.Create(tests); 615private Tests MakeTestsForTypePattern( 621var tests = ArrayBuilder<Tests>.GetInstance(4); 623return Tests.AndSequence.Create(tests); 630ArrayBuilder<Tests> tests) 637tests.Add(new Tests.One(new BoundDagNonNullTest(syntax, isExplicitTest, input))); 751private bool TryMakeTestsForUnionHasValue(SyntaxNode syntax, TestInputOutputInfo inputInfo, bool sense, [NotNullWhen(true)] out Tests? tests) 761Tests test = MakeConstantTest(syntax, temp, sense ? ConstantValue.True : ConstantValue.False); 762Debug.Assert(test is Tests.One { Test: BoundDagValueTest }); 764tests = Tests.AndSequence.Create(new Tests.One(hasValueEvaluation), test); 785ArrayBuilder<Tests> tests) 790TryMakeTestsForUnionHasValue(syntax, inputInfo, sense: true, out var hasValueTests)) 801tests.Add(new Tests.One(deconstructEvaluation)); 806Tests test = MakeConstantTest(syntax, boolResult, ConstantValue.True); 807Debug.Assert(test is Tests.One { Test: var tryGetValueResultTest } && IsUnionTryGetValueTest(tryGetValueResultTest, out _, out _, out _)); 817tests.Add(new Tests.One(typeEvaluation)); 822tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, typeEvaluationTemp))); 824tests.Add(new Tests.One(typeEvaluation)); 856tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, input))); 861tests.Add(new Tests.One(evaluation)); 867private Tests MakeTestsForConstantPattern( 874if (TryMakeTestsForUnionHasValue(constant.Syntax, inputInfo, sense: false, out var tests)) 880var builder = ArrayBuilder<Tests>.GetInstance(2); 883builder.Add(new Tests.One(new BoundDagExplicitNullTest(constant.Syntax, input))); 884return Tests.AndSequence.Create(builder); 891Tests makeTestsForNonNullConstantPattern(TestInputOutputInfo inputInfo, BoundConstantPattern constant, out TestInputOutputInfo output) 896var tests = ArrayBuilder<Tests>.GetInstance(2); 899tests.Add(new Tests.One(new BoundDagValueTest(constant.Syntax, constantValue, input))); 900return Tests.AndSequence.Create(tests); 904var tests = ArrayBuilder<Tests>.GetInstance(2); 914return Tests.AndSequence.Create(tests); 919private static Tests MakeConstantTest(SyntaxNode syntax, BoundDagTemp input, ConstantValue constantValue) 925return Tests.False.Instance; 929return new Tests.One(new BoundDagValueTest(syntax, constantValue, input)); 933private Tests MakeTestsAndBindingsForRecursivePattern( 942var tests = ArrayBuilder<Tests>.GetInstance(5); 953tests.Add(new Tests.One(evaluation)); 984tests.Add(new Tests.One(evaluation)); 995tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 1043return Tests.AndSequence.Create(tests); 1069tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1097tests.Add(new Tests.One(new BoundDagTypeTest(subpattern.Syntax, ErrorType(), input, hasErrors: true))); 1101tests.Add(new Tests.One(evaluation)); 1106private Tests MakeTestsAndBindingsForNegatedPattern(TestInputOutputInfo input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 1108var tests = MakeTestsAndBindings(input, neg.Negated, output: out _, bindings); 1109return Tests.Not.Create(tests); 1112private Tests MakeTestsAndBindingsForBinaryPattern( 1130Tests result = MakeTestsAndBindings(inputInfo, currentNode.Left, out outputInfo, bindings); 1141Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, TestInputOutputInfo leftOutputInfo, TestInputOutputInfo inputInfo, BoundBinaryPattern bin, out TestInputOutputInfo outputInfo, ArrayBuilder<BoundPatternBinding> bindings) 1143var builder = ArrayBuilder<Tests>.GetInstance(2); 1148var result = Tests.OrSequence.Create(builder); 1156builder = ArrayBuilder<Tests>.GetInstance(2); 1162builder.Add(new Tests.One(evaluation)); 1163return Tests.AndSequence.Create(builder); 1175return Tests.AndSequence.Create(builder); 1180private Tests MakeTestsAndBindingsForRelationalPattern( 1188var tests = ArrayBuilder<Tests>.GetInstance(2); 1195tests.Add(Tests.False.Instance); 1199tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 1202return Tests.AndSequence.Create(tests); 1647RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1714stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundRelatedExplicitNullTest); 1929var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(this, state, stateForCase.Bindings, e); 1930if (remainingTests is Tests.False) 3170public readonly Tests RemainingTests; 3177Tests RemainingTests, 3193public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 3198public bool PatternIsSatisfied => RemainingTests is Tests.True; 3204public bool IsImpossible => RemainingTests is Tests.False; 3224public StateForCase WithRemainingTests(Tests newRemainingTests) 3231/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 3254out Tests whenTrue, 3255out Tests whenFalse, 3264public readonly Tests FinalResult; 3270public readonly Tests? ConditionToUseFinalResult; 3271public readonly Tests? TempsUpdatedResult; 3274Tests finalResult, 3276Tests? conditionToUseFinalResult, 3277Tests? tempsUpdatedResult) 3290public Tests RemoveEvaluation(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, BoundDagEvaluation e) 3295protected Tests RemoveEvaluationAndUpdateTempReferences(DecisionDagBuilder dagBuilder, DagState state, ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e) 3304var finalResult = ArrayBuilder<Tests>.GetInstance(2); 3341private static void AddBindingsPatchingAssignments(ImmutableArray<BoundPatternBinding> bindings, ImmutableDictionary<BoundDagTemp, BoundDagTemp> oldTempMap, ImmutableDictionary<BoundDagTemp, BoundDagTemp> newTempMap, ArrayBuilder<Tests> assignments) 3356assignments.Add(new Tests.One(new BoundDagAssignmentEvaluation(useValueFrom.Syntax, b.TempContainingValue, useValueFrom))); 3381public virtual Tests RewriteNestedLengthTests() => this; 3397out Tests whenTrue, 3398out Tests whenFalse, 3421out Tests whenTrue, 3422out Tests whenFalse, 3448out Tests whenTrue, 3449out Tests whenFalse, 3502void split(bool trueDecisionPermitsTrueOther, bool falseDecisionPermitsTrueOther, bool trueDecisionImpliesTrueOther, bool falseDecisionImpliesTrueOther, out Tests whenTrue, out Tests whenFalse) 3504whenTrue = trueDecisionImpliesTrueOther ? Tests.True.Instance : trueDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3505whenFalse = falseDecisionImpliesTrueOther ? Tests.True.Instance : falseDecisionPermitsTrueOther ? this : (Tests)Tests.False.Instance; 3513public override Tests RewriteNestedLengthTests() 3552static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 3586return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3596return new RemoveEvaluationAndUpdateTempReferencesResult(Tests.True.Instance, tempMap, conditionToUseFinalResult: null, tempsUpdatedResult: null); 3611Tests finalResult; 3612Tests? condition; 3659static Tests removeEvaluation(One tests, DecisionDagBuilder builder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e, out Tests? condition) 3703Tests result = removeEvaluation(tests, builder, state, ref tempMap, e, out Tests? condition); 3723private static Tests RemoveAssignmentEvaluation(One tests, BoundDagAssignmentEvaluation e1) 3727return Tests.True.Instance; 3733private static Tests RemoveSimpleEvaluationWithResultTemp(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagEvaluation e1) 3739return Tests.True.Instance; 3767private static Tests RemoveDeconstructEvaluation(One tests, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagDeconstructEvaluation e1) 3773return Tests.True.Instance; 3791private static Tests RemoveTypeEvaluation(One tests, DecisionDagBuilder dagBuilder, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagTypeEvaluation e1) 3801return Tests.True.Instance; 3833static Tests? replaceUnionTypeEvaluation(DecisionDagBuilder dagBuilder, BoundDagTypeEvaluation e1, BoundDagTypeEvaluation typeEval) 3858return AndSequence.Create(new Tests.One(newTypeEval), new Tests.One(new BoundDagPassThroughEvaluation(typeEval.Syntax, newTemp))); 3868private static Tests RemoveIndexerEvaluation(One tests, DecisionDagBuilder dagBuilder, DagState state, ref ImmutableDictionary<BoundDagTemp, BoundDagTemp> tempMap, BoundDagIndexerEvaluation s1, out Tests? condition) 3888return Tests.True.Instance; 3906return Tests.True.Instance; 3914condition = new Tests.One(new BoundDagValueTest(s2.Syntax, ConstantValue.Create(lengthValue), s1LengthTemp)); 3916return Tests.True.Instance; 4059out Tests whenTrue, 4060out Tests whenFalse, 4128private Tests ComputeFilteredResult(IValueSet? possibleValues) 4171public override Tests RewriteNestedLengthTests() 4187public readonly Tests Negated; 4188private Not(Tests negated) => Negated = negated; 4189public static Tests Create(Tests negated) => negated switch 4191Tests.True _ => Tests.False.Instance, 4192Tests.False _ => Tests.True.Instance, 4193Tests.Not n => n.Negated, // double negative 4194Tests.AndSequence a => new Not(a), 4195Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 4196Tests.ValueSet v => new Not(v), 4197Tests.One o => new Not(o), 4200private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 4202var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 4203foreach (var t in seq) 4219public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 4228out Tests whenTrue, 4229out Tests whenFalse, 4232Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundRelatedExplicitNullTest); 4242public readonly ImmutableArray<Tests> RemainingTests; 4243protected SequenceTests(ImmutableArray<Tests> remainingTests) 4248public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 4255out Tests whenTrue, 4256out Tests whenFalse, 4259var testsToFilter = ArrayBuilder<Tests?>.GetInstance(); 4261var trueTests = ArrayBuilder<Tests>.GetInstance(); 4262var falseTests = ArrayBuilder<Tests>.GetInstance(); 4268var current = testsToFilter.Pop(); 4290current.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundRelatedExplicitNullTest); 4312static void assemble(SequenceTests toAssemble, ArrayBuilder<Tests> tests) 4315var newSequence = ArrayBuilder<Tests>.GetInstance(length, fillWithValue: null!); 4333var testsToRewrite = ArrayBuilder<(Tests? Tests, bool SkipRewrite)>.GetInstance(); 4339var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4350ImmutableArray<Tests> remainingTests = seq.RemainingTests; 4364var newSequence = ArrayBuilder<Tests>.GetInstance(childCount); 4418var result = testsRewritten.Pop(); 4447var leftToRewriteBuilder = ArrayBuilder<Tests>.GetInstance(); 4474void pushConditionalResult(RemoveEvaluationAndUpdateTempReferencesResult rewriteResult, ArrayBuilder<Tests> leftToRewriteBuilder) 4538void popAndAddChildrenLeftToRewrite(ArrayBuilder<Tests> leftToRewriteBuilder) 4556public sealed override Tests RewriteNestedLengthTests() 4558var testsToRewrite = ArrayBuilder<Tests?>.GetInstance(); 4560var testsRewritten = ArrayBuilder<Tests>.GetInstance(); 4566var current = testsToRewrite.Pop(); 4579var newSequence = ArrayBuilder<Tests>.GetInstance(length); 4595var result = testsRewritten.Pop(); 4619var tests1 = ArrayBuilder<Tests>.GetInstance(); 4620var tests2 = ArrayBuilder<Tests>.GetInstance(); 4627var t1 = tests1.Pop(); 4628var t2 = tests2.Pop(); 4699var tests = ArrayBuilder<Tests>.GetInstance(); 4704var t = tests.Pop(); 4745Tests firstTest; 4777private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4781public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4782public static Tests Create(Tests t1, Tests t2) 4787var builder = ArrayBuilder<Tests>.GetInstance(2); 4792public static Tests Create(ArrayBuilder<Tests> remainingTests) 4812var result = remainingTests.Count switch 4883private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) 4887public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 4888public static Tests Create(Tests t1, Tests t2) 4893var builder = ArrayBuilder<Tests>.GetInstance(2); 4898public static Tests Create(ArrayBuilder<Tests> remainingTests) 4927var builder = ImmutableArray.CreateBuilder<Tests>(count); 4952if (TryCreateValueSet(builder, out Tests? valueSet)) 4960private static bool TryCreateValueSet(ImmutableArray<Tests>.Builder builder, [NotNullWhen(true)] out Tests? result) 5027static IConstantValueSet getValueSetForElement(Tests element, IConstantValueSetFactory factory)