in src/Microsoft.Diagnostics.Runtime/Implementation/DACNameParser.cs [919:938]
private static (int Start, int End) GetTypeNameExtent(string name, int cur, bool parsingGenericArgList)
{
int start = cur;
// Have to be aware the ` character is not ALWAYS a generic arity specifier, because of 'names' like this
//
// CAdviseEvents<IVsSolutionBuildManager\,IVsUpdateSolutionEvents\,{IVsSolutionBuildManager::`vcall'{20}'\,0}\,{IVsSolutionBuildManager::`vcall'{24}'\,0}>
//
while (cur < name.Length &&
name[cur] != GenericArgListAssemblyQualifiedTypeNameOrArrayStartSpecifier &&
name[cur] != GenericArgListAssemblyQualifiedTypeNameOrArrayEndSpecifier &&
(name[cur] != ArgSeparator || !parsingGenericArgList) &&
(name[cur] != NestedClassSpecifier || parsingGenericArgList) && // allow + when parsing generic arg type names because generic arg names can be nested types
(name[cur] != GenericAritySpecifier || ((cur + 1 < name.Length) && !char.IsDigit(name[cur + 1]))))
{
cur++;
}
return (start, cur);
}