diff --git a/dsymbol b/dsymbol
index 2664939..84ed30c 160000
--- a/dsymbol
+++ b/dsymbol
@@ -1 +1 @@
-Subproject commit 26649393504a8617760f9c7fd99b31f0362f095e
+Subproject commit 84ed30c0786c8f1f1954c79152820b79aebece13
diff --git a/libdparse b/libdparse
index d928584..4d87656 160000
--- a/libdparse
+++ b/libdparse
@@ -1 +1 @@
-Subproject commit d928584e9e05bb003d1e378aa921899010b0a670
+Subproject commit 4d876562b4862a98bf1b6b6bf4fd07af96506a54
diff --git a/src/analysis/unmodified.d b/src/analysis/unmodified.d
index 68db453..5d87749 100644
--- a/src/analysis/unmodified.d
+++ b/src/analysis/unmodified.d
@@ -248,9 +248,9 @@ private:
if (storageClass.token == tok!"enum")
return true;
}
- foreach (attr; dec.attributes)
+ foreach (sc; dec.storageClasses)
{
- if (attr.attribute.type == tok!"immutable" || attr.attribute.type == tok!"const")
+ if (sc.token == tok!"immutable" || sc.token == tok!"const")
return true;
}
if (dec.type !is null)
diff --git a/src/astprinter.d b/src/astprinter.d
index d755e2f..e447fa9 100644
--- a/src/astprinter.d
+++ b/src/astprinter.d
@@ -11,946 +11,951 @@ import std.string;
import std.array;
/**
- * AST visitor that outputs an XML representation of the AST to its file.
- */
+* AST visitor that outputs an XML representation of the AST to its file.
+*/
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 AliasDeclaration aliasDeclaration)
- {
- output.writeln("");
- writeDdoc(aliasDeclaration.comment);
- aliasDeclaration.accept(this);
- 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 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)
- {
- 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 AssignExpression assignExpression)
- {
- if (assignExpression.expression 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 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 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 Catch catch_)
- {
- output.writeln("");
- catch_.accept(this);
- output.writeln("");
- }
-
- override void visit(const ClassDeclaration classDec)
- {
- output.writeln("");
- writeName(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.falseDeclarations.length > 0)
- {
- output.writeln("");
- foreach (dec; conditionalDeclaration.falseDeclarations)
- visit(dec);
- 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 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 Declarator declarator)
- {
- output.writeln("");
- writeName(declarator.name.text);
- writeDdoc(declarator.comment);
- declarator.accept(this);
- output.writeln("");
- }
-
- override void visit(const Deprecated deprecated_)
- {
- if (deprecated_.stringLiterals.length > 0)
- {
- output.writeln("");
- foreach (literal; deprecated_.stringLiterals)
- output.writeln("", xmlEscape(literal.text), "");
- output.writeln("");
- }
- else
- output.writeln("");
- }
-
- override void visit(const EnumDeclaration enumDec)
- {
- output.writeln("");
- writeDdoc(enumDec.comment);
- if (enumDec.name.type == tok!"identifier")
- 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("");
- writeDdoc(enumMem.comment);
- 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 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 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 FunctionDeclaration functionDec)
- {
- output.writeln("");
- writeName(functionDec.name.text);
- writeDdoc(functionDec.comment);
- 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 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 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("");
- ifStatement.thenStatement.accept(this);
- 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 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 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("");
- writeName(interfaceDec.name.text);
- writeDdoc(interfaceDec.comment);
- interfaceDec.accept(this);
- output.writeln("");
- }
-
- override void visit(const Invariant invariant_)
- {
- output.writeln("");
- writeDdoc(invariant_.comment);
- 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 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 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 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 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 Parameter param)
- {
- output.writeln("");
- if (param.name.type == tok!"identifier")
- writeName(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 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 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 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 StructDeclaration structDec)
- {
- output.writeln("");
- writeName(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("");
- }
-
- 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("");
- }
-
- override void visit(const TemplateDeclaration templateDeclaration)
- {
- writeDdoc(templateDeclaration.comment);
- output.writeln("");
- writeName(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 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 TypeSuffix typeSuffix)
- {
- if (typeSuffix.star != tok!"")
- 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);
- }
- else
- {
- 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!"")
- writeName(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 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 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 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 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)
+ {
+ 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 AssignExpression assignExpression)
+ {
+ if (assignExpression.expression 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 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("");
+ output.writeln("");
+ foreach(sc; autoDec.storageClasses)
+ visit(sc);
+ 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 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 ClassDeclaration classDec)
+ {
+ output.writeln("");
+ writeName(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.falseDeclarations.length > 0)
+ {
+ output.writeln("");
+ foreach (dec; conditionalDeclaration.falseDeclarations)
+ visit(dec);
+ 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 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 Declarator declarator)
+ {
+ output.writeln("");
+ writeName(declarator.name.text);
+ writeDdoc(declarator.comment);
+ declarator.accept(this);
+ output.writeln("");
+ }
+
+ override void visit(const Deprecated deprecated_)
+ {
+ if (deprecated_.stringLiterals.length > 0)
+ {
+ output.writeln("");
+ foreach (literal; deprecated_.stringLiterals)
+ output.writeln("", xmlEscape(literal.text), "");
+ output.writeln("");
+ }
+ else
+ output.writeln("");
+ }
+
+ override void visit(const EnumDeclaration enumDec)
+ {
+ output.writeln("");
+ writeDdoc(enumDec.comment);
+ if (enumDec.name.type == tok!"identifier")
+ 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("");
+ writeDdoc(enumMem.comment);
+ 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 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 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 FunctionDeclaration functionDec)
+ {
+ output.writeln("");
+ writeName(functionDec.name.text);
+ writeDdoc(functionDec.comment);
+ 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 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 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("");
+ ifStatement.thenStatement.accept(this);
+ 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 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 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("");
+ writeName(interfaceDec.name.text);
+ writeDdoc(interfaceDec.comment);
+ interfaceDec.accept(this);
+ output.writeln("");
+ }
+
+ override void visit(const Invariant invariant_)
+ {
+ output.writeln("");
+ writeDdoc(invariant_.comment);
+ 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 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 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 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 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 Parameter param)
+ {
+ output.writeln("");
+ if (param.name.type == tok!"identifier")
+ writeName(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 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 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 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 StructDeclaration structDec)
+ {
+ output.writeln("");
+ writeName(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("");
+ }
+
+ 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("");
+ }
+
+ override void visit(const TemplateDeclaration templateDeclaration)
+ {
+ writeDdoc(templateDeclaration.comment);
+ output.writeln("");
+ writeName(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 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 TypeSuffix typeSuffix)
+ {
+ if (typeSuffix.star != tok!"")
+ 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);
+ }
+ else
+ {
+ 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!"")
+ writeName(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 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 Index index)
{
@@ -970,162 +975,162 @@ class XMLPrinter : ASTVisitor
output.writeln("");
}
- 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"); }
- 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 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"); }
+ 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 writeName(string name)
- {
- output.write("", name, "");
- }
+ private void writeName(string name)
+ {
+ output.write("", name, "");
+ }
- private void writeDdoc(string comment)
- {
- if (comment is null) return;
- output.writeln("", xmlEscape(comment), "");
- }
+ private void writeDdoc(string comment)
+ {
+ if (comment is null) return;
+ output.writeln("", xmlEscape(comment), "");
+ }
- /**
- * File that output is written to.
- */
- File output;
+ /**
+ * File that output is written to.
+ */
+ File output;
}
private:
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 ~ `>");`;
}