diff --git a/libdparse b/libdparse
index b64fb8c..e8d87d6 160000
--- a/libdparse
+++ b/libdparse
@@ -1 +1 @@
-Subproject commit b64fb8c91efa17a895567403969d4fc87adaa42a
+Subproject commit e8d87d6791890176ce5077f1c079d0453d45f02a
diff --git a/src/astprinter.d b/src/astprinter.d
index 89411c3..6828b92 100644
--- a/src/astprinter.d
+++ b/src/astprinter.d
@@ -194,7 +194,7 @@ class XMLPrinter : ASTVisitor
override void visit(const ClassDeclaration classDec)
{
output.writeln("");
- output.writeln("", classDec.name.text, "");
+ writeName(classDec.name.text);
writeDdoc(classDec.comment);
classDec.accept(this);
output.writeln("");
@@ -263,7 +263,7 @@ class XMLPrinter : ASTVisitor
override void visit(const Declarator declarator)
{
output.writeln("");
- output.writeln("", declarator.name.text, "");
+ writeName(declarator.name.text);
writeDdoc(declarator.comment);
declarator.accept(this);
output.writeln("");
@@ -282,11 +282,23 @@ class XMLPrinter : ASTVisitor
output.writeln("");
writeDdoc(enumDec.comment);
if (enumDec.name.type == tok!"identifier")
- output.writeln("", enumDec.name.text, "");
+ writeName(enumDec.name.text);
enumDec.accept(this);
output.writeln("");
}
+ override void visit(const AnonymousEnumMember enumMember)
+ {
+ output.writeln("");
+ writeDdoc(enumMember.comment);
+ if (enumMember.type !is null)
+ visit(enumMember.type);
+ output.write("", enumMember.name.text, "");
+ if (enumMember.assignExpression !is null)
+ visit(enumMember.assignExpression);
+ output.writeln("");
+ }
+
override void visit(const EnumMember enumMem)
{
output.writeln("");
@@ -378,7 +390,7 @@ class XMLPrinter : ASTVisitor
override void visit(const FunctionDeclaration functionDec)
{
output.writeln("");
- output.writeln("", functionDec.name.text, "");
+ writeName(functionDec.name.text);
writeDdoc(functionDec.comment);
if (functionDec.hasAuto)
output.writeln("");
@@ -510,7 +522,7 @@ class XMLPrinter : ASTVisitor
override void visit(const InterfaceDeclaration interfaceDec)
{
output.writeln("");
- output.writeln("", interfaceDec.name.text, "");
+ writeName(interfaceDec.name.text);
writeDdoc(interfaceDec.comment);
interfaceDec.accept(this);
output.writeln("");
@@ -635,7 +647,7 @@ class XMLPrinter : ASTVisitor
{
output.writeln("");
if (param.name.type == tok!"identifier")
- output.writeln("", param.name.text, "");
+ writeName(param.name.text);
foreach (attribute; param.parameterAttributes)
{
output.writeln("", str(attribute), "");
@@ -732,7 +744,7 @@ class XMLPrinter : ASTVisitor
override void visit(const StructDeclaration structDec)
{
output.writeln("");
- output.writeln("", structDec.name.text, "");
+ writeName(structDec.name.text);
writeDdoc(structDec.comment);
structDec.accept(this);
output.writeln("");
@@ -778,7 +790,7 @@ class XMLPrinter : ASTVisitor
writeDdoc(templateDeclaration.comment);
output.writeln("");
- output.writeln("", templateDeclaration.name.text, "");
+ writeName(templateDeclaration.name.text);
visit(templateDeclaration.templateParameters);
if (templateDeclaration.constraint !is null)
visit(templateDeclaration.constraint);
@@ -910,7 +922,7 @@ class XMLPrinter : ASTVisitor
{
output.writeln("");
if (unionDeclaration.name != tok!"")
- output.writeln("", unionDeclaration.name.text, "");
+ 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
'\"' : """, '\'' : "'"]);
}
+ private void writeName(string name)
+ {
+ output.write("", name, "");
+ }
+
private void writeDdoc(string comment)
{
if (comment is null) return;
diff --git a/src/ctags.d b/src/ctags.d
index 5ea435b..0968b5f 100644
--- a/src/ctags.d
+++ b/src/ctags.d
@@ -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,
diff --git a/src/outliner.d b/src/outliner.d
index 2cb5529..1c97cb6 100644
--- a/src/outliner.d
+++ b/src/outliner.d
@@ -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();
}
diff --git a/src/symbol_finder.d b/src/symbol_finder.d
index 32ef86b..4af1ff1 100644
--- a/src/symbol_finder.d
+++ b/src/symbol_finder.d
@@ -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)