227 references to RegexOptions
System.Text.RegularExpressions.Generator (227)
parent\src\System\Text\RegularExpressions\RegexFindOptimizations.cs (6)
18
public static RegexFindOptimizations Create(RegexNode root,
RegexOptions
options)
22
if ((options &
RegexOptions
.RightToLeft) == 0 &&
46
private unsafe RegexFindOptimizations(RegexNode root,
RegexOptions
options, bool isLeadingPartial)
48
bool rightToLeft = (options &
RegexOptions
.RightToLeft) != 0;
114
bool dfa = (options &
RegexOptions
.NonBacktracking) != 0;
115
bool compiled = (options &
RegexOptions
.Compiled) != 0 && !dfa; // for now, we never generate code for NonBacktracking, so treat it as non-compiled
parent\src\System\Text\RegularExpressions\RegexNode.cs (46)
42
public
RegexOptions
Options;
51
public RegexNode(RegexNodeKind kind,
RegexOptions
options)
57
public RegexNode(RegexNodeKind kind,
RegexOptions
options, char ch)
64
public RegexNode(RegexNodeKind kind,
RegexOptions
options, string str)
71
public RegexNode(RegexNodeKind kind,
RegexOptions
options, int m)
78
public RegexNode(RegexNodeKind kind,
RegexOptions
options, int m, int n)
110
public static RegexNode CreateOneWithCaseConversion(char ch,
RegexOptions
options, CultureInfo? culture, ref RegexCaseBehavior caseBehavior)
113
if ((options &
RegexOptions
.IgnoreCase) != 0)
121
return new RegexNode(RegexNodeKind.One, options & ~
RegexOptions
.IgnoreCase, ch);
127
return new RegexNode(RegexNodeKind.Set, options & ~
RegexOptions
.IgnoreCase, stringSet);
137
if ((Options &
RegexOptions
.RightToLeft) != 0 &&
379
if ((rootNode.Options & (
RegexOptions
.RightToLeft |
RegexOptions
.NonBacktracking)) == 0)
400
if ((rootNode.Options &
RegexOptions
.Compiled) != 0)
501
(Options &
RegexOptions
.NonBacktracking) != 0)
516
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
628
Options &= ~
RegexOptions
.IgnoreCase;
699
if ((Options &
RegexOptions
.NonBacktracking) != 0)
751
if ((Options &
RegexOptions
.RightToLeft) == 0)
1126
RegexOptions
optionsLast = 0;
1127
RegexOptions
optionsAt;
1164
optionsAt = at.Options & (
RegexOptions
.RightToLeft |
RegexOptions
.IgnoreCase);
1212
if ((prev.Options &
RegexOptions
.IgnoreCase) != 0)
1214
prev.Options &= ~
RegexOptions
.IgnoreCase;
1246
if ((alternation.Options &
RegexOptions
.RightToLeft) != 0)
1396
if ((alternation.Options &
RegexOptions
.RightToLeft) != 0)
1412
RegexOptions
startingNodeOptions = startingNode.Options;
1558
Debug.Assert((Options &
RegexOptions
.RightToLeft) == 0);
1573
Debug.Assert((Options &
RegexOptions
.RightToLeft) == 0);
1638
if (node is not null && (node.Options &
RegexOptions
.RightToLeft) == 0)
1788
RegexOptions
optionsLast = 0;
1802
((at.Options &
RegexOptions
.RightToLeft) == (Options &
RegexOptions
.RightToLeft)))
1823
RegexOptions
optionsAt = at.Options & (
RegexOptions
.RightToLeft |
RegexOptions
.IgnoreCase);
1840
prev.Str = (optionsAt &
RegexOptions
.RightToLeft) == 0 ?
1949
(nextNode.Options &
RegexOptions
.RightToLeft) == 0 && // RTL multi nodes don't have their text reversed, and it's not worth the code to optimize further
2050
Debug.Assert((Options &
RegexOptions
.NonBacktracking) == 0, "Atomic groups aren't supported and don't help performance with NonBacktracking");
2085
(node.Options &
RegexOptions
.RightToLeft) != 0)
2277
if (((Options &
RegexOptions
.RightToLeft) == 0 && IsZeroWidthAssertion(child.Kind)) ||
2377
if (condition.Kind == RegexNodeKind.PositiveLookaround && (condition.Options &
RegexOptions
.RightToLeft) == 0)
2494
case RegexNodeKind.PositiveLookaround when (subsequent.Options &
RegexOptions
.RightToLeft) == 0:
2793
if ((node.Options &
RegexOptions
.RightToLeft) != 0 ||
3406
if ((Options &
RegexOptions
.NonBacktracking) != 0)
parent\src\System\Text\RegularExpressions\RegexParser.cs (103)
47
private
RegexOptions
_options;
55
private RegexParser(string pattern,
RegexOptions
options, CultureInfo culture, Hashtable caps, int capsize, Hashtable? capnames, Span<int> optionSpan)
85
internal static CultureInfo GetTargetCulture(
RegexOptions
options) =>
87
(options &
RegexOptions
.CultureInvariant) != 0 ? CultureInfo.InvariantCulture : CultureInfo.CurrentCulture;
90
public static unsafe
RegexOptions
ParseOptionsInPattern(string pattern,
RegexOptions
options)
98
parser.CountCaptures(out
RegexOptions
foundOptionsInPattern);
103
public static unsafe RegexTree Parse(string pattern,
RegexOptions
options, CultureInfo culture)
137
public static unsafe RegexReplacement ParseReplacement(string pattern,
RegexOptions
options, Hashtable caps, int capsize, Hashtable capnames)
140
CultureInfo culture = (options &
RegexOptions
.CultureInvariant) != 0 ? CultureInfo.InvariantCulture : CultureInfo.CurrentCulture;
223
var parser = new RegexParser(input,
RegexOptions
.None, CultureInfo.InvariantCulture, new Hashtable(), 0, null, stackalloc int[OptionStackDefaultSize]);
257
private void Reset(
RegexOptions
options)
277
StartGroup(new RegexNode(RegexNodeKind.Capture, (_options & ~
RegexOptions
.IgnoreCase), 0, -1));
290
if ((_options &
RegexOptions
.IgnorePatternWhitespace) != 0)
346
string setString = ScanCharClass((_options &
RegexOptions
.IgnoreCase) != 0, scanOnly: false)!.ToStringClass();
347
_unit = new RegexNode(RegexNodeKind.Set, _options & ~
RegexOptions
.IgnoreCase, setString);
376
_options = (
RegexOptions
)_optionsStack.Pop();
394
if ((_options & (
RegexOptions
.AnyNewLine |
RegexOptions
.Multiline)) == (
RegexOptions
.AnyNewLine |
RegexOptions
.Multiline))
400
_unit = new RegexNode((_options &
RegexOptions
.Multiline) != 0 ? RegexNodeKind.Bol : RegexNodeKind.Beginning, _options);
405
if ((_options &
RegexOptions
.AnyNewLine) != 0)
407
_unit = (_options &
RegexOptions
.Multiline) != 0 ? AnyNewLineEolNode() : AnyNewLineEndZNode();
411
_unit = new RegexNode((_options &
RegexOptions
.Multiline) != 0 ? RegexNodeKind.Eol : RegexNodeKind.EndZ, _options);
416
if ((_options &
RegexOptions
.Singleline) != 0)
418
_unit = new RegexNode(RegexNodeKind.Set, _options & ~
RegexOptions
.IgnoreCase, RegexCharClass.AnyClass);
420
else if ((_options &
RegexOptions
.AnyNewLine) != 0)
422
_unit = new RegexNode(RegexNodeKind.Set, _options & ~
RegexOptions
.IgnoreCase, RegexCharClass.NotAnyNewLineClass);
426
_unit = new RegexNode(RegexNodeKind.Notone, _options & ~
RegexOptions
.IgnoreCase, '\n');
594
if ((_options &
RegexOptions
.ECMAScript) != 0 && _pattern[_pos] == ']')
614
if ((_options &
RegexOptions
.ECMAScript) != 0 && _pos < _pattern.Length && _pattern[_pos] == ']')
672
charClass!.AddDigit((_options &
RegexOptions
.ECMAScript) != 0, ch == 'D', _pattern, _pos);
684
charClass!.AddSpace((_options &
RegexOptions
.ECMAScript) != 0, ch == 'S');
697
charClass!.AddWord((_options &
RegexOptions
.ECMAScript) != 0, ch == 'W');
826
if ((_options &
RegexOptions
.ExplicitCapture) != 0 || _ignoreNextParen)
858
_options &= ~
RegexOptions
.RightToLeft;
864
_options &= ~
RegexOptions
.RightToLeft;
892
_options |=
RegexOptions
.RightToLeft;
903
_options |=
RegexOptions
.RightToLeft;
1112
if ((_options &
RegexOptions
.IgnorePatternWhitespace) != 0)
1120
if ((_options &
RegexOptions
.IgnorePatternWhitespace) != 0 && _pos < _pattern.Length && _pattern[_pos] == '#')
1166
(_options &
RegexOptions
.AnyNewLine) != 0 ? AnyNewLineEndZNode() : new RegexNode(RegexNodeKind.EndZ, _options);
1171
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.ECMAWordClass : RegexCharClass.WordClass);
1176
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.NotECMAWordClass : RegexCharClass.NotWordClass);
1181
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.ECMASpaceClass : RegexCharClass.SpaceClass);
1186
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.NotECMASpaceClass : RegexCharClass.NotSpaceClass);
1191
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.ECMADigitClass : RegexCharClass.DigitClass);
1196
new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), (_options &
RegexOptions
.ECMAScript) != 0 ? RegexCharClass.NotECMADigitClass : RegexCharClass.NotDigitClass);
1207
cc.AddCategoryFromName(ParseProperty(), ch != 'p', (_options &
RegexOptions
.IgnoreCase) != 0, _pattern, _pos);
1208
if ((_options &
RegexOptions
.IgnoreCase) != 0)
1213
return new RegexNode(RegexNodeKind.Set, (_options & ~
RegexOptions
.IgnoreCase), cc.ToStringClass());
1217
if (result != null && result.Kind == RegexNodeKind.Backreference && (result.Options &
RegexOptions
.IgnoreCase) != 0)
1287
if ((_options &
RegexOptions
.ECMAScript) != 0)
1389
if (!angled && (_options &
RegexOptions
.ECMAScript) != 0)
1518
if ((_options &
RegexOptions
.ECMAScript) != 0 && i >= 0x20)
1622
RegexOptions
options = (char)(ch | 0x20) switch
1624
'i' =>
RegexOptions
.IgnoreCase,
1625
'm' =>
RegexOptions
.Multiline,
1626
'n' =>
RegexOptions
.ExplicitCapture,
1627
's' =>
RegexOptions
.Singleline,
1628
'x' =>
RegexOptions
.IgnorePatternWhitespace,
1629
_ =>
RegexOptions
.None,
1684
if ((_options &
RegexOptions
.ECMAScript) == 0 && RegexCharClass.IsBoundaryWordChar(ch))
1735
RegexOptions
lookaheadOpts = _options & ~
RegexOptions
.RightToLeft;
1736
RegexOptions
lookbehindOpts = _options |
RegexOptions
.RightToLeft;
1737
RegexOptions
lookaheadOptsNoCase = lookaheadOpts & ~
RegexOptions
.IgnoreCase;
1738
RegexOptions
lookbehindOptsNoCase = lookbehindOpts & ~
RegexOptions
.IgnoreCase;
1764
RegexOptions
opts = _options;
1765
RegexOptions
lookaheadOpts = opts & ~
RegexOptions
.RightToLeft;
1766
RegexOptions
lookaheadOptsNoCase = lookaheadOpts & ~
RegexOptions
.IgnoreCase;
1801
RegexOptions
opts = _options;
1802
RegexOptions
lookaheadOpts = opts & ~
RegexOptions
.RightToLeft;
1803
RegexOptions
lookaheadOptsNoCase = lookaheadOpts & ~
RegexOptions
.IgnoreCase;
1827
RegexOptions
opts = _options;
1828
RegexOptions
lookbehindOpts = opts |
RegexOptions
.RightToLeft;
1829
RegexOptions
lookbehindOptsNoCase = lookbehindOpts & ~
RegexOptions
.IgnoreCase;
1850
'b' => (_options &
RegexOptions
.ECMAScript) != 0 ? RegexNodeKind.ECMABoundary : RegexNodeKind.Boundary,
1851
'B' => (_options &
RegexOptions
.ECMAScript) != 0 ? RegexNodeKind.NonECMABoundary : RegexNodeKind.NonBoundary,
1862
private void CountCaptures(out
RegexOptions
optionsFoundInPattern)
1865
optionsFoundInPattern =
RegexOptions
.None;
1882
if ((_options &
RegexOptions
.IgnorePatternWhitespace) != 0)
1896
_options = (
RegexOptions
)_optionsStack.Pop();
1967
if ((_options &
RegexOptions
.ExplicitCapture) == 0 && !_ignoreNextParen)
2194
_concatenation!.AddChild(RegexNode.CreateOneWithCaseConversion(_pattern[pos], isReplacement ? _options & ~
RegexOptions
.IgnoreCase : _options, _culture, ref _caseBehavior));
2197
case > 1 when (_options &
RegexOptions
.IgnoreCase) == 0 || isReplacement || !RegexCharClass.ParticipatesInCaseConversion(_pattern.AsSpan(pos, cch)):
2198
_concatenation!.AddChild(new RegexNode(RegexNodeKind.Multi, _options & ~
RegexOptions
.IgnoreCase, _pattern.Substring(pos, cch)));
parent\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (8)
65
(node.Options &
RegexOptions
.RightToLeft) != 0 ||
358
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
593
if ((node.Options &
RegexOptions
.RightToLeft) != 0)
1004
bool firstChar = findFirst == ((node.Options &
RegexOptions
.RightToLeft) == 0);
1129
if ((node.Options &
RegexOptions
.RightToLeft) != 0)
1272
if ((node.Options &
RegexOptions
.RightToLeft) != 0)
1363
case RegexNodeKind.PositiveLookaround when leading && (node.Options &
RegexOptions
.RightToLeft) == 0:
1389
case RegexNodeKind.PositiveLookaround when ((node.Options | tmpChild.Options) &
RegexOptions
.RightToLeft) != 0:
parent\src\System\Text\RegularExpressions\RegexTree.cs (2)
17
public readonly
RegexOptions
Options;
43
internal RegexTree(RegexNode root, int captureCount, string[]? captureNames, Hashtable? captureNameToNumberMapping, Hashtable? captureNumberSparseMapping,
RegexOptions
options, CultureInfo? culture)
parent\src\System\Text\RegularExpressions\RegexTreeAnalyzer.cs (2)
27
results._hasIgnoreCase |= (node.Options &
RegexOptions
.IgnoreCase) != 0;
28
results._hasRightToLeft |= (node.Options &
RegexOptions
.RightToLeft) != 0;
RegexGenerator.cs (3)
83
RegexTree regexTree = RegexParser.Parse(method.Pattern, method.Options |
RegexOptions
.Compiled, method.Culture); // make sure Compiled is included to get all optimizations applied to it
193
var emittedExpressions = new Dictionary<(string Pattern,
RegexOptions
Options, int? Timeout), RegexMethod>();
373
if (node.Kind is RegexNodeKind.Backreference && (node.Options &
RegexOptions
.IgnoreCase) != 0)
RegexGenerator.Emitter.cs (23)
90
if (regexMethod.Options !=
RegexOptions
.None)
754
bool rtl = (rm.Options &
RegexOptions
.RightToLeft) != 0;
840
RegexOptions
options = rm.Options;
842
bool rtl = (options &
RegexOptions
.RightToLeft) != 0;
1615
RegexOptions
options = rm.Options;
1828
if ((node.Options &
RegexOptions
.RightToLeft) != 0 ||
2217
if ((node.Options &
RegexOptions
.ECMAScript) != 0)
2245
if ((node.Options &
RegexOptions
.RightToLeft) == 0)
2735
string startingPos = ReserveName((node.Options &
RegexOptions
.RightToLeft) != 0 ? "positivelookbehind_starting_pos" : "positivelookahead_starting_pos");
2778
string variablePrefix = (node.Options &
RegexOptions
.RightToLeft) != 0 ? "negativelookbehind_" : "negativelookahead_";
2879
if ((node.Options &
RegexOptions
.RightToLeft) != 0)
2943
case RegexNodeKind.Multi when (node.Options &
RegexOptions
.RightToLeft) == 0:
3084
if ((node.Options &
RegexOptions
.RightToLeft) == 0 &&
3204
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
3287
Debug.Assert((node.Options &
RegexOptions
.RightToLeft) == 0 || sliceStaticPos == 0);
3354
EmitMultiCharString(node.Str, emitLengthCheck, clauseOnly: false, (node.Options &
RegexOptions
.RightToLeft) != 0);
3427
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
3677
if ((node.Options &
RegexOptions
.RightToLeft) == 0)
4135
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
4271
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
4387
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
5552
private static string Literal(
RegexOptions
options)
5585
bool rtl = (node.Options &
RegexOptions
.RightToLeft) != 0;
RegexGenerator.Parser.cs (20)
141
RegexOptions
regexOptions = options is not null ? (
RegexOptions
)options :
RegexOptions
.None;
150
RegexOptions
regexOptionsWithPatternOptions;
160
if ((regexOptionsWithPatternOptions &
RegexOptions
.IgnoreCase) != 0 && !string.IsNullOrEmpty(cultureName))
162
if ((regexOptions &
RegexOptions
.CultureInvariant) != 0)
179
const
RegexOptions
SupportedOptions =
180
RegexOptions
.Compiled |
181
RegexOptions
.CultureInvariant |
182
RegexOptions
.ECMAScript |
183
RegexOptions
.ExplicitCapture |
184
RegexOptions
.IgnoreCase |
185
RegexOptions
.IgnorePatternWhitespace |
186
RegexOptions
.Multiline |
187
RegexOptions
.NonBacktracking |
188
RegexOptions
.RightToLeft |
189
RegexOptions
.Singleline |
190
RegexOptions
.AnyNewLine;
253
internal sealed record RegexPatternAndSyntax(RegexType DeclaringType, bool IsProperty, Location DiagnosticLocation, string MemberName, string Modifiers, bool NullableRegex, string Pattern,
RegexOptions
Options, int? MatchTimeout, CultureInfo Culture, CompilationData CompilationData);
256
internal sealed record RegexMethod(RegexType DeclaringType, bool IsProperty, string MemberName, string Modifiers, bool NullableRegex, string Pattern,
RegexOptions
Options, int? MatchTimeout, RegexTree Tree, AnalysisResults Analysis, CompilationData CompilationData)
UpgradeToGeneratedRegexAnalyzer.cs (4)
128
_ = RegexParser.ParseOptionsInPattern((string)argument.Value.ConstantValue.Value!,
RegexOptions
.None);
149
RegexOptions
value = (
RegexOptions
)(int)argument.Value.ConstantValue.Value!;
150
if ((value &
RegexOptions
.NonBacktracking) > 0)
UpgradeToGeneratedRegexCodeFixer.cs (10)
299
RegexOptions
regexOptions = regexOptionsValue is not null ? GetRegexOptionsFromArgument(operationArguments) :
RegexOptions
.None;
318
if ((regexOptions &
RegexOptions
.IgnoreCase) != 0 && (regexOptions &
RegexOptions
.CultureInvariant) == 0)
384
private static
RegexOptions
GetRegexOptionsFromArgument(ImmutableArray<IArgumentOperation> arguments)
389
RegexOptions
.None :
390
(
RegexOptions
)(int)optionsArgument.Value.ConstantValue.Value!;
409
string optionsLiteral = Literal(((
RegexOptions
)(int)argument.Value.ConstantValue.Value!).ToString());
445
return $"({nameof(
RegexOptions
)})({options})";
452
select $"{nameof(
RegexOptions
)}.{part.Trim()}");