diff --git a/libdparse b/libdparse
index 4e270c2..ccd0194 160000
--- a/libdparse
+++ b/libdparse
@@ -1 +1 @@
-Subproject commit 4e270c212daf0d2b55843604ecbdd1dcbd399a37
+Subproject commit ccd01946add011c49e5cf92667cca1e1acd2bc33
diff --git a/src/analysis/duplicate_attribute.d b/src/analysis/duplicate_attribute.d
index d91fa81..93c5d47 100644
--- a/src/analysis/duplicate_attribute.d
+++ b/src/analysis/duplicate_attribute.d
@@ -102,27 +102,23 @@ class DuplicateAttributeCheck : BaseAnalyzer
{
// Get the name from the attribute identifier
if (attribute
- && attribute.storageClass
- && attribute.storageClass.atAttribute
- && attribute.storageClass.atAttribute.identifier !is Token.init
- && attribute.storageClass.atAttribute.identifier.text
- && attribute.storageClass.atAttribute.identifier.text.length)
+ && attribute.atAttribute
+ && attribute.atAttribute.identifier !is Token.init
+ && attribute.atAttribute.identifier.text
+ && attribute.atAttribute.identifier.text.length)
{
- auto token = attribute.storageClass.atAttribute.identifier;
+ auto token = attribute.atAttribute.identifier;
line = token.line;
column = token.column;
return token.text;
}
// Get the attribute from the storage class token
- if (attribute
- && attribute.storageClass
- && attribute.storageClass.token !is Token.init)
+ if (attribute && attribute.attribute.type != tok!"")
{
- auto token = attribute.storageClass.token;
- line = token.line;
- column = token.column;
- return token.type.str;
+ line = attribute.attribute.line;
+ column = attribute.attribute.column;
+ return attribute.attribute.type.str;
}
return null;
diff --git a/src/analysis/enumarrayliteral.d b/src/analysis/enumarrayliteral.d
index 545851a..5d2948b 100644
--- a/src/analysis/enumarrayliteral.d
+++ b/src/analysis/enumarrayliteral.d
@@ -27,23 +27,9 @@ class EnumArrayLiteralCheck : BaseAnalyzer
mixin visitTemplate!UnionDeclaration;
mixin visitTemplate!StructDeclaration;
- override void visit(const Declaration dec)
- {
- if (inAggregate) foreach (attr; dec.attributes)
- {
- if (attr.storageClass !is null &&
- attr.storageClass.token == tok!"enum")
- {
- looking = true;
- }
- }
- dec.accept(this);
- looking = false;
- }
-
override void visit(const AutoDeclaration autoDec)
{
- if (looking)
+ if (autoDec.storageClass && autoDec.storageClass.token == tok!"enum")
{
foreach (i, initializer; autoDec.initializers)
{
diff --git a/src/analysis/function_attributes.d b/src/analysis/function_attributes.d
index 62d1bb5..3ddcfeb 100644
--- a/src/analysis/function_attributes.d
+++ b/src/analysis/function_attributes.d
@@ -48,11 +48,10 @@ class FunctionAttributeCheck : BaseAnalyzer
override void visit(const AttributeDeclaration dec)
{
- if (inInterface > 0 && dec.attribute.storageClass !is null
- && dec.attribute.storageClass.token == tok!"abstract")
+ if (inInterface > 0 && dec.attribute.attribute == tok!"abstract")
{
- addErrorMessage(dec.attribute.storageClass.token.line,
- dec.attribute.storageClass.token.column, KEY, ABSTRACT_MESSAGE);
+ addErrorMessage(dec.attribute.attribute.line,
+ dec.attribute.attribute.column, KEY, ABSTRACT_MESSAGE);
}
}
@@ -62,21 +61,21 @@ class FunctionAttributeCheck : BaseAnalyzer
goto end;
foreach (attr; dec.attributes)
{
- if (attr.storageClass is null)
+ if (attr.attribute.type == tok!"")
continue;
- if (attr.storageClass.token == tok!"abstract" && inInterface)
+ if (attr.attribute == tok!"abstract" && inInterface)
{
- addErrorMessage(attr.storageClass.token.line,
- attr.storageClass.token.column, KEY, ABSTRACT_MESSAGE);
+ addErrorMessage(attr.attribute.line,
+ attr.attribute.column, KEY, ABSTRACT_MESSAGE);
continue;
}
if (dec.functionDeclaration !is null
- && (attr.storageClass.token == tok!"const"
- || attr.storageClass.token == tok!"inout"
- || attr.storageClass.token == tok!"immutable"))
+ && (attr.attribute == tok!"const"
+ || attr.attribute == tok!"inout"
+ || attr.attribute == tok!"immutable"))
{
import std.string : format;
- immutable string attrString = str(attr.storageClass.token.type);
+ immutable string attrString = str(attr.attribute.type);
addErrorMessage(dec.functionDeclaration.name.line,
dec.functionDeclaration.name.column, KEY,
format("'%s' is not an attribute of the return type."
diff --git a/src/analysis/local_imports.d b/src/analysis/local_imports.d
index 5b04318..71ecb50 100644
--- a/src/analysis/local_imports.d
+++ b/src/analysis/local_imports.d
@@ -36,7 +36,7 @@ class LocalImportCheck : BaseAnalyzer
}
foreach (attr; dec.attributes)
{
- if (attr.storageClass !is null && attr.storageClass.token == tok!"static")
+ if (attr.attribute == tok!"static")
isStatic = true;
}
dec.accept(this);
diff --git a/src/analysis/objectconst.d b/src/analysis/objectconst.d
index cdb8c2d..f46d1a6 100644
--- a/src/analysis/objectconst.d
+++ b/src/analysis/objectconst.d
@@ -46,14 +46,13 @@ class ObjectConstCheck : BaseAnalyzer
private static bool hasConst(const Attribute[] attributes)
{
- import std.algorithm;
- return attributes.any!(a => a.attribute == tok!"const"
- || (a.storageClass !is null && a.storageClass.token == tok!"const"));
+ import std.algorithm : any;
+ return attributes.any!(a => a.attribute == tok!"const");
}
private static bool hasConst(const MemberFunctionAttribute[] attributes)
{
- import std.algorithm;
+ import std.algorithm : any;
return attributes.any!(a => a.tokenType == tok!"const"
|| a.tokenType == tok!"immutable"
|| a.tokenType == tok!"inout");
@@ -71,7 +70,7 @@ class ObjectConstCheck : BaseAnalyzer
unittest
{
- import analysis.config;
+ import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac;
sac.object_const_check = true;
assertAnalyzerWarnings(q{
diff --git a/src/analysis/run.d b/src/analysis/run.d
index 7963f67..7404934 100644
--- a/src/analysis/run.d
+++ b/src/analysis/run.d
@@ -69,10 +69,10 @@ void writeJSON(string key, string fileName, size_t line, size_t column, string m
write( " }");
}
-void syntaxCheck(string[] fileNames)
+bool syntaxCheck(string[] fileNames)
{
StaticAnalysisConfig config = defaultStaticAnalysisConfig();
- analyze(fileNames, config, false);
+ return analyze(fileNames, config, false);
}
void generateReport(string[] fileNames, const StaticAnalysisConfig config)
@@ -112,8 +112,10 @@ void generateReport(string[] fileNames, const StaticAnalysisConfig config)
}
// For multiple files
-void analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticAnalyze = true)
+// Returns: true if there were errors
+bool analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticAnalyze = true)
{
+ bool hasErrors = false;
foreach (fileName; fileNames)
{
File f = File(fileName);
@@ -122,7 +124,12 @@ void analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticA
f.rawRead(code);
ParseAllocator p = new ParseAllocator;
StringCache cache = StringCache(StringCache.defaultBucketCount);
- const Module m = parseModule(fileName, code, p, cache, false);
+ uint errorCount = 0;
+ const Module m = parseModule(fileName, code, p, cache, false, null,
+ &errorCount, null);
+ assert (m);
+ if (errorCount > 0)
+ hasErrors = true;
MessageSet results = analyze(fileName, m, config, staticAnalyze);
if (results is null)
continue;
@@ -130,10 +137,12 @@ void analyze(string[] fileNames, const StaticAnalysisConfig config, bool staticA
writefln("%s(%d:%d)[warn]: %s", result.fileName, result.line,
result.column, result.message);
}
+ return hasErrors;
}
const(Module) parseModule(string fileName, ubyte[] code, ParseAllocator p,
- ref StringCache cache, bool report, ulong* linesOfCode = null)
+ ref StringCache cache, bool report, ulong* linesOfCode = null,
+ uint* errorCount = null, uint* warningCount = null)
{
import stats : isLineOfCode;
auto lexer = byToken(code);
@@ -153,7 +162,8 @@ const(Module) parseModule(string fileName, ubyte[] code, ParseAllocator p,
message.isError);
}
return std.d.parser.parseModule(tokens, fileName, p,
- report ? &messageFunctionJSON : &messageFunction);
+ report ? &messageFunctionJSON : &messageFunction,
+ errorCount, warningCount);
}
MessageSet analyze(string fileName, const Module m,
diff --git a/src/analysis/undocumented.d b/src/analysis/undocumented.d
index ad40349..c1273f4 100644
--- a/src/analysis/undocumented.d
+++ b/src/analysis/undocumented.d
@@ -35,10 +35,9 @@ class UndocumentedDeclarationCheck : BaseAnalyzer
if (dec.attributeDeclaration)
{
auto attr = dec.attributeDeclaration.attribute;
- if (isProtection(attr.attribute))
- set(attr.attribute);
- else if (dec.attributeDeclaration.attribute.storageClass !is null
- && dec.attributeDeclaration.attribute.storageClass.token == tok!"override")
+ if (isProtection(attr.attribute.type))
+ set(attr.attribute.type);
+ else if (attr.attribute == tok!"override")
{
setOverride(true);
}
@@ -50,16 +49,13 @@ class UndocumentedDeclarationCheck : BaseAnalyzer
bool ovr = false;
foreach (attribute; dec.attributes)
{
- if (isProtection(attribute.attribute))
+ if (isProtection(attribute.attribute.type))
{
shouldPop = true;
- push(attribute.attribute);
+ push(attribute.attribute.type);
}
- else if (attribute.storageClass !is null
- && attribute.storageClass.token == tok!"override")
- {
+ else if (attribute.attribute == tok!"override")
ovr = true;
- }
}
if (ovr)
setOverride(true);
diff --git a/src/analysis/unused.d b/src/analysis/unused.d
index 6ae42f0..ea86c31 100644
--- a/src/analysis/unused.d
+++ b/src/analysis/unused.d
@@ -34,8 +34,7 @@ class UnusedVariableCheck : BaseAnalyzer
override void visit(const Declaration declaration)
{
if (!isOverride) foreach (attribute; declaration.attributes)
- isOverride = isOverride || (attribute.storageClass !is null &&
- attribute.storageClass.token == tok!"override");
+ isOverride = isOverride || (attribute.attribute == tok!"override");
declaration.accept(this);
isOverride = false;
}
diff --git a/src/astprinter.d b/src/astprinter.d
index 4f12a97..77bdac7 100644
--- a/src/astprinter.d
+++ b/src/astprinter.d
@@ -12,1107 +12,1081 @@ import std.array;
template tagAndAccept(string tagName)
{
- immutable tagAndAccept = `output.writeln("<` ~ tagName ~ `>");`
- ~ tagName ~ `.accept(this);`
- ~ `output.writeln("` ~ tagName ~ `>");`;
+ immutable tagAndAccept = `output.writeln("<` ~ tagName ~ `>");`
+ ~ tagName ~ `.accept(this);`
+ ~ `output.writeln("` ~ tagName ~ `>");`;
}
class XMLPrinter : ASTVisitor
{
- override void visit(const AddExpression addExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(addExpression.left);
- output.writeln("");
- if (addExpression.right !is null)
- {
- output.writeln("");
- visit(addExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const AddExpression addExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(addExpression.left);
+ output.writeln("");
+ if (addExpression.right !is null)
+ {
+ output.writeln("");
+ visit(addExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const AliasDeclaration aliasDeclaration)
- {
- output.writeln("");
- writeDdoc(aliasDeclaration.comment);
- aliasDeclaration.accept(this);
- output.writeln("");
- }
+ override void visit(const AliasDeclaration aliasDeclaration)
+ {
+ output.writeln("");
+ writeDdoc(aliasDeclaration.comment);
+ aliasDeclaration.accept(this);
+ output.writeln("");
+ }
- override void visit(const AlignAttribute alignAttribute)
- {
- output.writeln("");
- }
+ override void visit(const AlignAttribute alignAttribute)
+ {
+ output.writeln("");
+ }
- override void visit(const AndAndExpression andAndExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(andAndExpression.left);
- output.writeln("");
- if (andAndExpression.right !is null)
- {
- output.writeln("");
- visit(andAndExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const AndAndExpression andAndExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(andAndExpression.left);
+ output.writeln("");
+ if (andAndExpression.right !is null)
+ {
+ output.writeln("");
+ visit(andAndExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const AndExpression andExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(andExpression.left);
- output.writeln("");
- if (andExpression.right !is null)
- {
- output.writeln("");
- visit(andExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const AndExpression andExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(andExpression.left);
+ output.writeln("");
+ if (andExpression.right !is null)
+ {
+ output.writeln("");
+ visit(andExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const AsmInstruction asmInstruction)
- {
- output.writeln("");
- if (asmInstruction.hasAlign)
- {
- output.writeln("");
- visit(asmInstruction.identifierOrIntegerOrOpcode);
- output.writeln("");
- }
- if (asmInstruction.asmInstruction !is null)
- {
- output.writeln("");
- asmInstruction.asmInstruction.accept(this);
- }
- else if (asmInstruction.identifierOrIntegerOrOpcode != tok!"")
- visit(asmInstruction.identifierOrIntegerOrOpcode);
- if (asmInstruction.operands !is null)
- {
- stderr.writeln("operands is not null");
- visit(asmInstruction.operands);
- }
- output.writeln("");
- }
+ override void visit(const AsmInstruction asmInstruction)
+ {
+ output.writeln("");
+ if (asmInstruction.hasAlign)
+ {
+ output.writeln("");
+ visit(asmInstruction.identifierOrIntegerOrOpcode);
+ output.writeln("");
+ }
+ if (asmInstruction.asmInstruction !is null)
+ {
+ output.writeln("");
+ asmInstruction.asmInstruction.accept(this);
+ }
+ else if (asmInstruction.identifierOrIntegerOrOpcode != tok!"")
+ visit(asmInstruction.identifierOrIntegerOrOpcode);
+ if (asmInstruction.operands !is null)
+ {
+ stderr.writeln("operands is not null");
+ visit(asmInstruction.operands);
+ }
+ output.writeln("");
+ }
- override void visit(const AssertExpression assertExpression)
- {
- output.writeln("");
- output.writeln("");
- assertExpression.assertion.accept(this);
- output.writeln("");
- if (assertExpression.message !is null)
- {
- output.writeln("");
- assertExpression.message.accept(this);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const AssertExpression assertExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ assertExpression.assertion.accept(this);
+ output.writeln("");
+ if (assertExpression.message !is null)
+ {
+ output.writeln("");
+ assertExpression.message.accept(this);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const AssignExpression assignExpression)
- {
- if (assignExpression.assignExpression is null)
- output.writeln("");
- else
- output.writeln("");
- assignExpression.accept(this);
- output.writeln("");
- }
+ override void visit(const AssignExpression assignExpression)
+ {
+ if (assignExpression.assignExpression is null)
+ output.writeln("");
+ else
+ output.writeln("");
+ assignExpression.accept(this);
+ output.writeln("");
+ }
- override void visit(const AtAttribute atAttribute)
- {
- output.writeln("");
- if (atAttribute.identifier.type == tok!"")
- atAttribute.accept(this);
- else
- output.writeln("", atAttribute.identifier.text, "");
- output.writeln("");
- }
+ override void visit(const AtAttribute atAttribute)
+ {
+ output.writeln("");
+ if (atAttribute.identifier.type == tok!"")
+ atAttribute.accept(this);
+ else
+ output.writeln("", atAttribute.identifier.text, "");
+ output.writeln("");
+ }
- override void visit(const Attribute attribute)
- {
- output.writeln("");
- if (attribute.attribute == tok!"")
- attribute.accept(this);
- else
- output.writeln(str(attribute.attribute));
- output.writeln("");
- }
+ override void visit(const Attribute attribute)
+ {
+ output.writeln("");
+ if (attribute.attribute == tok!"")
+ attribute.accept(this);
+ else
+ output.writeln(str(attribute.attribute.type));
+ output.writeln("");
+ }
- override void visit(const AutoDeclaration autoDec)
- {
- output.writeln("");
- for (size_t i = 0; i < autoDec.identifiers.length; i++)
- {
- output.writeln("- ");
- output.writeln("",
- autoDec.identifiers[i].text, "");
- visit(autoDec.initializers[i]);
- output.writeln("
");
- }
- output.writeln("");
- }
+ override void visit(const AutoDeclaration autoDec)
+ {
+ output.writeln("");
+ for (size_t i = 0; i < autoDec.identifiers.length; i++)
+ {
+ output.writeln("- ");
+ output.writeln("",
+ autoDec.identifiers[i].text, "");
+ visit(autoDec.initializers[i]);
+ output.writeln("
");
+ }
+ output.writeln("");
+ }
- override void visit(const BreakStatement breakStatement)
- {
- if (breakStatement.label.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const BreakStatement breakStatement)
+ {
+ if (breakStatement.label.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const CaseRangeStatement caseRangeStatement)
- {
- output.writeln("");
- if (caseRangeStatement.low !is null)
- {
- output.writeln("");
- visit(caseRangeStatement.low);
- output.writeln("");
- }
- if (caseRangeStatement.high !is null)
- {
- output.writeln("");
- visit(caseRangeStatement.high);
- output.writeln("");
- }
- if (caseRangeStatement.declarationsAndStatements !is null)
- visit(caseRangeStatement.declarationsAndStatements);
- output.writeln("");
- }
+ override void visit(const CaseRangeStatement caseRangeStatement)
+ {
+ output.writeln("");
+ if (caseRangeStatement.low !is null)
+ {
+ output.writeln("");
+ visit(caseRangeStatement.low);
+ output.writeln("");
+ }
+ if (caseRangeStatement.high !is null)
+ {
+ output.writeln("");
+ visit(caseRangeStatement.high);
+ output.writeln("");
+ }
+ if (caseRangeStatement.declarationsAndStatements !is null)
+ visit(caseRangeStatement.declarationsAndStatements);
+ output.writeln("");
+ }
- override void visit(const Catch catch_)
- {
- output.writeln("");
- catch_.accept(this);
- output.writeln("");
- }
+ override void visit(const Catch catch_)
+ {
+ output.writeln("");
+ catch_.accept(this);
+ output.writeln("");
+ }
- override void visit(const ClassDeclaration classDec)
- {
- output.writeln("");
- output.writeln("", classDec.name.text, "");
- writeDdoc(classDec.comment);
- classDec.accept(this);
- output.writeln("");
- }
+ override void visit(const ClassDeclaration classDec)
+ {
+ output.writeln("");
+ output.writeln("", classDec.name.text, "");
+ writeDdoc(classDec.comment);
+ classDec.accept(this);
+ output.writeln("");
+ }
- override void visit(const ConditionalDeclaration conditionalDeclaration)
- {
- output.writeln("");
- visit(conditionalDeclaration.compileCondition);
- output.writeln("");
- foreach (dec; conditionalDeclaration.trueDeclarations)
- visit(dec);
- output.writeln("");
- if (conditionalDeclaration.falseDeclaration !is null)
- {
- output.writeln("");
- visit(conditionalDeclaration.falseDeclaration);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const ConditionalDeclaration conditionalDeclaration)
+ {
+ output.writeln("");
+ visit(conditionalDeclaration.compileCondition);
+ output.writeln("");
+ foreach (dec; conditionalDeclaration.trueDeclarations)
+ visit(dec);
+ output.writeln("");
+ if (conditionalDeclaration.falseDeclaration !is null)
+ {
+ output.writeln("");
+ visit(conditionalDeclaration.falseDeclaration);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const ConditionalStatement conditionalStatement)
- {
- output.writeln("");
- visit(conditionalStatement.compileCondition);
- output.writeln("");
- visit(conditionalStatement.trueStatement);
- output.writeln("");
- if (conditionalStatement.falseStatement !is null)
- {
- output.writeln("");
- visit(conditionalStatement.falseStatement);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const ConditionalStatement conditionalStatement)
+ {
+ output.writeln("");
+ visit(conditionalStatement.compileCondition);
+ output.writeln("");
+ visit(conditionalStatement.trueStatement);
+ output.writeln("");
+ if (conditionalStatement.falseStatement !is null)
+ {
+ output.writeln("");
+ visit(conditionalStatement.falseStatement);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const ContinueStatement continueStatement)
- {
- if (continueStatement.label.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const ContinueStatement continueStatement)
+ {
+ if (continueStatement.label.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const DebugCondition debugCondition)
- {
- if (debugCondition.identifierOrInteger.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const DebugCondition debugCondition)
+ {
+ if (debugCondition.identifierOrInteger.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const DebugSpecification debugSpecification)
- {
- if (debugSpecification.identifierOrInteger.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const DebugSpecification debugSpecification)
+ {
+ if (debugSpecification.identifierOrInteger.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const Declarator declarator)
- {
- output.writeln("");
- output.writeln("", declarator.name.text, "");
- writeDdoc(declarator.comment);
- declarator.accept(this);
- output.writeln("");
- }
+ override void visit(const Declarator declarator)
+ {
+ output.writeln("");
+ output.writeln("", declarator.name.text, "");
+ writeDdoc(declarator.comment);
+ declarator.accept(this);
+ output.writeln("");
+ }
- override void visit(const Deprecated deprecated_)
- {
- if (deprecated_.assignExpression !is null)
- {
- output.writeln("");
- deprecated_.accept(this);
- output.writeln("");
- }
- else
- output.writeln("");
- }
+ override void visit(const Deprecated deprecated_)
+ {
+ if (deprecated_.stringLiteral.type != tok!"")
+ output.writeln("", deprecated_.stringLiteral.text, "");
+ else
+ output.writeln("");
+ }
- override void visit(const EnumDeclaration enumDec)
- {
- output.writeln("");
+ override void visit(const EnumDeclaration enumDec)
+ {
+ output.writeln("");
writeDdoc(enumDec.comment);
- if (enumDec.name.type == tok!"identifier")
- output.writeln("", enumDec.name.text, "");
- enumDec.accept(this);
- output.writeln("");
- }
+ if (enumDec.name.type == tok!"identifier")
+ output.writeln("", enumDec.name.text, "");
+ enumDec.accept(this);
+ output.writeln("");
+ }
- override void visit(const EnumMember enumMem)
- {
- output.writeln("");
+ override void visit(const EnumMember enumMem)
+ {
+ output.writeln("");
writeDdoc(enumMem.comment);
- enumMem.accept(this);
- output.writeln("");
- }
+ enumMem.accept(this);
+ output.writeln("");
+ }
- override void visit(const EqualExpression equalExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(equalExpression.left);
- output.writeln("");
- output.writeln("");
- visit(equalExpression.right);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const EqualExpression equalExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(equalExpression.left);
+ output.writeln("");
+ output.writeln("");
+ visit(equalExpression.right);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const Finally finally_)
- {
- output.writeln("");
- finally_.accept(this);
- output.writeln("");
- }
+ override void visit(const Finally finally_)
+ {
+ output.writeln("");
+ finally_.accept(this);
+ output.writeln("");
+ }
- override void visit(const ForStatement forStatement)
- {
- output.writeln("");
- if (forStatement.initialization !is null)
- {
- output.writeln("");
- visit(forStatement.initialization);
- output.writeln("");
- }
- if (forStatement.test !is null)
- {
- output.writeln("");
- visit(forStatement.test);
- output.writeln("");
- }
- if (forStatement.increment !is null)
- {
- output.writeln("");
- visit(forStatement.increment);
- output.writeln("");
- }
- if (forStatement.declarationOrStatement !is null)
- visit(forStatement.declarationOrStatement);
- output.writeln("");
- }
+ override void visit(const ForStatement forStatement)
+ {
+ output.writeln("");
+ if (forStatement.initialization !is null)
+ {
+ output.writeln("");
+ visit(forStatement.initialization);
+ output.writeln("");
+ }
+ if (forStatement.test !is null)
+ {
+ output.writeln("");
+ visit(forStatement.test);
+ output.writeln("");
+ }
+ if (forStatement.increment !is null)
+ {
+ output.writeln("");
+ visit(forStatement.increment);
+ output.writeln("");
+ }
+ if (forStatement.declarationOrStatement !is null)
+ visit(forStatement.declarationOrStatement);
+ output.writeln("");
+ }
- override void visit(const ForeachStatement foreachStatement)
- {
- output.writeln("");
- if (foreachStatement.foreachType !is null)
- visit(foreachStatement.foreachType);
- if (foreachStatement.foreachTypeList !is null)
- visit(foreachStatement.foreachTypeList);
- output.writeln("");
- visit(foreachStatement.low);
- output.writeln("");
- if (foreachStatement.high !is null)
- {
- output.writeln("");
- visit(foreachStatement.high);
- output.writeln("");
- }
- visit(foreachStatement.declarationOrStatement);
- output.writeln("");
- }
+ override void visit(const ForeachStatement foreachStatement)
+ {
+ output.writeln("");
+ if (foreachStatement.foreachType !is null)
+ visit(foreachStatement.foreachType);
+ if (foreachStatement.foreachTypeList !is null)
+ visit(foreachStatement.foreachTypeList);
+ output.writeln("");
+ visit(foreachStatement.low);
+ output.writeln("");
+ if (foreachStatement.high !is null)
+ {
+ output.writeln("");
+ visit(foreachStatement.high);
+ output.writeln("");
+ }
+ visit(foreachStatement.declarationOrStatement);
+ output.writeln("");
+ }
- override void visit(const ForeachType foreachType)
- {
- output.writeln("");
- foreach (constructor; foreachType.typeConstructors)
- {
- output.writeln("", str(constructor), "");
- }
- if (foreachType.type !is null)
- visit(foreachType.type);
- visit(foreachType.identifier);
- output.writeln("");
+ override void visit(const ForeachType foreachType)
+ {
+ output.writeln("");
+ foreach (constructor; foreachType.typeConstructors)
+ {
+ output.writeln("", str(constructor), "");
+ }
+ if (foreachType.type !is null)
+ visit(foreachType.type);
+ visit(foreachType.identifier);
+ output.writeln("");
- }
+ }
- override void visit(const FunctionDeclaration functionDec)
- {
- output.writeln("");
- output.writeln("", functionDec.name.text, "");
+ override void visit(const FunctionDeclaration functionDec)
+ {
+ output.writeln("");
+ output.writeln("", functionDec.name.text, "");
writeDdoc(functionDec.comment);
- if (functionDec.hasAuto)
- output.writeln("");
- if (functionDec.hasRef)
- output.writeln("");
- functionDec.accept(this);
- output.writeln("");
- }
+ if (functionDec.hasAuto)
+ output.writeln("");
+ if (functionDec.hasRef)
+ output.writeln("");
+ functionDec.accept(this);
+ output.writeln("");
+ }
- override void visit(const FunctionLiteralExpression functionLiteralExpression)
- {
- output.writeln("");
- functionLiteralExpression.accept(this);
- output.writeln("");
- }
+ override void visit(const FunctionLiteralExpression functionLiteralExpression)
+ {
+ output.writeln("");
+ functionLiteralExpression.accept(this);
+ output.writeln("");
+ }
- override void visit(const GotoStatement gotoStatement)
- {
- if (gotoStatement.label.type == tok!"default")
- output.writeln("");
- else if (gotoStatement.label.type == tok!"identifier")
- output.writeln("");
- else
- {
- output.writeln("");
- output.writeln("");
- if (gotoStatement.expression)
- visit(gotoStatement.expression);
- output.writeln("");
- output.writeln("");
- }
- }
+ override void visit(const GotoStatement gotoStatement)
+ {
+ if (gotoStatement.label.type == tok!"default")
+ output.writeln("");
+ else if (gotoStatement.label.type == tok!"identifier")
+ output.writeln("");
+ else
+ {
+ output.writeln("");
+ output.writeln("");
+ if (gotoStatement.expression)
+ visit(gotoStatement.expression);
+ output.writeln("");
+ output.writeln("");
+ }
+ }
- override void visit(const IdentityExpression identityExpression)
- {
- if (identityExpression.negated)
- output.writeln("");
- else
- output.writeln("");
- output.writeln("");
- visit(identityExpression.left);
- output.writeln("");
- output.writeln("");
- visit(identityExpression.right);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const IdentityExpression identityExpression)
+ {
+ if (identityExpression.negated)
+ output.writeln("");
+ else
+ output.writeln("");
+ output.writeln("");
+ visit(identityExpression.left);
+ output.writeln("");
+ output.writeln("");
+ visit(identityExpression.right);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const IfStatement ifStatement)
- {
- output.writeln("");
+ override void visit(const IfStatement ifStatement)
+ {
+ output.writeln("");
- output.writeln("");
- if (ifStatement.identifier.type != tok!"")
- {
- if (ifStatement.type is null)
- output.writeln("");
- else
- visit(ifStatement.type);
- visit(ifStatement.identifier);
- }
- ifStatement.expression.accept(this);
- output.writeln("");
+ output.writeln("");
+ if (ifStatement.identifier.type != tok!"")
+ {
+ if (ifStatement.type is null)
+ output.writeln("");
+ else
+ visit(ifStatement.type);
+ visit(ifStatement.identifier);
+ }
+ ifStatement.expression.accept(this);
+ output.writeln("");
- output.writeln("");
- ifStatement.thenStatement.accept(this);
- output.writeln("");
+ output.writeln("");
+ ifStatement.thenStatement.accept(this);
+ output.writeln("");
- if (ifStatement.elseStatement !is null)
- {
- output.writeln("");
- ifStatement.elseStatement.accept(this);
- output.writeln("");
- }
- output.writeln("");
- }
+ if (ifStatement.elseStatement !is null)
+ {
+ output.writeln("");
+ ifStatement.elseStatement.accept(this);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const ImportBind importBind)
- {
- if (importBind.right.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const ImportBind importBind)
+ {
+ if (importBind.right.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const InExpression inExpression)
- {
- if (inExpression.negated)
- output.writeln("");
- else
- output.writeln("");
- output.writeln("");
- visit(inExpression.left);
- output.writeln("");
- output.writeln("");
- visit(inExpression.right);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const InExpression inExpression)
+ {
+ if (inExpression.negated)
+ output.writeln("");
+ else
+ output.writeln("");
+ output.writeln("");
+ visit(inExpression.left);
+ output.writeln("");
+ output.writeln("");
+ visit(inExpression.right);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const Initialize initialize)
- {
- if (initialize.statementNoCaseNoDefault is null)
- output.writeln("");
- else
- {
- output.writeln("");
- visit(initialize.statementNoCaseNoDefault);
- output.writeln("");
- }
- }
+ override void visit(const Initialize initialize)
+ {
+ if (initialize.statementNoCaseNoDefault is null)
+ output.writeln("");
+ else
+ {
+ output.writeln("");
+ visit(initialize.statementNoCaseNoDefault);
+ output.writeln("");
+ }
+ }
- override void visit(const Initializer initializer)
- {
- if (initializer.nonVoidInitializer is null)
- output.writeln("");
- else
- {
- output.writeln("");
- visit(initializer.nonVoidInitializer);
- output.writeln("");
- }
- }
+ override void visit(const Initializer initializer)
+ {
+ if (initializer.nonVoidInitializer is null)
+ output.writeln("");
+ else
+ {
+ output.writeln("");
+ visit(initializer.nonVoidInitializer);
+ output.writeln("");
+ }
+ }
- override void visit(const InterfaceDeclaration interfaceDec)
- {
- output.writeln("");
- output.writeln("", interfaceDec.name.text, "");
+ override void visit(const InterfaceDeclaration interfaceDec)
+ {
+ output.writeln("");
+ output.writeln("", interfaceDec.name.text, "");
writeDdoc(interfaceDec.comment);
- interfaceDec.accept(this);
- output.writeln("");
- }
+ interfaceDec.accept(this);
+ output.writeln("");
+ }
- override void visit(const Invariant invariant_)
- {
- output.writeln("");
+ override void visit(const Invariant invariant_)
+ {
+ output.writeln("");
writeDdoc(invariant_.comment);
- invariant_.accept(this);
- output.writeln("");
- }
+ invariant_.accept(this);
+ output.writeln("");
+ }
- override void visit(const IsExpression isExpression)
- {
- output.writeln("");
- visit(isExpression.type);
- if (isExpression.identifier.type != tok!"")
- visit(isExpression.identifier);
- if (isExpression.typeSpecialization !is null)
- {
- if (isExpression.equalsOrColon == tok!":")
- output.writeln("");
- else
- output.writeln("");
- visit(isExpression.typeSpecialization);
- if (isExpression.templateParameterList !is null)
- visit(isExpression.templateParameterList);
- }
- output.writeln("");
- }
+ override void visit(const IsExpression isExpression)
+ {
+ output.writeln("");
+ visit(isExpression.type);
+ if (isExpression.identifier.type != tok!"")
+ visit(isExpression.identifier);
+ if (isExpression.typeSpecialization !is null)
+ {
+ if (isExpression.equalsOrColon == tok!":")
+ output.writeln("");
+ else
+ output.writeln("");
+ visit(isExpression.typeSpecialization);
+ if (isExpression.templateParameterList !is null)
+ visit(isExpression.templateParameterList);
+ }
+ output.writeln("");
+ }
- override void visit(const KeyValuePair keyValuePair)
- {
- output.writeln("");
- output.writeln("");
- visit(keyValuePair.key);
- output.writeln("");
- output.writeln("");
- visit(keyValuePair.value);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const KeyValuePair keyValuePair)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(keyValuePair.key);
+ output.writeln("");
+ output.writeln("");
+ visit(keyValuePair.value);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit (const LabeledStatement labeledStatement)
- {
- output.writeln("");
- visit(labeledStatement.declarationOrStatement);
- output.writeln("");
- }
+ override void visit (const LabeledStatement labeledStatement)
+ {
+ output.writeln("");
+ visit(labeledStatement.declarationOrStatement);
+ output.writeln("");
+ }
- override void visit(const LambdaExpression lambdaExpression)
- {
- output.writeln("");
- if (lambdaExpression.functionType == tok!"function")
- output.writeln("");
- if (lambdaExpression.functionType == tok!"delegate")
- output.writeln("");
- lambdaExpression.accept(this);
- output.writeln("");
- }
+ override void visit(const LambdaExpression lambdaExpression)
+ {
+ output.writeln("");
+ if (lambdaExpression.functionType == tok!"function")
+ output.writeln("");
+ if (lambdaExpression.functionType == tok!"delegate")
+ output.writeln("");
+ lambdaExpression.accept(this);
+ output.writeln("");
+ }
- override void visit(const LinkageAttribute linkageAttribute)
- {
- if (linkageAttribute.hasPlusPlus)
- output.writeln("");
- else
- output.writeln("");
- }
+ override void visit(const LinkageAttribute linkageAttribute)
+ {
+ if (linkageAttribute.hasPlusPlus)
+ output.writeln("");
+ else
+ output.writeln("");
+ }
- override void visit(const MemberFunctionAttribute memberFunctionAttribute)
- {
- output.writeln("");
- if (memberFunctionAttribute.atAttribute is null)
- output.writeln(str(memberFunctionAttribute.tokenType));
- else
- memberFunctionAttribute.accept(this);
- output.writeln("");
- }
+ override void visit(const MemberFunctionAttribute memberFunctionAttribute)
+ {
+ output.writeln("");
+ if (memberFunctionAttribute.atAttribute is null)
+ output.writeln(str(memberFunctionAttribute.tokenType));
+ else
+ memberFunctionAttribute.accept(this);
+ output.writeln("");
+ }
- override void visit(const Module module_)
- {
- output.writeln("");
- output.writeln("");
- module_.accept(this);
- output.writeln("");
- }
+ override void visit(const Module module_)
+ {
+ output.writeln("");
+ output.writeln("");
+ module_.accept(this);
+ output.writeln("");
+ }
- override void visit(const MulExpression mulExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(mulExpression.left);
- output.writeln("");
- if (mulExpression.right !is null)
- {
- output.writeln("");
- visit(mulExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const MulExpression mulExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(mulExpression.left);
+ output.writeln("");
+ if (mulExpression.right !is null)
+ {
+ output.writeln("");
+ visit(mulExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const OrOrExpression orOrExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(orOrExpression.left);
- output.writeln("");
- if (orOrExpression.right !is null)
- {
- output.writeln("");
- visit(orOrExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const OrOrExpression orOrExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(orOrExpression.left);
+ output.writeln("");
+ if (orOrExpression.right !is null)
+ {
+ output.writeln("");
+ visit(orOrExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const Parameter param)
- {
- output.writeln("");
- if (param.name.type == tok!"identifier")
- output.writeln("", param.name.text, "");
- foreach (attribute; param.parameterAttributes)
- {
- output.writeln("", str(attribute), "");
- }
- param.accept(this);
- if (param.vararg)
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const Parameter param)
+ {
+ output.writeln("");
+ if (param.name.type == tok!"identifier")
+ output.writeln("", param.name.text, "");
+ foreach (attribute; param.parameterAttributes)
+ {
+ output.writeln("", str(attribute), "");
+ }
+ param.accept(this);
+ if (param.vararg)
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const PostIncDecExpression postIncDecExpression)
- {
- output.writeln("");
- postIncDecExpression.accept(this);
- output.writeln("");
- }
- override void visit(const PowExpression powExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(powExpression.left);
- output.writeln("");
- if (powExpression.right !is null)
- {
- output.writeln("");
- visit(powExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const PowExpression powExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(powExpression.left);
+ output.writeln("");
+ if (powExpression.right !is null)
+ {
+ output.writeln("");
+ visit(powExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const PreIncDecExpression preIncDecExpression)
- {
- output.writeln("");
- preIncDecExpression.accept(this);
- output.writeln("");
- }
+ override void visit(const RelExpression relExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(relExpression.left);
+ output.writeln("");
+ output.writeln("");
+ visit(relExpression.right);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const RelExpression relExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(relExpression.left);
- output.writeln("");
- output.writeln("");
- visit(relExpression.right);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const ReturnStatement returnStatement)
+ {
+ if (returnStatement.expression is null)
+ output.writeln("");
+ else
+ {
+ output.writeln("");
+ returnStatement.accept(this);
+ output.writeln("");
+ }
+ }
- override void visit(const ReturnStatement returnStatement)
- {
- if (returnStatement.expression is null)
- output.writeln("");
- else
- {
- output.writeln("");
- returnStatement.accept(this);
- output.writeln("");
- }
- }
+ override void visit(const ShiftExpression shiftExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(shiftExpression.left);
+ output.writeln("");
+ output.writeln("");
+ visit(shiftExpression.right);
+ output.writeln("");
+ output.writeln("");
+ }
- override void visit(const ShiftExpression shiftExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(shiftExpression.left);
- output.writeln("");
- output.writeln("");
- visit(shiftExpression.right);
- output.writeln("");
- output.writeln("");
- }
+ override void visit(const SingleImport singleImport)
+ {
+ if (singleImport.rename.type == tok!"")
+ output.writeln("");
+ else
+ output.writeln("");
+ visit(singleImport.identifierChain);
+ output.writeln("");
+ }
- override void visit(const SingleImport singleImport)
- {
- if (singleImport.rename.type == tok!"")
- output.writeln("");
- else
- output.writeln("");
- visit(singleImport.identifierChain);
- output.writeln("");
- }
+ override void visit(const SliceExpression sliceExpression)
+ {
+ output.writeln("");
+ visit(sliceExpression.unaryExpression);
+ if (sliceExpression.lower !is null)
+ {
+ output.writeln("");
+ visit(sliceExpression.lower);
+ output.writeln("");
+ }
+ if (sliceExpression.upper !is null)
+ {
+ output.writeln("");
+ visit(sliceExpression.upper);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const SliceExpression sliceExpression)
- {
- output.writeln("");
- visit(sliceExpression.unaryExpression);
- if (sliceExpression.lower !is null)
- {
- output.writeln("");
- visit(sliceExpression.lower);
- output.writeln("");
- }
- if (sliceExpression.upper !is null)
- {
- output.writeln("");
- visit(sliceExpression.upper);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const StructDeclaration structDec)
+ {
+ output.writeln("");
+ output.writeln("", structDec.name.text, "");
+ writeDdoc(structDec.comment);
+ structDec.accept(this);
+ output.writeln("");
+ }
- override void visit(const StructDeclaration structDec)
- {
- output.writeln("");
- output.writeln("", structDec.name.text, "");
- writeDdoc(structDec.comment);
- structDec.accept(this);
- output.writeln("");
- }
+ override void visit(const TemplateAliasParameter templateAliasParameter)
+ {
+ output.writeln("");
+ if (templateAliasParameter.type !is null)
+ visit(templateAliasParameter.type);
+ visit(templateAliasParameter.identifier);
+ if (templateAliasParameter.colonExpression !is null)
+ {
+ output.writeln("");
+ visit(templateAliasParameter.colonExpression);
+ output.writeln("");
+ }
+ else if (templateAliasParameter.colonType !is null)
+ {
+ output.writeln("");
+ visit(templateAliasParameter.colonType);
+ output.writeln("");
+ }
- override void visit(const TemplateAliasParameter templateAliasParameter)
- {
- output.writeln("");
- if (templateAliasParameter.type !is null)
- visit(templateAliasParameter.type);
- visit(templateAliasParameter.identifier);
- if (templateAliasParameter.colonExpression !is null)
- {
- output.writeln("");
- visit(templateAliasParameter.colonExpression);
- output.writeln("");
- }
- else if (templateAliasParameter.colonType !is null)
- {
- output.writeln("");
- visit(templateAliasParameter.colonType);
- output.writeln("");
- }
+ if (templateAliasParameter.assignExpression !is null)
+ {
+ output.writeln("");
+ visit(templateAliasParameter.assignExpression);
+ output.writeln("");
+ }
+ else if (templateAliasParameter.assignType !is null)
+ {
+ output.writeln("");
+ visit(templateAliasParameter.assignType);
+ output.writeln("");
+ }
- if (templateAliasParameter.assignExpression !is null)
- {
- output.writeln("");
- visit(templateAliasParameter.assignExpression);
- output.writeln("");
- }
- else if (templateAliasParameter.assignType !is null)
- {
- output.writeln("");
- visit(templateAliasParameter.assignType);
- output.writeln("");
- }
+ output.writeln("");
+ }
- output.writeln("");
- }
-
- override void visit(const TemplateDeclaration templateDeclaration)
- {
- if (templateDeclaration.eponymousTemplateDeclaration !is null)
- {
- output.writeln("");
- visit(templateDeclaration.eponymousTemplateDeclaration);
- output.writeln("");
- return;
- }
+ override void visit(const TemplateDeclaration templateDeclaration)
+ {
writeDdoc(templateDeclaration.comment);
- output.writeln("");
- output.writeln("", templateDeclaration.name.text, "");
- visit(templateDeclaration.templateParameters);
- if (templateDeclaration.constraint !is null)
- visit(templateDeclaration.constraint);
- foreach (dec; templateDeclaration.declarations)
- {
- if (dec !is null) visit(dec);
- }
- output.writeln("");
- }
+ output.writeln("");
+ output.writeln("", templateDeclaration.name.text, "");
+ visit(templateDeclaration.templateParameters);
+ if (templateDeclaration.constraint !is null)
+ visit(templateDeclaration.constraint);
+ foreach (dec; templateDeclaration.declarations)
+ {
+ if (dec !is null) visit(dec);
+ }
+ output.writeln("");
+ }
- override void visit(const Token token)
- {
- string tagName;
- switch (token.type)
- {
- case tok!"": return;
- case tok!"identifier": tagName = "identifier"; break;
- case tok!"doubleLiteral": tagName = "doubleLiteral"; break;
- case tok!"idoubleLiteral": tagName = "idoubleLiteral"; break;
- case tok!"floatLiteral": tagName = "floatLiteral"; break;
- case tok!"ifloatLiteral": tagName = "ifloatLiteral"; break;
- case tok!"intLiteral": tagName = "intLiteral"; break;
- case tok!"uintLiteral": tagName = "uintLiteral"; break;
- case tok!"longLiteral": tagName = "longLiteral"; break;
- case tok!"ulongLiteral": tagName = "ulongLiteral"; break;
- case tok!"realLiteral": tagName = "realLiteral"; break;
- case tok!"irealLiteral": tagName = "irealLiteral"; break;
- case tok!"characterLiteral": tagName = "characterLiteral"; break;
- case tok!"stringLiteral": tagName = "stringLiteral"; break;
- case tok!"dstringLiteral": tagName = "dstringLiteral"; break;
- case tok!"wstringLiteral": tagName = "wstringLiteral"; break;
- case tok!"scriptLine": tagName = "scriptLine"; break;
- case tok!"$": output.writeln(""); return;
- case tok!".": output.writeln(""); return;
- default: output.writeln("<", str(token.type), "/>"); return;
- }
- output.writeln("<", tagName, ">", xmlEscape(token.text), "", tagName, ">");
- }
+ override void visit(const Token token)
+ {
+ string tagName;
+ switch (token.type)
+ {
+ case tok!"": return;
+ case tok!"identifier": tagName = "identifier"; break;
+ case tok!"doubleLiteral": tagName = "doubleLiteral"; break;
+ case tok!"idoubleLiteral": tagName = "idoubleLiteral"; break;
+ case tok!"floatLiteral": tagName = "floatLiteral"; break;
+ case tok!"ifloatLiteral": tagName = "ifloatLiteral"; break;
+ case tok!"intLiteral": tagName = "intLiteral"; break;
+ case tok!"uintLiteral": tagName = "uintLiteral"; break;
+ case tok!"longLiteral": tagName = "longLiteral"; break;
+ case tok!"ulongLiteral": tagName = "ulongLiteral"; break;
+ case tok!"realLiteral": tagName = "realLiteral"; break;
+ case tok!"irealLiteral": tagName = "irealLiteral"; break;
+ case tok!"characterLiteral": tagName = "characterLiteral"; break;
+ case tok!"stringLiteral": tagName = "stringLiteral"; break;
+ case tok!"dstringLiteral": tagName = "dstringLiteral"; break;
+ case tok!"wstringLiteral": tagName = "wstringLiteral"; break;
+ case tok!"scriptLine": tagName = "scriptLine"; break;
+ case tok!"$": output.writeln(""); return;
+ case tok!".": output.writeln(""); return;
+ default: output.writeln("<", str(token.type), "/>"); return;
+ }
+ output.writeln("<", tagName, ">", xmlEscape(token.text), "", tagName, ">");
+ }
- override void visit(const Type type)
- {
- auto app = appender!string();
- auto formatter = new Formatter!(typeof(app))(app);
- formatter.format(type);
- output.writeln("");
- type.accept(this);
- output.writeln("");
- }
+ override void visit(const Type type)
+ {
+ auto app = appender!string();
+ auto formatter = new Formatter!(typeof(app))(app);
+ formatter.format(type);
+ output.writeln("");
+ type.accept(this);
+ output.writeln("");
+ }
- override void visit(const Type2 type2)
- {
- if (type2.builtinType != tok!"")
- output.writeln("", str(type2.builtinType), "");
- else
- {
- output.writeln("");
- type2.accept(this);
- output.writeln("");
- }
- }
+ override void visit(const Type2 type2)
+ {
+ if (type2.builtinType != tok!"")
+ output.writeln("", str(type2.builtinType), "");
+ else
+ {
+ output.writeln("");
+ type2.accept(this);
+ output.writeln("");
+ }
+ }
- override void visit(const TypeSuffix typeSuffix)
- {
- if (typeSuffix.star)
- output.writeln("");
- else if (typeSuffix.array)
- {
- if (typeSuffix.low is null && typeSuffix.type is null)
- output.writeln("");
- else
- {
- if (typeSuffix.low is null)
- {
- output.writeln("");
- visit(typeSuffix.type);
- output.writeln("");
- }
- else
- {
- output.writeln("");
- if (typeSuffix.high !is null)
- {
- output.writeln("");
- visit(typeSuffix.low);
- output.writeln("");
- output.writeln("");
- visit(typeSuffix.high);
- output.writeln("");
- }
- else
- visit(typeSuffix.low);
- output.writeln("");
- }
- }
- }
- else
- {
- visit(typeSuffix.delegateOrFunction);
- visit(typeSuffix.parameters);
- foreach (attr; typeSuffix.memberFunctionAttributes)
- {
- if (attr !is null) visit(attr);
- }
- }
- }
+ override void visit(const TypeSuffix typeSuffix)
+ {
+ if (typeSuffix.star)
+ output.writeln("");
+ else if (typeSuffix.array)
+ {
+ if (typeSuffix.low is null && typeSuffix.type is null)
+ output.writeln("");
+ else
+ {
+ if (typeSuffix.low is null)
+ {
+ output.writeln("");
+ visit(typeSuffix.type);
+ output.writeln("");
+ }
+ else
+ {
+ output.writeln("");
+ if (typeSuffix.high !is null)
+ {
+ output.writeln("");
+ visit(typeSuffix.low);
+ output.writeln("");
+ output.writeln("");
+ visit(typeSuffix.high);
+ output.writeln("");
+ }
+ else
+ visit(typeSuffix.low);
+ output.writeln("");
+ }
+ }
+ }
+ else
+ {
+ visit(typeSuffix.delegateOrFunction);
+ visit(typeSuffix.parameters);
+ foreach (attr; typeSuffix.memberFunctionAttributes)
+ {
+ if (attr !is null) visit(attr);
+ }
+ }
+ }
- override void visit(const UnaryExpression unaryExpression)
- {
- output.writeln("");
- if (unaryExpression.prefix != tok!"")
- {
- output.writeln("", xmlEscape(str(unaryExpression.prefix.type)),
- "");
- unaryExpression.unaryExpression.accept(this);
- }
- if (unaryExpression.suffix != tok!"")
- {
- assert(unaryExpression.suffix.text == "");
- unaryExpression.unaryExpression.accept(this);
- output.writeln("", str(unaryExpression.suffix.type),
- "");
- }
- else
- unaryExpression.accept(this);
- output.writeln("");
- }
+ override void visit(const UnaryExpression unaryExpression)
+ {
+ output.writeln("");
+ if (unaryExpression.prefix != tok!"")
+ {
+ output.writeln("", xmlEscape(str(unaryExpression.prefix.type)),
+ "");
+ unaryExpression.unaryExpression.accept(this);
+ }
+ if (unaryExpression.suffix != tok!"")
+ {
+ assert(unaryExpression.suffix.text == "");
+ unaryExpression.unaryExpression.accept(this);
+ output.writeln("", str(unaryExpression.suffix.type),
+ "");
+ }
+ else
+ unaryExpression.accept(this);
+ output.writeln("");
+ }
- override void visit(const UnionDeclaration unionDeclaration)
- {
- output.writeln("");
- if (unionDeclaration.name != tok!"")
- output.writeln("", unionDeclaration.name.text, "");
- if (unionDeclaration.templateParameters !is null)
- visit(unionDeclaration.templateParameters);
- if (unionDeclaration.constraint !is null)
- visit(unionDeclaration.constraint);
- if (unionDeclaration.structBody !is null)
- visit(unionDeclaration.structBody);
- output.writeln("");
- }
+ override void visit(const UnionDeclaration unionDeclaration)
+ {
+ output.writeln("");
+ if (unionDeclaration.name != tok!"")
+ output.writeln("", unionDeclaration.name.text, "");
+ if (unionDeclaration.templateParameters !is null)
+ visit(unionDeclaration.templateParameters);
+ if (unionDeclaration.constraint !is null)
+ visit(unionDeclaration.constraint);
+ if (unionDeclaration.structBody !is null)
+ visit(unionDeclaration.structBody);
+ output.writeln("");
+ }
- override void visit(const Unittest unittest_)
- {
- output.writeln("");
- unittest_.accept(this);
- output.writeln("");
- }
+ override void visit(const Unittest unittest_)
+ {
+ output.writeln("");
+ unittest_.accept(this);
+ output.writeln("");
+ }
- override void visit(const VariableDeclaration variableDeclaration)
- {
+ override void visit(const VariableDeclaration variableDeclaration)
+ {
output.writeln("");
writeDdoc(variableDeclaration.comment);
variableDeclaration.accept(this);
output.writeln("");
- }
+ }
- override void visit(const XorExpression xorExpression)
- {
- output.writeln("");
- output.writeln("");
- visit(xorExpression.left);
- output.writeln("");
- if (xorExpression.right !is null)
- {
- output.writeln("");
- visit(xorExpression.right);
- output.writeln("");
- }
- output.writeln("");
- }
+ override void visit(const XorExpression xorExpression)
+ {
+ output.writeln("");
+ output.writeln("");
+ visit(xorExpression.left);
+ output.writeln("");
+ if (xorExpression.right !is null)
+ {
+ output.writeln("");
+ visit(xorExpression.right);
+ output.writeln("");
+ }
+ output.writeln("");
+ }
- override void visit(const AliasInitializer aliasInitializer) { mixin (tagAndAccept!"aliasInitializer"); }
- override void visit(const AliasThisDeclaration aliasThisDeclaration) { mixin (tagAndAccept!"aliasThisDeclaration"); }
- 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"); }
- override void visit(const ArrayLiteral arrayLiteral) { mixin (tagAndAccept!"arrayLiteral"); }
- override void visit(const ArrayMemberInitialization arrayMemberInitialization) { mixin (tagAndAccept!"arrayMemberInitialization"); }
- override void visit(const AsmAddExp asmAddExp) { mixin (tagAndAccept!"asmAddExp"); }
- override void visit(const AsmAndExp asmAndExp) { mixin (tagAndAccept!"asmAndExp"); }
- override void visit(const AsmBrExp asmBrExp) { mixin (tagAndAccept!"asmBrExp"); }
- override void visit(const AsmEqualExp asmEqualExp) { mixin (tagAndAccept!"asmEqualExp"); }
- override void visit(const AsmExp asmExp) { mixin (tagAndAccept!"asmExp"); }
- override void visit(const AsmLogAndExp asmLogAndExp) { mixin (tagAndAccept!"asmLogAndExp"); }
- override void visit(const AsmLogOrExp asmLogOrExp) { mixin (tagAndAccept!"asmLogOrExp"); }
- override void visit(const AsmMulExp asmMulExp) { mixin (tagAndAccept!"asmMulExp"); }
- override void visit(const AsmOrExp asmOrExp) { mixin (tagAndAccept!"asmOrExp"); }
- override void visit(const AsmPrimaryExp asmPrimaryExp) { mixin (tagAndAccept!"asmPrimaryExp"); }
- override void visit(const AsmRelExp asmRelExp) { mixin (tagAndAccept!"asmRelExp"); }
- override void visit(const AsmShiftExp asmShiftExp) { mixin (tagAndAccept!"asmShiftExp"); }
- override void visit(const AsmStatement asmStatement) { mixin (tagAndAccept!"asmStatement"); }
- override void visit(const AsmTypePrefix asmTypePrefix) { mixin (tagAndAccept!"asmTypePrefix"); }
- override void visit(const AsmUnaExp asmUnaExp) { mixin (tagAndAccept!"asmUnaExp"); }
- override void visit(const AsmXorExp asmXorExp) { mixin (tagAndAccept!"asmXorExp"); }
- override void visit(const AssocArrayLiteral assocArrayLiteral) { mixin (tagAndAccept!"assocArrayLiteral"); }
- override void visit(const AttributeDeclaration attributeDeclaration) { mixin (tagAndAccept!"attributeDeclaration"); }
- override void visit(const BaseClass baseClass) { mixin (tagAndAccept!"baseClass"); }
- override void visit(const BaseClassList baseClassList) { mixin (tagAndAccept!"baseClassList"); }
- override void visit(const BlockStatement blockStatement) { mixin (tagAndAccept!"blockStatement"); }
- override void visit(const BodyStatement bodyStatement) { mixin (tagAndAccept!"bodyStatement"); }
- override void visit(const CaseStatement caseStatement) { mixin (tagAndAccept!"caseStatement"); }
- override void visit(const CastExpression castExpression) { mixin (tagAndAccept!"castExpression"); }
- override void visit(const CastQualifier castQualifier) { mixin (tagAndAccept!"castQualifier"); }
- override void visit(const Catches catches) { mixin (tagAndAccept!"catches"); }
- override void visit(const CmpExpression cmpExpression) { mixin (tagAndAccept!"cmpExpression"); }
- override void visit(const CompileCondition compileCondition) { mixin (tagAndAccept!"compileCondition"); }
- override void visit(const Constraint constraint) { mixin (tagAndAccept!"constraint"); }
- override void visit(const Constructor constructor) { mixin (tagAndAccept!"constructor"); }
- override void visit(const Declaration declaration) { mixin (tagAndAccept!"declaration"); }
- override void visit(const DeclarationOrStatement declarationOrStatement) { mixin (tagAndAccept!"declarationOrStatement"); }
- override void visit(const DeclarationsAndStatements declarationsAndStatements) { mixin (tagAndAccept!"declarationsAndStatements"); }
- override void visit(const DefaultStatement defaultStatement) { mixin (tagAndAccept!"defaultStatement"); }
- override void visit(const DeleteExpression deleteExpression) { mixin (tagAndAccept!"deleteExpression"); }
- override void visit(const DeleteStatement deleteStatement) { mixin (tagAndAccept!"deleteStatement"); }
- override void visit(const Destructor destructor) { mixin (tagAndAccept!"destructor"); }
- override void visit(const DoStatement doStatement) { mixin (tagAndAccept!"doStatement"); }
- override void visit(const EnumBody enumBody) { mixin (tagAndAccept!"enumBody"); }
- override void visit(const EponymousTemplateDeclaration eponymousTemplateDeclaration) { mixin (tagAndAccept!"eponymousTemplateDeclaration"); }
- override void visit(const Expression expression) { mixin (tagAndAccept!"expression"); }
- override void visit(const ExpressionStatement expressionStatement) { mixin (tagAndAccept!"expressionStatement"); }
- override void visit(const FinalSwitchStatement finalSwitchStatement) { mixin (tagAndAccept!"finalSwitchStatement"); }
- override void visit(const ForeachTypeList foreachTypeList) { mixin (tagAndAccept!"foreachTypeList"); }
- override void visit(const FunctionAttribute functionAttribute) { mixin (tagAndAccept!"functionAttribute"); }
- override void visit(const FunctionBody functionBody) { mixin (tagAndAccept!"functionBody"); }
- override void visit(const FunctionCallExpression functionCallExpression) { mixin (tagAndAccept!"functionCallExpression"); }
- override void visit(const IdentifierChain identifierChain) { mixin (tagAndAccept!"identifierChain"); }
- override void visit(const IdentifierList identifierList) { mixin (tagAndAccept!"identifierList"); }
- override void visit(const IdentifierOrTemplateChain identifierOrTemplateChain) { mixin (tagAndAccept!"identifierOrTemplateChain"); }
- override void visit(const IdentifierOrTemplateInstance identifierOrTemplateInstance) { mixin (tagAndAccept!"identifierOrTemplateInstance"); }
- override void visit(const ImportBindings importBindings) { mixin (tagAndAccept!"importBindings"); }
- override void visit(const ImportDeclaration importDeclaration) { mixin (tagAndAccept!"importDeclaration"); }
- override void visit(const ImportExpression importExpression) { mixin (tagAndAccept!"importExpression"); }
- override void visit(const IndexExpression indexExpression) { mixin (tagAndAccept!"indexExpression"); }
- override void visit(const InStatement inStatement) { mixin (tagAndAccept!"inStatement"); }
- override void visit(const KeyValuePairs keyValuePairs) { mixin (tagAndAccept!"keyValuePairs"); }
- override void visit(const MixinExpression mixinExpression) { mixin (tagAndAccept!"mixinExpression"); }
- override void visit(const MixinTemplateDeclaration mixinTemplateDeclaration) { mixin (tagAndAccept!"mixinTemplateDeclaration"); }
- override void visit(const MixinTemplateName mixinTemplateName) { mixin (tagAndAccept!"mixinTemplateName"); }
- override void visit(const ModuleDeclaration moduleDeclaration) { mixin (tagAndAccept!"moduleDeclaration"); }
- override void visit(const LastCatch lastCatch) { mixin (tagAndAccept!"lastCatch"); }
- override void visit(const NewExpression newExpression) { mixin (tagAndAccept!"newExpression"); }
- override void visit(const NonVoidInitializer nonVoidInitializer) { mixin (tagAndAccept!"nonVoidInitializer"); }
- override void visit(const Operands operands) { mixin (tagAndAccept!"operands"); }
- override void visit(const OrExpression orExpression) { mixin (tagAndAccept!"orExpression"); }
- override void visit(const OutStatement outStatement) { mixin (tagAndAccept!"outStatement"); } override void visit(const MixinDeclaration mixinDeclaration) { mixin (tagAndAccept!"mixinDeclaration"); }
- override void visit(const Parameters parameters) { mixin (tagAndAccept!"parameters"); }
- override void visit(const Postblit postblit) { mixin (tagAndAccept!"postblit"); } override void visit(const NewAnonClassExpression newAnonClassExpression) { mixin (tagAndAccept!"newAnonClassExpression"); }
- override void visit(const PragmaDeclaration pragmaDeclaration) { mixin (tagAndAccept!"pragmaDeclaration"); }
- override void visit(const PragmaExpression pragmaExpression) { mixin (tagAndAccept!"pragmaExpression"); }
- override void visit(const PrimaryExpression primaryExpression) { mixin (tagAndAccept!"primaryExpression"); }
- override void visit(const Register register) { mixin (tagAndAccept!"register"); }
- override void visit(const ScopeGuardStatement scopeGuardStatement) { mixin (tagAndAccept!"scopeGuardStatement"); }
- override void visit(const SharedStaticConstructor sharedStaticConstructor) { mixin (tagAndAccept!"sharedStaticConstructor"); }
- override void visit(const SharedStaticDestructor sharedStaticDestructor) { mixin (tagAndAccept!"sharedStaticDestructor"); }
- override void visit(const StatementNoCaseNoDefault statementNoCaseNoDefault) { mixin (tagAndAccept!"statementNoCaseNoDefault"); }
- override void visit(const StaticAssertDeclaration staticAssertDeclaration) { mixin (tagAndAccept!"staticAssertDeclaration"); }
- override void visit(const StaticAssertStatement staticAssertStatement) { mixin (tagAndAccept!"staticAssertStatement"); }
- override void visit(const StaticConstructor staticConstructor) { mixin (tagAndAccept!"staticConstructor"); }
- override void visit(const StaticDestructor staticDestructor) { mixin (tagAndAccept!"staticDestructor"); }
- override void visit(const StaticIfCondition staticIfCondition) { mixin (tagAndAccept!"staticIfCondition"); }
- override void visit(const StorageClass storageClass) { mixin (tagAndAccept!"storageClass"); }
- override void visit(const StructBody structBody) { mixin (tagAndAccept!"structBody"); }
- override void visit(const StructInitializer structInitializer) { mixin (tagAndAccept!"structInitializer"); }
- override void visit(const StructMemberInitializers structMemberInitializers) { mixin (tagAndAccept!"structMemberInitializers"); }
- override void visit(const StructMemberInitializer structMemberInitializer) { mixin (tagAndAccept!"structMemberInitializer"); }
- override void visit(const SwitchStatement switchStatement) { mixin (tagAndAccept!"switchStatement"); }
- override void visit(const Symbol symbol) { mixin (tagAndAccept!"symbol"); }
- override void visit(const SynchronizedStatement synchronizedStatement) { mixin (tagAndAccept!"synchronizedStatement"); } override void visit(const Statement statement) { mixin (tagAndAccept!"statement"); }
- override void visit(const TemplateArgumentList templateArgumentList) { mixin (tagAndAccept!"templateArgumentList"); }
- override void visit(const TemplateArguments templateArguments) { mixin (tagAndAccept!"templateArguments"); }
- override void visit(const TemplateArgument templateArgument) { mixin (tagAndAccept!"templateArgument"); }
- override void visit(const TemplateMixinExpression templateMixinExpression) { mixin (tagAndAccept!"templateMixinExpression"); }
- override void visit(const TemplateParameterList templateParameterList) { mixin (tagAndAccept!"templateParameterList"); }
- override void visit(const TemplateParameters templateParameters) { mixin (tagAndAccept!"templateParameters"); }
- override void visit(const TemplateParameter templateParameter) { mixin (tagAndAccept!"templateParameter"); }
- override void visit(const TemplateSingleArgument templateSingleArgument) { mixin (tagAndAccept!"templateSingleArgument"); }
- override void visit(const TemplateThisParameter templateThisParameter) { mixin (tagAndAccept!"templateThisParameter"); }
- override void visit(const TemplateTupleParameter templateTupleParameter) { mixin (tagAndAccept!"templateTupleParameter"); }
- override void visit(const TemplateTypeParameter templateTypeParameter) { mixin (tagAndAccept!"templateTypeParameter"); }
- override void visit(const TemplateValueParameterDefault templateValueParameterDefault) { mixin (tagAndAccept!"templateValueParameterDefault"); }
- override void visit(const TemplateValueParameter templateValueParameter) { mixin (tagAndAccept!"templateValueParameter"); }
- override void visit(const TernaryExpression ternaryExpression) { mixin (tagAndAccept!"ternaryExpression"); }
- override void visit(const ThrowStatement throwStatement) { mixin (tagAndAccept!"throwStatement"); }
- override void visit(const TryStatement tryStatement) { mixin (tagAndAccept!"tryStatement"); } override void visit(const TemplateInstance templateInstance) { mixin (tagAndAccept!"templateInstance"); }
- override void visit(const TypeofExpression typeofExpression) { mixin (tagAndAccept!"typeofExpression"); } override void visit(const TypeSpecialization typeSpecialization) { mixin (tagAndAccept!"typeSpecialization"); } override void visit(const TraitsExpression traitsExpression) { mixin (tagAndAccept!"traitsExpression"); }
- override void visit(const Vector vector) { mixin (tagAndAccept!"vector"); }
- override void visit(const VersionCondition versionCondition) { mixin (tagAndAccept!"versionCondition"); }
- override void visit(const VersionSpecification versionSpecification) { mixin (tagAndAccept!"versionSpecification"); }
- override void visit(const WhileStatement whileStatement) { mixin (tagAndAccept!"whileStatement"); }
- override void visit(const WithStatement withStatement) { mixin (tagAndAccept!"withStatement"); } override void visit(const TypeidExpression typeidExpression) { mixin (tagAndAccept!"typeidExpression"); }
+ override void visit(const AliasInitializer aliasInitializer) { mixin (tagAndAccept!"aliasInitializer"); }
+ override void visit(const AliasThisDeclaration aliasThisDeclaration) { mixin (tagAndAccept!"aliasThisDeclaration"); }
+ 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"); }
+ override void visit(const ArrayLiteral arrayLiteral) { mixin (tagAndAccept!"arrayLiteral"); }
+ override void visit(const ArrayMemberInitialization arrayMemberInitialization) { mixin (tagAndAccept!"arrayMemberInitialization"); }
+ override void visit(const AsmAddExp asmAddExp) { mixin (tagAndAccept!"asmAddExp"); }
+ override void visit(const AsmAndExp asmAndExp) { mixin (tagAndAccept!"asmAndExp"); }
+ override void visit(const AsmBrExp asmBrExp) { mixin (tagAndAccept!"asmBrExp"); }
+ override void visit(const AsmEqualExp asmEqualExp) { mixin (tagAndAccept!"asmEqualExp"); }
+ override void visit(const AsmExp asmExp) { mixin (tagAndAccept!"asmExp"); }
+ override void visit(const AsmLogAndExp asmLogAndExp) { mixin (tagAndAccept!"asmLogAndExp"); }
+ override void visit(const AsmLogOrExp asmLogOrExp) { mixin (tagAndAccept!"asmLogOrExp"); }
+ override void visit(const AsmMulExp asmMulExp) { mixin (tagAndAccept!"asmMulExp"); }
+ override void visit(const AsmOrExp asmOrExp) { mixin (tagAndAccept!"asmOrExp"); }
+ override void visit(const AsmPrimaryExp asmPrimaryExp) { mixin (tagAndAccept!"asmPrimaryExp"); }
+ override void visit(const AsmRelExp asmRelExp) { mixin (tagAndAccept!"asmRelExp"); }
+ override void visit(const AsmShiftExp asmShiftExp) { mixin (tagAndAccept!"asmShiftExp"); }
+ override void visit(const AsmStatement asmStatement) { mixin (tagAndAccept!"asmStatement"); }
+ override void visit(const AsmTypePrefix asmTypePrefix) { mixin (tagAndAccept!"asmTypePrefix"); }
+ override void visit(const AsmUnaExp asmUnaExp) { mixin (tagAndAccept!"asmUnaExp"); }
+ override void visit(const AsmXorExp asmXorExp) { mixin (tagAndAccept!"asmXorExp"); }
+ override void visit(const AssocArrayLiteral assocArrayLiteral) { mixin (tagAndAccept!"assocArrayLiteral"); }
+ override void visit(const AttributeDeclaration attributeDeclaration) { mixin (tagAndAccept!"attributeDeclaration"); }
+ override void visit(const BaseClass baseClass) { mixin (tagAndAccept!"baseClass"); }
+ override void visit(const BaseClassList baseClassList) { mixin (tagAndAccept!"baseClassList"); }
+ override void visit(const BlockStatement blockStatement) { mixin (tagAndAccept!"blockStatement"); }
+ override void visit(const BodyStatement bodyStatement) { mixin (tagAndAccept!"bodyStatement"); }
+ override void visit(const CaseStatement caseStatement) { mixin (tagAndAccept!"caseStatement"); }
+ override void visit(const CastExpression castExpression) { mixin (tagAndAccept!"castExpression"); }
+ override void visit(const CastQualifier castQualifier) { mixin (tagAndAccept!"castQualifier"); }
+ override void visit(const Catches catches) { mixin (tagAndAccept!"catches"); }
+ override void visit(const CmpExpression cmpExpression) { mixin (tagAndAccept!"cmpExpression"); }
+ override void visit(const CompileCondition compileCondition) { mixin (tagAndAccept!"compileCondition"); }
+ override void visit(const Constraint constraint) { mixin (tagAndAccept!"constraint"); }
+ override void visit(const Constructor constructor) { mixin (tagAndAccept!"constructor"); }
+ override void visit(const Declaration declaration) { mixin (tagAndAccept!"declaration"); }
+ override void visit(const DeclarationOrStatement declarationOrStatement) { mixin (tagAndAccept!"declarationOrStatement"); }
+ override void visit(const DeclarationsAndStatements declarationsAndStatements) { mixin (tagAndAccept!"declarationsAndStatements"); }
+ override void visit(const DefaultStatement defaultStatement) { mixin (tagAndAccept!"defaultStatement"); }
+ override void visit(const DeleteExpression deleteExpression) { mixin (tagAndAccept!"deleteExpression"); }
+ override void visit(const DeleteStatement deleteStatement) { mixin (tagAndAccept!"deleteStatement"); }
+ override void visit(const Destructor destructor) { mixin (tagAndAccept!"destructor"); }
+ override void visit(const DoStatement doStatement) { mixin (tagAndAccept!"doStatement"); }
+ override void visit(const EnumBody enumBody) { mixin (tagAndAccept!"enumBody"); }
+ override void visit(const EponymousTemplateDeclaration eponymousTemplateDeclaration) { mixin (tagAndAccept!"eponymousTemplateDeclaration"); }
+ override void visit(const Expression expression) { mixin (tagAndAccept!"expression"); }
+ override void visit(const ExpressionStatement expressionStatement) { mixin (tagAndAccept!"expressionStatement"); }
+ override void visit(const FinalSwitchStatement finalSwitchStatement) { mixin (tagAndAccept!"finalSwitchStatement"); }
+ override void visit(const ForeachTypeList foreachTypeList) { mixin (tagAndAccept!"foreachTypeList"); }
+ override void visit(const FunctionAttribute functionAttribute) { mixin (tagAndAccept!"functionAttribute"); }
+ override void visit(const FunctionBody functionBody) { mixin (tagAndAccept!"functionBody"); }
+ override void visit(const FunctionCallExpression functionCallExpression) { mixin (tagAndAccept!"functionCallExpression"); }
+ override void visit(const IdentifierChain identifierChain) { mixin (tagAndAccept!"identifierChain"); }
+ override void visit(const IdentifierList identifierList) { mixin (tagAndAccept!"identifierList"); }
+ override void visit(const IdentifierOrTemplateChain identifierOrTemplateChain) { mixin (tagAndAccept!"identifierOrTemplateChain"); }
+ override void visit(const IdentifierOrTemplateInstance identifierOrTemplateInstance) { mixin (tagAndAccept!"identifierOrTemplateInstance"); }
+ override void visit(const ImportBindings importBindings) { mixin (tagAndAccept!"importBindings"); }
+ override void visit(const ImportDeclaration importDeclaration) { mixin (tagAndAccept!"importDeclaration"); }
+ override void visit(const ImportExpression importExpression) { mixin (tagAndAccept!"importExpression"); }
+ override void visit(const IndexExpression indexExpression) { mixin (tagAndAccept!"indexExpression"); }
+ override void visit(const InStatement inStatement) { mixin (tagAndAccept!"inStatement"); }
+ override void visit(const KeyValuePairs keyValuePairs) { mixin (tagAndAccept!"keyValuePairs"); }
+ override void visit(const MixinExpression mixinExpression) { mixin (tagAndAccept!"mixinExpression"); }
+ override void visit(const MixinTemplateDeclaration mixinTemplateDeclaration) { mixin (tagAndAccept!"mixinTemplateDeclaration"); }
+ override void visit(const MixinTemplateName mixinTemplateName) { mixin (tagAndAccept!"mixinTemplateName"); }
+ override void visit(const ModuleDeclaration moduleDeclaration) { mixin (tagAndAccept!"moduleDeclaration"); }
+ override void visit(const LastCatch lastCatch) { mixin (tagAndAccept!"lastCatch"); }
+ override void visit(const NewExpression newExpression) { mixin (tagAndAccept!"newExpression"); }
+ override void visit(const NonVoidInitializer nonVoidInitializer) { mixin (tagAndAccept!"nonVoidInitializer"); }
+ override void visit(const Operands operands) { mixin (tagAndAccept!"operands"); }
+ override void visit(const OrExpression orExpression) { mixin (tagAndAccept!"orExpression"); }
+ override void visit(const OutStatement outStatement) { mixin (tagAndAccept!"outStatement"); } override void visit(const MixinDeclaration mixinDeclaration) { mixin (tagAndAccept!"mixinDeclaration"); }
+ override void visit(const Parameters parameters) { mixin (tagAndAccept!"parameters"); }
+ override void visit(const Postblit postblit) { mixin (tagAndAccept!"postblit"); } override void visit(const NewAnonClassExpression newAnonClassExpression) { mixin (tagAndAccept!"newAnonClassExpression"); }
+ override void visit(const PragmaDeclaration pragmaDeclaration) { mixin (tagAndAccept!"pragmaDeclaration"); }
+ override void visit(const PragmaExpression pragmaExpression) { mixin (tagAndAccept!"pragmaExpression"); }
+ override void visit(const PrimaryExpression primaryExpression) { mixin (tagAndAccept!"primaryExpression"); }
+ override void visit(const Register register) { mixin (tagAndAccept!"register"); }
+ override void visit(const ScopeGuardStatement scopeGuardStatement) { mixin (tagAndAccept!"scopeGuardStatement"); }
+ override void visit(const SharedStaticConstructor sharedStaticConstructor) { mixin (tagAndAccept!"sharedStaticConstructor"); }
+ override void visit(const SharedStaticDestructor sharedStaticDestructor) { mixin (tagAndAccept!"sharedStaticDestructor"); }
+ override void visit(const StatementNoCaseNoDefault statementNoCaseNoDefault) { mixin (tagAndAccept!"statementNoCaseNoDefault"); }
+ override void visit(const StaticAssertDeclaration staticAssertDeclaration) { mixin (tagAndAccept!"staticAssertDeclaration"); }
+ override void visit(const StaticAssertStatement staticAssertStatement) { mixin (tagAndAccept!"staticAssertStatement"); }
+ override void visit(const StaticConstructor staticConstructor) { mixin (tagAndAccept!"staticConstructor"); }
+ override void visit(const StaticDestructor staticDestructor) { mixin (tagAndAccept!"staticDestructor"); }
+ override void visit(const StaticIfCondition staticIfCondition) { mixin (tagAndAccept!"staticIfCondition"); }
+ override void visit(const StorageClass storageClass) { mixin (tagAndAccept!"storageClass"); }
+ override void visit(const StructBody structBody) { mixin (tagAndAccept!"structBody"); }
+ override void visit(const StructInitializer structInitializer) { mixin (tagAndAccept!"structInitializer"); }
+ override void visit(const StructMemberInitializers structMemberInitializers) { mixin (tagAndAccept!"structMemberInitializers"); }
+ override void visit(const StructMemberInitializer structMemberInitializer) { mixin (tagAndAccept!"structMemberInitializer"); }
+ override void visit(const SwitchStatement switchStatement) { mixin (tagAndAccept!"switchStatement"); }
+ override void visit(const Symbol symbol) { mixin (tagAndAccept!"symbol"); }
+ override void visit(const SynchronizedStatement synchronizedStatement) { mixin (tagAndAccept!"synchronizedStatement"); } override void visit(const Statement statement) { mixin (tagAndAccept!"statement"); }
+ override void visit(const TemplateArgumentList templateArgumentList) { mixin (tagAndAccept!"templateArgumentList"); }
+ override void visit(const TemplateArguments templateArguments) { mixin (tagAndAccept!"templateArguments"); }
+ override void visit(const TemplateArgument templateArgument) { mixin (tagAndAccept!"templateArgument"); }
+ override void visit(const TemplateMixinExpression templateMixinExpression) { mixin (tagAndAccept!"templateMixinExpression"); }
+ override void visit(const TemplateParameterList templateParameterList) { mixin (tagAndAccept!"templateParameterList"); }
+ override void visit(const TemplateParameters templateParameters) { mixin (tagAndAccept!"templateParameters"); }
+ override void visit(const TemplateParameter templateParameter) { mixin (tagAndAccept!"templateParameter"); }
+ override void visit(const TemplateSingleArgument templateSingleArgument) { mixin (tagAndAccept!"templateSingleArgument"); }
+ override void visit(const TemplateThisParameter templateThisParameter) { mixin (tagAndAccept!"templateThisParameter"); }
+ override void visit(const TemplateTupleParameter templateTupleParameter) { mixin (tagAndAccept!"templateTupleParameter"); }
+ override void visit(const TemplateTypeParameter templateTypeParameter) { mixin (tagAndAccept!"templateTypeParameter"); }
+ override void visit(const TemplateValueParameterDefault templateValueParameterDefault) { mixin (tagAndAccept!"templateValueParameterDefault"); }
+ override void visit(const TemplateValueParameter templateValueParameter) { mixin (tagAndAccept!"templateValueParameter"); }
+ override void visit(const TernaryExpression ternaryExpression) { mixin (tagAndAccept!"ternaryExpression"); }
+ override void visit(const ThrowStatement throwStatement) { mixin (tagAndAccept!"throwStatement"); }
+ override void visit(const TryStatement tryStatement) { mixin (tagAndAccept!"tryStatement"); } override void visit(const TemplateInstance templateInstance) { mixin (tagAndAccept!"templateInstance"); }
+ override void visit(const TypeofExpression typeofExpression) { mixin (tagAndAccept!"typeofExpression"); } override void visit(const TypeSpecialization typeSpecialization) { mixin (tagAndAccept!"typeSpecialization"); } override void visit(const TraitsExpression traitsExpression) { mixin (tagAndAccept!"traitsExpression"); }
+ override void visit(const Vector vector) { mixin (tagAndAccept!"vector"); }
+ override void visit(const VersionCondition versionCondition) { mixin (tagAndAccept!"versionCondition"); }
+ override void visit(const VersionSpecification versionSpecification) { mixin (tagAndAccept!"versionSpecification"); }
+ override void visit(const WhileStatement whileStatement) { mixin (tagAndAccept!"whileStatement"); }
+ override void visit(const WithStatement withStatement) { mixin (tagAndAccept!"withStatement"); } override void visit(const TypeidExpression typeidExpression) { mixin (tagAndAccept!"typeidExpression"); }
- alias visit = ASTVisitor.visit;
+ alias visit = ASTVisitor.visit;
- private static string xmlEscape(string s)
- {
- return s.translate(['<' : "<", '>' : ">", '&' : "&"]);
- }
+ private static string xmlEscape(string s)
+ {
+ return s.translate(['<' : "<", '>' : ">", '&' : "&"]);
+ }
- private static string xmlAttributeEscape(string s)
- {
- return s.translate(['<' : "<", '>' : ">", '&' : "&",
- '\"' : """, '\'' : "'"]);
- }
+ private static string xmlAttributeEscape(string s)
+ {
+ return s.translate(['<' : "<", '>' : ">", '&' : "&",
+ '\"' : """, '\'' : "'"]);
+ }
private void writeDdoc(string comment)
{
@@ -1120,6 +1094,6 @@ class XMLPrinter : ASTVisitor
output.writeln("", xmlEscape(comment), "");
}
- File output;
+ File output;
}
diff --git a/src/ctags.d b/src/ctags.d
index 9172352..8a896e4 100644
--- a/src/ctags.d
+++ b/src/ctags.d
@@ -72,9 +72,7 @@ class CTagsPrinter : ASTVisitor
override void visit(const TemplateDeclaration dec)
{
- auto name = dec.eponymousTemplateDeclaration is null ? dec.name
- : dec.eponymousTemplateDeclaration.name;
- tagLines ~= "%s\t%s\t%d;\"\tT%s\n".format(name.text, fileName, name.line, context);
+ tagLines ~= "%s\t%s\t%d;\"\tT%s\n".format(dec.name.text, fileName, dec.name.line, context);
auto c = context;
context = "\ttemplate:" ~ dec.name.text;
dec.accept(this);
diff --git a/src/main.d b/src/main.d
index 0c16233..b3ba04e 100644
--- a/src/main.d
+++ b/src/main.d
@@ -175,7 +175,7 @@ int run(string[] args)
}
else if (syntaxCheck)
{
- .syntaxCheck(expandArgs(args));
+ return .syntaxCheck(expandArgs(args));
}
else
{