in src/Microsoft.Diagnostics.Runtime/Implementation/SymbolGroup.cs [165:204]
private static IEnumerable<string> EnumerateParts(string path)
{
bool possiblySkipNextDll = false;
int curr = 0;
for (int i = 0; i < path.Length; i++)
{
if (path[i] == '*')
{
ReadOnlySpan<char> part = path.AsSpan(curr, i - curr).Trim();
curr = i + 1;
if (part.Equals("cache".AsSpan(), StringComparison.OrdinalIgnoreCase)
|| part.Equals("svr".AsSpan(), StringComparison.OrdinalIgnoreCase)
|| part.Equals("srv".AsSpan(), StringComparison.OrdinalIgnoreCase))
{
// Don't yield this.
}
else if (part.Equals("symsrv".AsSpan(), StringComparison.OrdinalIgnoreCase))
{
possiblySkipNextDll = true;
}
else
{
bool skip = possiblySkipNextDll && part.EndsWith(".dll".AsSpan(), StringComparison.OrdinalIgnoreCase);
possiblySkipNextDll = false;
if (!skip && part.Length > 0)
yield return part.ToString();
}
}
}
if (curr < path.Length)
{
ReadOnlySpan<char> part = path.AsSpan(curr).Trim();
bool skip = possiblySkipNextDll && part.EndsWith(".dll".AsSpan(), StringComparison.OrdinalIgnoreCase);
if (!skip && part.Length > 0)
yield return part.ToString();
}
}