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