void NamePrettyPrinter::visit(NameId *name)
{
    Identifier *id = name->identifier();
    if (id)
        _name = QString::fromLatin1(id->chars(), id->size());
    else
        _name = QLatin1String("anonymous");
}
void NamePrettyPrinter::visit(SelectorNameId *name)
{
    for (unsigned i = 0; i < name->nameCount(); ++i) {
        Name *n = name->nameAt(i);
        if (!n)
            continue;

        Identifier *id = n->identifier();
        if (id) {
            _name += QString::fromLatin1(id->chars(), id->size());

            if (name->hasArguments() || name->nameCount() > 1)
                _name += ':';
        }
    }
}
void NamePrettyPrinter::visit(TemplateNameId *name)
{
    Identifier *id = name->identifier();
    if (id)
        _name = QString::fromLatin1(id->chars(), id->size());
    else
        _name = QLatin1String("anonymous");
    _name += QLatin1Char('<');
    for (unsigned index = 0; index < name->templateArgumentCount(); ++index) {
        if (index != 0)
            _name += QLatin1String(", ");

        FullySpecifiedType argTy = name->templateArgumentAt(index);
        QString arg = overview()->prettyType(argTy);
        if (arg.isEmpty())
            _name += QString::fromLatin1("_Tp%1").arg(index + 1);
        else
            _name += arg;
    }
    if (! _name.isEmpty() && _name.at(_name.length() - 1) == '>')
        _name += QLatin1Char(' ');
    _name += QLatin1Char('>');
}
void NamePrettyPrinter::visit(DestructorNameId *name)
{
    Identifier *id = name->identifier();
    _name += QLatin1Char('~');
    _name += QString::fromLatin1(id->chars(), id->size());
}