11 writes to M
System.Text.RegularExpressions.Generator (11)
parent\src\System\Text\RegularExpressions\RegexNode.cs (11)
75
M
= m;
82
M
= m;
98
newNode.
M
= M - 1;
153
M
= min;
200
M
= N = 0;
209
M
= N = 0;
940
u.
M
= min = ((int.MaxValue - 1) / u.M < min) ? int.MaxValue : u.M * min;
1922
currentNode.
M
+= nextNode.M;
1936
currentNode.
M
++;
1963
currentNode.
M
+= matchingCharsInMulti;
2005
currentNode.
M
= nextNode.M + 1;
147 references to M
System.Text.RegularExpressions.Generator (147)
parent\src\System\Text\RegularExpressions\RegexNode.cs (66)
92
Debug.Assert(
M
> 0);
98
newNode.M =
M
- 1;
182
N =
M
;
207
RegexNode loopAsChild = new(RegexNodeKind.Loop, Options,
M
, N);
218
N =
M
;
886
int min =
M
;
931
if (u.
M
== 0 && child.
M
> 1 || child.N < child.
M
* 2)
938
if (u.
M
> 0)
940
u.M = min = ((int.MaxValue - 1) / u.
M
< min) ? int.MaxValue : u.
M
* min;
965
child.MakeRep(u.Kind == RegexNodeKind.Lazyloop ? RegexNodeKind.Onelazy : RegexNodeKind.Oneloop, u.
M
, u.N);
990
u = u.
M
== 0 ? new RegexNode(RegexNodeKind.Empty, Options) : child;
1265
case RegexNodeKind.Oneloop or RegexNodeKind.Notoneloop or RegexNodeKind.Setloop or RegexNodeKind.Onelazy or RegexNodeKind.Notonelazy or RegexNodeKind.Setlazy when required.
M
== required.N:
1284
required.
M
!= other.
M
||
1557
Debug.Assert(Kind is RegexNodeKind.One or RegexNodeKind.Multi || (IsOneFamily &&
M
> 0));
1643
case RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic or RegexNodeKind.Onelazy when node.
M
> 0:
1645
case RegexNodeKind.Notoneloop or RegexNodeKind.Notoneloopatomic or RegexNodeKind.Notonelazy when node.
M
> 0:
1647
case RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy when node.
M
> 0:
1655
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when node.
M
> 0:
1907
if (nextNode.
M
> 0 &&
1917
if (!CanCombineCounts(currentNode.
M
, currentNode.N, nextNode.
M
, nextNode.N))
1922
currentNode.M += nextNode.
M
;
1934
if (CanCombineCounts(currentNode.
M
, currentNode.N, 1, 1))
1960
if (CanCombineCounts(currentNode.
M
, currentNode.N, matchingCharsInMulti, matchingCharsInMulti))
2002
if (CanCombineCounts(1, 1, nextNode.
M
, nextNode.N))
2005
currentNode.M = nextNode.
M
+ 1;
2486
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when subsequent.
M
> 0:
2541
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
> 0 && node.Ch != subsequent.Ch:
2542
case RegexNodeKind.Notonelazy or RegexNodeKind.Notoneloop or RegexNodeKind.Notoneloopatomic when subsequent.
M
> 0 && node.Ch == subsequent.Ch:
2543
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
> 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!):
2547
case RegexNodeKind.Boundary when node.
M
> 0 && RegexCharClass.IsBoundaryWordChar(node.Ch):
2548
case RegexNodeKind.NonBoundary when node.
M
> 0 && !RegexCharClass.IsBoundaryWordChar(node.Ch):
2549
case RegexNodeKind.ECMABoundary when node.
M
> 0 && RegexCharClass.IsECMAWordChar(node.Ch):
2550
case RegexNodeKind.NonECMABoundary when node.
M
> 0 && !RegexCharClass.IsECMAWordChar(node.Ch):
2553
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
== 0 && node.Ch != subsequent.Ch:
2554
case RegexNodeKind.Notonelazy or RegexNodeKind.Notoneloop or RegexNodeKind.Notoneloopatomic when subsequent.
M
== 0 && node.Ch == subsequent.Ch:
2555
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
== 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!):
2569
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
> 0 && node.Ch == subsequent.Ch:
2574
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
== 0 && node.Ch == subsequent.Ch:
2589
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
> 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!):
2590
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
> 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!):
2594
case RegexNodeKind.Boundary when node.
M
> 0 && RegexCharClass.IsSubsetOf(node.Str!, RegexCharClass.WordClass):
2595
case RegexNodeKind.NonBoundary when node.
M
> 0 && node.Str is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass:
2596
case RegexNodeKind.ECMABoundary when node.
M
> 0 && node.Str is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass:
2597
case RegexNodeKind.NonECMABoundary when node.
M
> 0 && node.Str is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass:
2600
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
== 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!):
2601
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
== 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!):
2636
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
> 0 && !CharInStartingOrEndingSet(subsequent.Ch):
2637
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
> 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!):
2641
case RegexNodeKind.Boundary when node.
M
> 0 && RegexCharClass.IsSubsetOf(loopStartingSet, RegexCharClass.WordClass) && RegexCharClass.IsSubsetOf(loopEndingSet, RegexCharClass.WordClass):
2642
case RegexNodeKind.NonBoundary when node.
M
> 0 && (loopStartingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass):
2643
case RegexNodeKind.ECMABoundary when node.
M
> 0 && (loopStartingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass) && (loopEndingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass):
2644
case RegexNodeKind.NonECMABoundary when node.
M
> 0 && (loopStartingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass):
2647
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.
M
== 0 && !CharInStartingOrEndingSet(subsequent.Ch):
2648
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.
M
== 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!):
2741
RegexNodeKind.Loop or RegexNodeKind.Lazyloop when
M
!= N => true,
2744
RegexNodeKind.Setloop or RegexNodeKind.Setlazy when
M
!= N => true,
2863
return
M
;
2868
return (int)Math.Min(int.MaxValue - 1, (long)
M
* Child(0).ComputeMinLength());
3159
(child.Kind is RegexNodeKind.Setloop or RegexNodeKind.Setlazy or RegexNodeKind.Setloopatomic && child.
M
== child.N))
3168
vsb.Append((char)(twoChars[0] | 0x20), child.Kind is RegexNodeKind.Set ? 1 : child.
M
);
3250
when node.
M
== node.N => true,
parent\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (26)
114
int reps = node.Kind is RegexNodeKind.One ? 1 : Math.Min(node.
M
, MaxPrefixLength);
164
int reps = node.Kind is RegexNodeKind.Set ? 1 : Math.Min(node.
M
, MaxPrefixLength);
226
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when node.
M
> 0:
228
int limit = Math.Min(node.
M
, MaxPrefixLength); // MaxPrefixLength here is somewhat arbitrary, as a single loop iteration could yield multiple chars
432
case RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic or RegexNodeKind.Onelazy when node.
M
> 0:
434
int count = Math.Min(node.
M
, SingleCharIterationLimit);
439
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when node.
M
> 0:
442
int limit = Math.Min(node.
M
, NodeIterationLimit);
493
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when node.
M
> 0:
609
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when node.
M
> 0:
612
int minIterations = Math.Min(node.
M
, MaxLoopExpansion);
618
return i == node.
M
&& i == node.N;
641
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when node.
M
> 0:
643
int minIterations = Math.Min(node.
M
, MaxLoopExpansion);
649
return i == node.
M
&& i == node.N;
658
case RegexNodeKind.Notonelazy or RegexNodeKind.Notoneloop or RegexNodeKind.Notoneloopatomic when node.
M
== node.N:
659
distance += node.
M
;
686
case RegexNodeKind.Lazyloop or RegexNodeKind.Loop when node.
M
> 0:
959
return node.Kind is RegexNodeKind.One || node.
M
> 0 ? true : null;
977
return node.Kind is RegexNodeKind.Notone || node.
M
> 0 ? true : null;
996
node.Kind is RegexNodeKind.Set || node.
M
> 0 ? true :
1043
_ => node.
M
== 0 ? null : true,
1225
(nextChild.Kind is RegexNodeKind.Loop or RegexNodeKind.Lazyloop && nextChild.
M
>= 1))
1233
(nextChild.Kind is RegexNodeKind.Set || nextChild.
M
>= 1))
1303
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when node.
M
>= 1:
1362
case RegexNodeKind.Loop or RegexNodeKind.Lazyloop when leading && node.
M
>= 1:
RegexGenerator.Emitter.cs (55)
1517
if (target.LoopNode.
M
> 0)
1542
if (target.LoopNode.
M
> 0)
1563
if (target.LoopNode.
M
> 0)
1567
using (EmitBlock(writer, $"if ((i - prev - 1) < {target.LoopNode.
M
})"))
2207
int capnum = RegexParser.MapCaptureNumber(node.
M
, rm.Tree.CaptureNumberSparseMapping);
2219
writer.WriteLine($"// If the {DescribeCapture(node.
M
, rm)} hasn't matched, the backreference matches with RegexOptions.ECMAScript rules.");
2227
writer.WriteLine($"// If the {DescribeCapture(node.
M
, rm)} hasn't matched, the backreference doesn't match.");
2282
int capnum = RegexParser.MapCaptureNumber(node.
M
, rm.Tree.CaptureNumberSparseMapping);
2297
writer.WriteLine($"// The {DescribeCapture(node.
M
, rm)} captured a value. Match the first branch.");
2630
int capnum = RegexParser.MapCaptureNumber(node.
M
, rm.Tree.CaptureNumberSparseMapping);
3128
child.
M
== child.N &&
3129
child.
M
<= MaxUnrollSize)
3131
int repeatCount = child.Kind is RegexNodeKind.One or RegexNodeKind.Notone or RegexNodeKind.Set ? 1 : child.
M
;
3411
if (node.
M
== node.N)
3421
Debug.Assert(node.
M
< node.N);
3446
EmitAdd(writer, startingPos, !rtl ? node.
M
: -node.
M
);
3584
if (node.
M
> 0)
3591
if (node.
M
== node.N || rm.Analysis.IsAtomicByAncestor(node))
3596
if (node.
M
> 0)
3602
Debug.Assert(node.
M
< node.N);
3615
maxIterations = $"{node.N - node.
M
}";
3827
Debug.Assert(node.
M
< int.MaxValue, $"Unexpected M={node.
M
}");
3828
Debug.Assert(node.N >= node.
M
, $"Unexpected M={node.
M
}, N={node.N}");
3832
int minIterations = node.
M
;
4134
int iterations = node.
M
;
4255
if (node.
M
== node.N)
4262
if (node.
M
== 0 && node.N == 1)
4268
Debug.Assert(node.N > node.
M
);
4269
int minIterations = node.
M
;
4385
Debug.Assert(node.
M
== 0 && node.N == 1);
4423
Debug.Assert(node.
M
< int.MaxValue, $"Unexpected M={node.
M
}");
4424
Debug.Assert(node.
M
== node.N, $"Unexpected M={node.
M
} == N={node.N}");
4433
using (EmitBlock(writer, $"for (int {i} = 0; {i} < {node.
M
}; {i}++)"))
4443
Debug.Assert(node.
M
< int.MaxValue, $"Unexpected M={node.
M
}");
4444
Debug.Assert(node.N >= node.
M
, $"Unexpected M={node.
M
}, N={node.N}");
4448
int minIterations = node.
M
;
5594
RegexNodeKind.Capture when node.
M
== -1 && node.N != -1 => $"Non-capturing balancing group. Uncaptures the {DescribeCapture(node.N, rm)}.",
5595
RegexNodeKind.Capture when node.N != -1 => $"Balancing group. Captures the {DescribeCapture(node.
M
, rm)} and uncaptures the {DescribeCapture(node.N, rm)}.",
5596
RegexNodeKind.Capture when node.N == -1 => $"{DescribeCapture(node.
M
, rm)}.",
5603
RegexNodeKind.Loop or RegexNodeKind.Lazyloop => node.
M
== 0 && node.N == 1 ? $"Optional ({(node.Kind is RegexNodeKind.Loop ? "greedy" : "lazy")})." : $"Loop {DescribeLoop(node, rm)}{direction}.",
5613
RegexNodeKind.Backreference => $"Match the same text as matched by the {DescribeCapture(node.
M
, rm)}{direction}.",
5619
RegexNodeKind.BackreferenceConditional => $"Conditionally match one of two expressions depending on whether the {DescribeCapture(node.
M
, rm)} matched.",
5831
_ when node.
M
== node.N => "exactly",
5839
node.
M
== node.N ? $" {node.
M
} times" :
5840
(node.
M
, node.N) switch
5845
(_, int.MaxValue) => $" at least {node.
M
} times",
5848
_ => $" at least {node.
M
} and at most {node.N} times"