Skip to content

Commit 6df806f

Browse files
authored
Use static abstract interface methods in SymbolicRegexMatcher (#63546)
1 parent 550a11d commit 6df806f

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Symbolic/SymbolicRegexMatcher.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,10 @@ internal SymbolicRegexMatcher(SymbolicRegexNode<TSetType> sr, RegexCode code, Ch
238238
/// <summary>Interface for transitions used by the <see cref="Delta"/> method.</summary>
239239
private interface ITransition
240240
{
241+
#pragma warning disable CA2252 // This API requires opting into preview features
241242
/// <summary>Find the next state given the current state and next character.</summary>
242-
DfaMatchingState<TSetType> TakeTransition(SymbolicRegexMatcher<TSetType> matcher, DfaMatchingState<TSetType> currentState, int mintermId, TSetType minterm);
243+
static abstract DfaMatchingState<TSetType> TakeTransition(SymbolicRegexMatcher<TSetType> matcher, DfaMatchingState<TSetType> currentState, int mintermId, TSetType minterm);
244+
#pragma warning restore CA2252
243245
}
244246

245247
/// <summary>Compute the target state for the source state and input[i] character.</summary>
@@ -262,14 +264,14 @@ private DfaMatchingState<TSetType> Delta<TTransition>(ReadOnlySpan<char> input,
262264
minterms[mintermId] :
263265
_builder._solver.False; // minterm=False represents \Z
264266

265-
return default(TTransition).TakeTransition(this, sourceState, mintermId, minterm);
267+
return TTransition.TakeTransition(this, sourceState, mintermId, minterm);
266268
}
267269

268270
/// <summary>Transition for Brzozowski-style derivatives (i.e. a DFA).</summary>
269271
private readonly struct BrzozowskiTransition : ITransition
270272
{
271273
[MethodImpl(MethodImplOptions.AggressiveInlining)]
272-
public DfaMatchingState<TSetType> TakeTransition(
274+
public static DfaMatchingState<TSetType> TakeTransition(
273275
SymbolicRegexMatcher<TSetType> matcher, DfaMatchingState<TSetType> currentState, int mintermId, TSetType minterm)
274276
{
275277
SymbolicRegexBuilder<TSetType> builder = matcher._builder;
@@ -284,13 +286,13 @@ public DfaMatchingState<TSetType> TakeTransition(
284286
private readonly struct AntimirovTransition : ITransition
285287
{
286288
[MethodImpl(MethodImplOptions.AggressiveInlining)]
287-
public DfaMatchingState<TSetType> TakeTransition(
289+
public static DfaMatchingState<TSetType> TakeTransition(
288290
SymbolicRegexMatcher<TSetType> matcher, DfaMatchingState<TSetType> currentStates, int mintermId, TSetType minterm)
289291
{
290292
if (currentStates.Node.Kind != SymbolicRegexKind.Or)
291293
{
292294
// Fall back to Brzozowski when the state is not a disjunction.
293-
return default(BrzozowskiTransition).TakeTransition(matcher, currentStates, mintermId, minterm);
295+
return BrzozowskiTransition.TakeTransition(matcher, currentStates, mintermId, minterm);
294296
}
295297

296298
SymbolicRegexBuilder<TSetType> builder = matcher._builder;

0 commit comments

Comments
 (0)