Skip to content
Snippets Groups Projects
Commit c124b0d1 authored by Erik Verbruggen's avatar Erik Verbruggen
Browse files

More symbol dumping.

parent 206793d7
No related branches found
No related tags found
No related merge requests found
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <CoreTypes.h> #include <CoreTypes.h>
#include <CppDocument.h> #include <CppDocument.h>
#include <SymbolVisitor.h> #include <SymbolVisitor.h>
#include <Overview.h>
#include <QFile> #include <QFile>
#include <QList> #include <QList>
...@@ -161,7 +162,11 @@ class SymbolDump: protected SymbolVisitor ...@@ -161,7 +162,11 @@ class SymbolDump: protected SymbolVisitor
public: public:
SymbolDump(TranslationUnit *unit) SymbolDump(TranslationUnit *unit)
: translationUnit(unit) : translationUnit(unit)
{} {
o.setShowArgumentNames(true);
o.setShowFunctionSignatures(true);
o.setShowReturnTypes(true);
}
void operator()(Symbol *s) { void operator()(Symbol *s) {
QByteArray basename = translationUnit->fileName(); QByteArray basename = translationUnit->fileName();
...@@ -224,26 +229,20 @@ protected: ...@@ -224,26 +229,20 @@ protected:
out << _id[symbol].constData() << " [label=\"" << name(symbol).constData() << "\"];" << std::endl; out << _id[symbol].constData() << " [label=\"" << name(symbol).constData() << "\"];" << std::endl;
} }
void generateTemplateParams(const char *from, TemplateParameters *params) { void generateTemplateParams(TemplateParameters *params) {
if (!params) if (!params || params->scope()->symbolCount() == 0)
return; return;
static int templateCount = 0; out << "<";
QByteArray id("t");
id.append(QByteArray::number(++templateCount));
out << from << " -> " << id.constData() << ";" << std::endl;
out << id.constData() << " [shape=record label=\"";
for (unsigned i = 0; i < params->scope()->symbolCount(); ++i) { for (unsigned i = 0; i < params->scope()->symbolCount(); ++i) {
if (i > 0) if (i > 0)
out<<"|"; out << ",";
Symbol *s = params->scope()->symbolAt(i); Symbol *s = params->scope()->symbolAt(i);
if (s->identifier()) { out << qPrintable(o(s->name()));
out<<s->identifier()->chars(); if (s->type())
} else { out << ":" << qPrintable(o(s->type()));
out << "<anonymous>";
}
} }
out << "\"];" << std::endl; out << ">";
} }
virtual bool visit(Class *symbol) { virtual bool visit(Class *symbol) {
...@@ -258,6 +257,8 @@ protected: ...@@ -258,6 +257,8 @@ protected:
} else { } else {
out << "UNKNOWN"; out << "UNKNOWN";
} }
generateTemplateParams(symbol->templateParameters());
out << "\\nid: "; out << "\\nid: ";
if (symbol->identifier()) { if (symbol->identifier()) {
out << symbol->identifier()->chars(); out << symbol->identifier()->chars();
...@@ -266,17 +267,34 @@ protected: ...@@ -266,17 +267,34 @@ protected:
} }
out << "\"];" << std::endl; out << "\"];" << std::endl;
generateTemplateParams(id, symbol->templateParameters());
return true; return true;
} }
virtual bool visit(UsingNamespaceDirective *symbol) { simpleNode(symbol); return true; } virtual bool visit(UsingNamespaceDirective *symbol) { simpleNode(symbol); return true; }
virtual bool visit(UsingDeclaration *symbol) { simpleNode(symbol); return true; } virtual bool visit(UsingDeclaration *symbol) { simpleNode(symbol); return true; }
virtual bool visit(Declaration *symbol) { simpleNode(symbol); return true; }
virtual bool visit(Declaration *symbol) {
out << _id[symbol].constData() << " [label=\"";
out << "Declaration\\n";
out << qPrintable(o(symbol->name()));
out << ": ";
out << qPrintable(o(symbol->type()));
out << "\"];" << std::endl;
return true;
}
virtual bool visit(Argument *symbol) { simpleNode(symbol); return true; } virtual bool visit(Argument *symbol) { simpleNode(symbol); return true; }
virtual bool visit(TypenameArgument *symbol) { simpleNode(symbol); return true; } virtual bool visit(TypenameArgument *symbol) { simpleNode(symbol); return true; }
virtual bool visit(BaseClass *symbol) { simpleNode(symbol); return true; }
virtual bool visit(BaseClass *symbol) {
out << _id[symbol].constData() << " [label=\"BaseClass\\n";
out << qPrintable(o(symbol->name()));
out << "\"];" << std::endl;
return true;
}
virtual bool visit(Enum *symbol) { simpleNode(symbol); return true; } virtual bool visit(Enum *symbol) { simpleNode(symbol); return true; }
virtual bool visit(Function *symbol) { simpleNode(symbol); return true; } virtual bool visit(Function *symbol) { simpleNode(symbol); return true; }
virtual bool visit(Namespace *symbol) { simpleNode(symbol); return true; } virtual bool visit(Namespace *symbol) { simpleNode(symbol); return true; }
...@@ -297,6 +315,7 @@ private: ...@@ -297,6 +315,7 @@ private:
QList<QPair<Symbol *,Symbol*> >_connections; QList<QPair<Symbol *,Symbol*> >_connections;
QList<Symbol *> _stack; QList<Symbol *> _stack;
std::ofstream out; std::ofstream out;
Overview o;
}; };
int main(int argc, char *argv[]) int main(int argc, char *argv[])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment