private static IEnumerable EnumerateParts()

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();
            }
        }