Update libdparse

This commit is contained in:
Hackerpilot 2015-01-27 02:31:03 -08:00
parent c5277b1e31
commit 73e56f13fb
5 changed files with 57 additions and 23 deletions

@ -1 +1 @@
Subproject commit b64fb8c91efa17a895567403969d4fc87adaa42a
Subproject commit e8d87d6791890176ce5077f1c079d0453d45f02a

View File

@ -194,7 +194,7 @@ class XMLPrinter : ASTVisitor
override void visit(const ClassDeclaration classDec)
{
output.writeln("<classDeclaration line=\"", classDec.name.line, "\">");
output.writeln("<name>", classDec.name.text, "</name>");
writeName(classDec.name.text);
writeDdoc(classDec.comment);
classDec.accept(this);
output.writeln("</classDeclaration>");
@ -263,7 +263,7 @@ class XMLPrinter : ASTVisitor
override void visit(const Declarator declarator)
{
output.writeln("<declarator line=\"", declarator.name.line, "\">");
output.writeln("<name>", declarator.name.text, "</name>");
writeName(declarator.name.text);
writeDdoc(declarator.comment);
declarator.accept(this);
output.writeln("</declarator>");
@ -282,11 +282,23 @@ class XMLPrinter : ASTVisitor
output.writeln("<enumDeclaration line=\"", enumDec.name.line, "\">");
writeDdoc(enumDec.comment);
if (enumDec.name.type == tok!"identifier")
output.writeln("<name>", enumDec.name.text, "</name>");
writeName(enumDec.name.text);
enumDec.accept(this);
output.writeln("</enumDeclaration>");
}
override void visit(const AnonymousEnumMember enumMember)
{
output.writeln("<anonymousEnumMember line=\"", enumMember.name.line, "\">");
writeDdoc(enumMember.comment);
if (enumMember.type !is null)
visit(enumMember.type);
output.write("<name>", enumMember.name.text, "</name>");
if (enumMember.assignExpression !is null)
visit(enumMember.assignExpression);
output.writeln("</anonymousEnumMember>");
}
override void visit(const EnumMember enumMem)
{
output.writeln("<enumMember line=\"", enumMem.name.line, "\">");
@ -378,7 +390,7 @@ class XMLPrinter : ASTVisitor
override void visit(const FunctionDeclaration functionDec)
{
output.writeln("<functionDeclaration line=\"", functionDec.name.line, "\">");
output.writeln("<name>", functionDec.name.text, "</name>");
writeName(functionDec.name.text);
writeDdoc(functionDec.comment);
if (functionDec.hasAuto)
output.writeln("<auto/>");
@ -510,7 +522,7 @@ class XMLPrinter : ASTVisitor
override void visit(const InterfaceDeclaration interfaceDec)
{
output.writeln("<interfaceDeclaration line=\"", interfaceDec.name.line, "\">");
output.writeln("<name>", interfaceDec.name.text, "</name>");
writeName(interfaceDec.name.text);
writeDdoc(interfaceDec.comment);
interfaceDec.accept(this);
output.writeln("</interfaceDeclaration>");
@ -635,7 +647,7 @@ class XMLPrinter : ASTVisitor
{
output.writeln("<parameter>");
if (param.name.type == tok!"identifier")
output.writeln("<name>", param.name.text, "</name>");
writeName(param.name.text);
foreach (attribute; param.parameterAttributes)
{
output.writeln("<parameterAttribute>", str(attribute), "</parameterAttribute>");
@ -732,7 +744,7 @@ class XMLPrinter : ASTVisitor
override void visit(const StructDeclaration structDec)
{
output.writeln("<structDeclaration line=\"", structDec.name.line, "\">");
output.writeln("<name>", structDec.name.text, "</name>");
writeName(structDec.name.text);
writeDdoc(structDec.comment);
structDec.accept(this);
output.writeln("</structDeclaration>");
@ -778,7 +790,7 @@ class XMLPrinter : ASTVisitor
writeDdoc(templateDeclaration.comment);
output.writeln("<templateDeclaration line=\"",
templateDeclaration.name.line, "\">");
output.writeln("<name>", templateDeclaration.name.text, "</name>");
writeName(templateDeclaration.name.text);
visit(templateDeclaration.templateParameters);
if (templateDeclaration.constraint !is null)
visit(templateDeclaration.constraint);
@ -910,7 +922,7 @@ class XMLPrinter : ASTVisitor
{
output.writeln("<unionDeclaration line=\"", unionDeclaration.name.line, "\">");
if (unionDeclaration.name != tok!"")
output.writeln("<name>", unionDeclaration.name.text, "</name>");
writeName(unionDeclaration.name.text);
if (unionDeclaration.templateParameters !is null)
visit(unionDeclaration.templateParameters);
if (unionDeclaration.constraint !is null)
@ -952,6 +964,7 @@ class XMLPrinter : ASTVisitor
override void visit(const AliasInitializer aliasInitializer) { mixin (tagAndAccept!"aliasInitializer"); }
override void visit(const AliasThisDeclaration aliasThisDeclaration) { mixin (tagAndAccept!"aliasThisDeclaration"); }
override void visit(const AnonymousEnumDeclaration anonymousEnumDeclaration) { mixin (tagAndAccept!"anonymousEnumDeclaration"); }
override void visit(const ArgumentList argumentList) { mixin (tagAndAccept!"argumentList"); }
override void visit(const Arguments arguments) { mixin (tagAndAccept!"arguments"); }
override void visit(const ArrayInitializer arrayInitializer) { mixin (tagAndAccept!"arrayInitializer"); }
@ -1083,6 +1096,11 @@ class XMLPrinter : ASTVisitor
'\"' : "&quot;", '\'' : "&apos;"]);
}
private void writeName(string name)
{
output.write("<name>", name, "</name>");
}
private void writeDdoc(string comment)
{
if (comment is null) return;

View File

@ -119,11 +119,6 @@ class CTagsPrinter : ASTVisitor
override void visit(const EnumDeclaration dec)
{
if (dec.name == tok!"")
{
dec.accept(this);
return;
}
tagLines ~= "%s\t%s\t%d;\"\tg%s\n".format(dec.name.text, fileName,
dec.name.line, context);
auto c = context;
@ -147,6 +142,12 @@ class CTagsPrinter : ASTVisitor
context = c;
}
override void visit(const AnonymousEnumMember mem)
{
tagLines ~= "%s\t%s\t%d;\"\te%s\n".format(mem.name.text, fileName,
mem.name.line, context);
}
override void visit(const EnumMember mem)
{
tagLines ~= "%s\t%s\t%d;\"\te%s\n".format(mem.name.text, fileName,

View File

@ -38,6 +38,21 @@ class Outliner : ASTVisitor
finish();
}
override void visit(const AnonymousEnumMember enumMem)
{
printIndentation();
if (enumMem.type !is null)
{
auto app = appender!(char[])();
auto f = new Formatter!(typeof(app))(app);
f.format(enumMem.type);
output.writeln("enum ", app.data, " ", enumMem.name.text, " : ", enumMem.name.line);
}
else
output.writeln("enum ", enumMem.name.text, " : ", enumMem.name.line);
finish();
}
override void visit(const EnumMember enumMem)
{
printIndentation();
@ -127,11 +142,7 @@ class Outliner : ASTVisitor
auto f = new Formatter!(typeof(app))(app);
f.format(variableDeclaration.type);
}
app.put(" ");
app.put(d.name.text);
app.put(" : ");
app.put(to!string(d.name.line));
output.writeln(app.data);
output.writeln(app.data, " ", d.name.text, " : ", d.name.line);
}
finish();
}

View File

@ -54,12 +54,16 @@ class FinderVisitor : ASTVisitor
override void visit(const EnumDeclaration dec)
{
if (dec.name == tok!"")
dec.accept(this);
else if (dec.name.text == symbolName)
if (dec.name.text == symbolName)
output.writefln("%s(%d:%d)", fileName, dec.name.line, dec.name.column);
}
override void visit(const AnonymousEnumMember member)
{
if (member.name.text == symbolName)
output.writefln("%s(%d:%d)", fileName, member.name.line, member.name.column);
}
override void visit(const EnumMember member)
{
if (member.name.text == symbolName)