D-Scanner/std/d/ast.d

2007 lines
41 KiB
D
Executable File

// Written in the D programming language.
/**
* This module defines an Abstract Syntax Tree for the D language
*
* Examples:
* ---
* // TODO
* ---
*
* Copyright: Brian Schott 2013
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt Boost, License 1.0)
* Authors: Brian Schott
* Source: $(PHOBOSSRC std/d/_ast.d)
*/
module std.d.ast;
import std.d.lexer;
/**
* Implements the $(LINK2 http://en.wikipedia.org/wiki/Visitor_pattern, Visitor Pattern)
* for the various AST classes
*/
abstract class ASTVisitor
{
/** */ void visit(AddExpression addExpression) {}
/** */ void visit(AliasDeclaration aliasDeclaration) {}
/** */ void visit(AliasInitializer aliasInitializer) {}
/** */ void visit(AliasThisDeclaration aliasThisDeclaration) {}
/** */ void visit(AlignAttribute alignAttribute) {}
/** */ void visit(AndAndExpression andAndExpression) {}
/** */ void visit(AndExpression andExpression) {}
/** */ void visit(ArgumentList argumentList) {}
/** */ void visit(Arguments arguments) {}
/** */ void visit(ArrayInitializer arrayInitializer) {}
/** */ void visit(ArrayLiteral arrayLiteral) {}
/** */ void visit(ArrayMemberInitialization arrayMemberInitialization) {}
/** */ void visit(ArrayMemberInitializations arrayMemberInitializations) {}
/** */ void visit(AsmAddExp asmAddExp) {}
/** */ void visit(AsmAndExp asmAndExp) {}
/** */ void visit(AsmBrExp asmBrExp) {}
/** */ void visit(AsmEqualExp asmEqualExp) {}
/** */ void visit(AsmExp asmExp) {}
/** */ void visit(AsmInstruction asmInstruction) {}
/** */ void visit(AsmLogAndExp asmLogAndExp) {}
/** */ void visit(AsmLogOrExp asmLogOrExp) {}
/** */ void visit(AsmMulExp asmMulExp) {}
/** */ void visit(AsmOrExp asmOrExp) {}
/** */ void visit(AsmPrimaryExp asmPrimaryExp) {}
/** */ void visit(AsmRelExp asmRelExp) {}
/** */ void visit(AsmShiftExp asmShiftExp) {}
/** */ void visit(AsmStatement asmStatement) {}
/** */ void visit(AsmTypePrefix asmTypePrefix) {}
/** */ void visit(AsmUnaExp asmUnaExp) {}
/** */ void visit(AsmXorExp asmXorExp) {}
/** */ void visit(AssertExpression assertExpression) {}
/** */ void visit(AssertStatement assertStatement) {}
/** */ void visit(AssignExpression assignExpression) {}
/** */ void visit(AssignStatement assignStatement) {}
/** */ void visit(AssocArrayLiteral assocArrayLiteral) {}
/** */ void visit(AtAttribute atAttribute) {}
/** */ void visit(Attribute attribute) {}
/** */ void visit(AttributedDeclaration attributedDeclaration) {}
/** */ void visit(AutoDeclaration autoDeclaration) {}
/** */ void visit(BlockStatement blockStatement) {}
/** */ void visit(BodyStatement bodyStatement) {}
/** */ void visit(BreakStatement breakStatement) {}
/** */ void visit(BasicType builtinType) {}
/** */ void visit(CaseRangeStatement caseRangeStatement) {}
/** */ void visit(CaseStatement caseStatement) {}
/** */ void visit(CastExpression castExpression) {}
/** */ void visit(CastQualifier castQualifier) {}
/** */ void visit(Catch catch_) {}
/** */ void visit(Catches catches) {}
/** */ void visit(ClassBody classBody) {}
/** */ void visit(ClassDeclaration classDeclaration) {}
/** */ void visit(CmpExpression cmpExpression) {}
/** */ void visit(CompileCondition compileCondition) {}
/** */ void visit(ConditionalDeclaration conditionalDeclaration) {}
/** */ void visit(ConditionalStatement conditionalStatement) {}
/** */ void visit(Constraint constraint) {}
/** */ void visit(Constructor constructor) {}
/** */ void visit(ContinueStatement continueStatement) {}
/** */ void visit(DebugCondition debugCondition) {}
/** */ void visit(DebugSpecification debugSpecification) {}
/** */ void visit(Declaration declaration) {}
/** */ void visit(DeclarationsAndStatements declarationsAndStatements) {}
/** */ void visit(Declarator declarator) {}
/** */ void visit(DeclaratorSuffix declaratorSuffix) {}
/** */ void visit(DefaultStatement defaultStatement) {}
/** */ void visit(DeleteExpression deleteExpression) {}
/** */ void visit(DeleteStatement deleteStatement) {}
/** */ void visit(Deprecated deprecated_) {}
/** */ void visit(Destructor destructor) {}
/** */ void visit(DoStatement doStatement) {}
/** */ void visit(EnumBody enumBody) {}
/** */ void visit(EnumDeclaration enumDeclaration) {}
/** */ void visit(EnumMember enumMember) {}
/** */ void visit(EqualExpression equalExpression) {}
/** */ void visit(Expression expression) {}
/** */ void visit(FinalSwitchStatement finalSwitchStatement) {}
/** */ void visit(Finally finally_) {}
/** */ void visit(ForStatement forStatement) {}
/** */ void visit(ForeachRangeStatement foreachRangeStatement) {}
/** */ void visit(ForeachStatement foreachStatement) {}
/** */ void visit(ForeachType foreachType) {}
/** */ void visit(ForeachTypeList foreachTypeList) {}
/** */ void visit(FunctionAttribute functionAttribute) {}
/** */ void visit(FunctionBody functionBody) {}
/** */ void visit(FunctionCallExpression functionCallExpression) {}
/** */ void visit(FunctionCallStatement functionCallStatement) {}
/** */ void visit(FunctionDeclaration functionDeclaration) {}
/** */ void visit(FunctionLiteralExpression functionLiteralExpression) {}
/** */ void visit(GotoStatement gotoStatement) {}
/** */ void visit(IdentifierChain identifierChain) {}
/** */ void visit(IdentifierList identifierList) {}
/** */ void visit(IdentifierOrTemplateChain identifierOrTemplateChain) {}
/** */ void visit(IdentifierOrTemplateInstance identifierOrTemplateInstance) {}
/** */ void visit(IdentityExpression identityExpression) {}
/** */ void visit(IfStatement ifStatement) {}
/** */ void visit(ImportBind importBind) {}
/** */ void visit(ImportBindings importBindings) {}
/** */ void visit(ImportDeclaration importDeclaration) {}
/** */ void visit(ImportExpression importExpression) {}
/** */ void visit(ImportList importList) {}
/** */ void visit(InExpression inExpression) {}
/** */ void visit(InStatement inStatement) {}
/** */ void visit(Initialize initialize) {}
/** */ void visit(Initializer initializer) {}
/** */ void visit(InterfaceDeclaration interfaceDeclaration) {}
/** */ void visit(Invariant invariant_) {}
/** */ void visit(IsExpression isExpression) {}
/** */ void visit(KeyValuePair keyValuePair) {}
/** */ void visit(KeyValuePairs keyValuePairs) {}
/** */ void visit(LabeledStatement labeledStatement) {}
/** */ void visit(LambdaExpression lambdaExpression) {}
/** */ void visit(LastCatch lastCatch) {}
/** */ void visit(LinkageAttribute linkageAttribute) {}
/** */ void visit(MemberFunctionAttribute memberFunctionAttribute) {}
/** */ void visit(MixinDeclaration mixinDeclaration) {}
/** */ void visit(MixinExpression mixinExpression) {}
/** */ void visit(MixinTemplateName mixinTemplateName) {}
/** */ void visit(Module module_) {}
/** */ void visit(ModuleDeclaration moduleDeclaration) {}
/** */ void visit(MulExpression mulExpression) {}
/** */ void visit(NewAnonClassExpression newAnonClassExpression) {}
/** */ void visit(NewExpression newExpression) {}
/** */ void visit(NonEmptyStatement nonEmptyStatement) {}
/** */ void visit(NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault) {}
/** */ void visit(NonVoidInitializer nonVoidInitializer) {}
/** */ void visit(Opcode opcode) {}
/** */ void visit(Operand operand) {}
/** */ void visit(Operands operands) {}
/** */ void visit(OrExpression orExpression) {}
/** */ void visit(OrOrExpression orOrExpression) {}
/** */ void visit(OutStatement outStatement) {}
/** */ void visit(Parameter parameter) {}
/** */ void visit(ParameterAttribute parameterAttribute) {}
/** */ void visit(Parameters parameters) {}
/** */ void visit(PostIncDecExpression postIncDecExpression) {}
/** */ void visit(PowExpression powExpression) {}
/** */ void visit(PragmaDeclaration pragmaDeclaration) {}
/** */ void visit(PragmaExpression pragmaExpression) {}
/** */ void visit(PreIncDecExpression preIncDecExpression) {}
/** */ void visit(PrimaryExpression primaryExpression) {}
/** */ void visit(ProtectionAttribute protectionAttribute) {}
/** */ void visit(Register register) {}
/** */ void visit(RelExpression relExpression) {}
/** */ void visit(ReturnStatement returnStatement) {}
/** */ void visit(ScopeGuardStatement scopeGuardStatement) {}
/** */ void visit(SharedStaticConstructor sharedStaticConstructor) {}
/** */ void visit(SharedStaticDestructor sharedStaticDestructor) {}
/** */ void visit(ShiftExpression shiftExpression) {}
/** */ void visit(SingleImport singleImport) {}
/** */ void visit(Statement statement) {}
/** */ void visit(StatementNoCaseNoDefault statementNoCaseNoDefault) {}
/** */ void visit(StaticAssertDeclaration staticAssertDeclaration) {}
/** */ void visit(StaticAssertStatement staticAssertStatement) {}
/** */ void visit(StaticConstructor staticConstructor) {}
/** */ void visit(StaticDestructor staticDestructor) {}
/** */ void visit(StaticIfCondition staticIfCondition) {}
/** */ void visit(StorageClass storageClass) {}
/** */ void visit(StructBody structBody) {}
/** */ void visit(StructDeclaration structDeclaration) {}
/** */ void visit(StructInitializer structInitializer) {}
/** */ void visit(StructMemberInitializer structMemberInitializer) {}
/** */ void visit(StructMemberInitializers structMemberInitializers) {}
/** */ void visit(SwitchBody switchBody) {}
/** */ void visit(SwitchStatement switchStatement) {}
/** */ void visit(Symbol symbol) {}
/** */ void visit(SynchronizedStatement synchronizedStatement) {}
/** */ void visit(TemplateAliasParameter templateAliasParameter) {}
/** */ void visit(TemplateArgument templateArgument) {}
/** */ void visit(TemplateArgumentList templateArgumentList) {}
/** */ void visit(TemplateArguments templateArguments) {}
/** */ void visit(TemplateDeclaration templateDeclaration) {}
/** */ void visit(TemplateInstance templateInstance) {}
/** */ void visit(TemplateMixinStatement templateMixinStatement) {}
/** */ void visit(TemplateParameter templateParameter) {}
/** */ void visit(TemplateParameterList templateParameterList) {}
/** */ void visit(TemplateParameters templateParameters) {}
/** */ void visit(TemplateSingleArgument templateSingleArgument) {}
/** */ void visit(TemplateThisParameter templateThisParameter) {}
/** */ void visit(TemplateTupleParameter templateTupleParameter) {}
/** */ void visit(TemplateTypeParameter templateTypeParameter) {}
/** */ void visit(TemplateValueParameter templateValueParameter) {}
/** */ void visit(TemplateValueParameterDefault templateValueParameterDefault) {}
/** */ void visit(TernaryExpression ternaryExpression) {}
/** */ void visit(ThrowStatement throwStatement) {}
/** */ void visit(TraitsArgument traitsArgument) {}
/** */ void visit(TraitsExpression traitsExpression) {}
/** */ void visit(TryStatement tryStatement) {}
/** */ void visit(Type type) {}
/** */ void visit(Type2 type2) {}
/** */ void visit(Type3 type3) {}
/** */ void visit(TypeConstructor typeConstructor) {}
/** */ void visit(TypeConstructors typeConstructors) {}
/** */ void visit(TypeSpecialization typeSpecialization) {}
/** */ void visit(TypeSuffix typeSuffix) {}
/** */ void visit(TypeidExpression typeidExpression) {}
/** */ void visit(TypeofExpression typeofExpression) {}
/** */ void visit(UnaryExpression unaryExpression) {}
/** */ void visit(UnionDeclaration unionDeclaration) {}
/** */ void visit(Unittest unittest_) {}
/** */ void visit(VariableDeclaration variableDeclaration) {}
/** */ void visit(VersionCondition versionCondition) {}
/** */ void visit(VersionSpecification versionSpecification) {}
/** */ void visit(WhileStatement whileStatement) {}
/** */ void visit(WithStatement withStatement) {}
/** */ void visit(XorExpression xorExpression) {}
}
interface ASTNode
{
void accept(ASTVisitor visitor);
}
immutable string OVERRIDE_DEFAULT_ACCEPT = q{override void accept(ASTVisitor visitor) { visitor.visit(this); }};
immutable string DEFAULT_ACCEPT = q{void accept(ASTVisitor visitor) { visitor.visit(this); }};
immutable string SHIFT_SHIFT_BODY = q{
Token operator;
ShiftExpression left;
ShiftExpression right;
};
class AddExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TokenType operator;
AddExpression left;
MulExpression right;
}
class AliasDeclaration : Declaration
{
public:
mixin(OVERRIDE_DEFAULT_ACCEPT);
Type type;
Declarator declarator;
AliasInitializer[] initializations;
}
class AliasInitializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Type type;
}
class AliasThisDeclaration : Declaration
{
public:
mixin(OVERRIDE_DEFAULT_ACCEPT);
Token identifier;
}
class AlignAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token intLiteral;
}
class AndAndExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AndAndExpression left;
OrExpression right;
}
class AndExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AndExpression andExpression;
ShiftExpression shiftExpression;
}
class ArgumentList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression[] arguments;
}
class Arguments : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ArgumentList argumentList;
}
class ArrayInitializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ArrayMemberInitializations arrayMemberInitializations;
}
class ArrayLiteral : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ArgumentList argumentList;
}
class ArrayMemberInitialization : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
NonVoidInitializer nonVoidInitializer;
}
class ArrayMemberInitializations : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ArrayMemberInitialization[] arrayMemberInitializations;
}
class AsmAddExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token operator;
AsmMulExp left;
AsmMulExp right;
}
class AsmAndExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmEqualExp left;
AsmEqualExp right;
}
class AsmBrExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmBrExp asmBrExp;
AsmEqualExp asmEqualExp;
AsmUnaExp asmUnaExp;
}
class AsmEqualExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmRelExp left;
AsmRelExp right;
Token operator;
}
class AsmExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmLogOrExp left;
AsmExp middle;
AsmExp right;
}
class AsmInstruction : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifierOrInteger;
bool hasAlign;
AsmExp asmExp;
Opcode opcode;
Operands operands;
}
class AsmLogAndExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmOrExp left;
AsmOrExp right;
}
class AsmLogOrExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmLogAndExp left;
AsmLogAndExp right;
}
class AsmMulExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmBrExp left;
AsmBrExp right;
Token operator;
}
class AsmOrExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmXorExp left;
AsmXorExp right;
}
class AsmPrimaryExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
IdentifierChain identifierChain;
Register register;
Token token;
}
class AsmRelExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmShiftExp left;
AsmShiftExp right;
Token operator;
}
class AsmShiftExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmAddExp left;
AsmAddExp right;
Token operator;
}
class AsmStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmInstruction[] asmInstructions;
}
class AsmTypePrefix : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token left;
Token right;
}
class AsmUnaExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmTypePrefix asmTypePrefix;
AsmExp asmExp;
Token prefix;
AsmPrimaryExp asmPrimaryExp;
AsmUnaExp asmUnaExp;
}
class AsmXorExp : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmAndExp left;
AsmAndExp right;
}
class AssertExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assertion;
AssignExpression message;
}
class AssertStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssertExpression assertExpression;
}
class AssignExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TernaryExpression ternaryExpression;
AssignExpression assignExpression;
Token operator;
}
class AssignStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
PreIncDecExpression preIncDecExpression;
PostIncDecExpression postIncDecExpression;
UnaryExpression[] unaryExpressions;
AssignExpression[] assignExpressions;
Token[] assignOperators;
}
class AssocArrayLiteral : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
KeyValuePairs keyValuePairs;
}
class AtAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionCallExpression functionCallExpression;
ArgumentList argumentList;
Token identifier;
}
class AttributedDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Declaration[] declarations;
}
class Attribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
LinkageAttribute linkageAttribute;
AlignAttribute alignAttribute;
PragmaExpression pragmaExpression;
Deprecated deprecated_;
ProtectionAttribute protectionAttribute;
AtAttribute atAttribute;
Token attribute;
}
class AutoDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
StorageClass storageClass;
Token[] identifiers;
Initializer[] initializers;
}
class BlockStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
DeclarationsAndStatements declarationsAndStatements;
}
class BodyStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
DeclarationsAndStatements declarationsAndStatements;
}
class BreakStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
bool hasIdentifier;
}
class BasicType : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TokenType type;
}
class CaseRangeStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression low;
AssignExpression high;
DeclarationsAndStatements declarationsAndStatements;
}
class CaseStatement: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ArgumentList argumentList;
DeclarationsAndStatements declarationsAndStatements;
}
class CastExpression: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
CastQualifier castQualifier;
}
class CastQualifier: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TokenType first;
TokenType second;
bool hasSecond;
}
class Catches: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Catch[] catches;
LastCatch lastCatch;
}
class Catch: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
Token identifier;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class ClassBody: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Declaration[] declarations;
Invariant[] invariants;
}
class ClassDeclaration: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token name;
TemplateParameters templateParameters;
Constraint constraint;
IdentifierList superClasses;
ClassBody classBody;
}
class CmpExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ShiftExpression shiftExpression;
EqualExpression equalExpression;
IdentityExpression identityExpression;
RelExpression relExpression;
InExpression inExpression;
}
class CompileCondition : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
VersionCondition versionCondition;
DebugCondition debugCondition;
StaticIfCondition staticIfCondition;
}
class ConditionalDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
CompileCondition compileCondition;
Declaration[] trueDeclarations;
Declaration[] falseDeclarations;
}
class ConditionalStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
CompileCondition compileCondition;
NonEmptyStatementNoCaseNoDefault trueStatement;
NonEmptyStatementNoCaseNoDefault falseStatement;
}
class Constraint : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
}
class Constructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Parameters parameters;
FunctionBody functionBody;
}
class ContinueStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
bool hasIdentifier;
Token identifier;
}
class DebugCondition : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifierOrInteger;
bool hasIdentifierOrInteger;
}
class DebugSpecification : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifierOrInteger;
}
class Declaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AttributedDeclaration attributedDeclaration;
ImportDeclaration importDeclaration;
FunctionDeclaration functionDeclaration;
VariableDeclaration variableDeclaration;
AliasThisDeclaration aliasThisDeclaration;
StructDeclaration structDeclaration;
ClassDeclaration classDeclaration;
InterfaceDeclaration interfaceDeclaration;
UnionDeclaration unionDeclaration;
EnumDeclaration enumDeclaration;
AliasDeclaration aliasDeclaration;
MixinDeclaration mixinDeclaration;
Unittest unittest_;
StaticAssertDeclaration staticAssertDeclaration;
TemplateDeclaration templateDeclaration;
Constructor constructor;
Destructor destructor;
StaticConstructor staticConstructor;
StaticDestructor staticDestructor;
SharedStaticDestructor sharedStaticDestructor;
SharedStaticConstructor sharedStaticConstructor;
ConditionalDeclaration conditionalDeclaration;
PragmaDeclaration pragmaDeclaration;
}
class DeclarationsAndStatements : ASTNode
{
mixin(DEFAULT_ACCEPT);
ASTNode[] declarationsAndStatements;
}
class Declarator : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
DeclaratorSuffix declaratiorSuffix;
Initializer initializer;
}
class DeclaratorSuffix : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
AssignExpression assignExpression;
}
class DefaultStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
DeclarationsAndStatements declarationsAndStatements;
}
class DeleteExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
UnaryExpression unaryExpression;
}
class DeleteStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
DeleteExpression deleteExpression;
}
class Deprecated : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
}
class Destructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionBody functionBody;
}
class DoStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BlockStatement blockStatement;
Expression expression;
}
class EnumBody : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
EnumMember[] enumMembers;
}
class EnumDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Type type;
EnumBody enumBody;
}
class EnumMember : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Type type;
AssignExpression assignExpression;
}
class EqualExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY);
}
class Expression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression[] assignExpressions;
}
class FinalSwitchStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
SwitchStatement switchStatement;
}
class Finally : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class ForStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Declaration initializationDeclaration;
Statement initializationStatement;
Expression test;
Expression increment;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class ForeachRangeStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ForeachType foreachType;
Expression lower;
Expression higher;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class ForeachStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token foreachType;
ForeachTypeList foreachTypeList;
Expression expression;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class ForeachType : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
bool isRef;
Type type;
Token identifier;
}
class ForeachTypeList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ForeachType[] foreachTypes;
}
class FunctionAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token pureOrNothrow;
AtAttribute atAttribute;
}
class FunctionBody : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BlockStatement blockStatement;
BodyStatement bodyStatement;
OutStatement outStatement;
InStatement inStatement;
}
class FunctionCallExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
UnaryExpression unaryExpression;
TemplateArguments templateArguments;
Arguments arguments;
}
class FunctionCallStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionCallExpression functionCallExpression;
}
class FunctionDeclaration : Declaration
{
public:
mixin(OVERRIDE_DEFAULT_ACCEPT);
Type returnType;
Token name;
TemplateParameters templateParameters;
Parameters parameters;
Constraint constraint;
FunctionBody functionBody;
}
class FunctionLiteralExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token functionOrDelegate;
Type type;
Parameters parameters;
FunctionAttribute[] functionAttributes;
FunctionBody functionBody;
}
class GotoStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
Token identifier;
bool isDefault;
}
class IdentifierChain : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token[] identifiers;
}
class IdentifierList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token[] identifiers;
}
class IdentifierOrTemplateChain : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
IdentifierOrTemplateInstance[] identifiers;
}
class IdentifierOrTemplateInstance : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateInstance templateInstance;
}
class IdentityExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY);
}
class IfStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
NonEmptyStatementNoCaseNoDefault thenStatement;
NonEmptyStatementNoCaseNoDefault elseStatement;
}
class ImportBind : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token left;
Token right;
}
class ImportBindings : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
SingleImport bind;
ImportBind[] ImportBinds;
}
class ImportDeclaration : Declaration
{
public:
mixin(OVERRIDE_DEFAULT_ACCEPT);
bool isStatic;
ImportList importList;
}
class ImportExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
}
class ImportList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
SingleImport singleImport;
ImportList next;
ImportBindings bindings;
}
class InExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY);
}
class InStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BlockStatement blockStatement;
}
class Initialize : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class Initializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonVoidInitializer nonVoidInitializer;
}
class InterfaceDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateParameters templateParameters;
Constraint constraint;
IdentifierList identifierList;
StructBody structBody;
}
class Invariant : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BlockStatement blockStatement;
}
class IsExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
AssignExpression assignExpression;
Token identifier;
TypeSpecialization typeSpecialization;
TemplateParameterList templateParameterList;
Token equalsOrColon;
}
class KeyValuePair : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
KeyValuePair[] keyValuePairs;
}
class KeyValuePairs : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression key;
AssignExpression value;
}
class LabeledStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Statement statement;
}
class LambdaExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Parameters paramaters;
FunctionAttribute[] functionAttributes;
AssignExpression assignExpression;
}
class LastCatch : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class LinkageAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
bool hasPlusPlus;
}
class MemberFunctionAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token token;
FunctionAttribute functionAttribute;
}
class MixinDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
MixinExpression mixinExpression;
}
class MixinExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
}
class MixinTemplateName : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
bool hasDot;
IdentifierOrTemplateChain identifierOrTemplateChain;
TypeofExpression typeofExpression;
}
class Module : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ModuleDeclaration moduleDeclaration;
Declaration[] declarations;
}
class ModuleDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
IdentifierChain moduleName;
}
class MulExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token operator;
UnaryExpression left;
UnaryExpression right;
}
class NewAnonClassExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Arguments allocatorArguments;
Arguments constructorArguments;
IdentifierList identifierList;
ClassBody classBody;
}
class NewExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
NewAnonClassExpression newAnonClassExpression;
Arguments arguments;
AssignExpression assignExpression;
}
class NonEmptyStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
CaseStatement caseStatement;
CaseRangeStatement caseRangeStatement;
DefaultStatement defaultStatement;
}
class NonEmptyStatementNoCaseNoDefault : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
LabeledStatement labeledStatement;
BlockStatement blockStatement;
AssignStatement assignStatement;
IfStatement ifStatement;
WhileStatement whileStatement;
DoStatement doStatement;
ForStatement forStatement;
ForeachStatement foreachStatement;
SwitchStatement switchStatement;
FinalSwitchStatement finalSwitchStatement;
ContinueStatement continueStatement;
BreakStatement breakStatement;
ReturnStatement returnStatement;
GotoStatement gotoStatement;
WithStatement withStatement;
SynchronizedStatement synchronizedStatement;
TryStatement tryStatement;
ThrowStatement throwStatement;
ScopeGuardStatement scopeGuardStatement;
AsmStatement asmStatement;
ForeachRangeStatement foreachRangeStatement;
ConditionalStatement conditionalStatement;
StaticAssertStatement staticAssertStatement;
AssertStatement assertStatement;
TemplateMixinStatement templateMixinStatement;
VersionSpecification versionSpecification;
DebugSpecification debugSpecification;
FunctionCallStatement functionCallStatement;
DeleteStatement deleteStatement;
}
class NonVoidInitializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
ArrayInitializer arrayInitializer;
StructInitializer structInitializer;
}
class Opcode : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
}
class Operand : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AsmExp asmExp;
}
class Operands : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Operand[] operands;
}
class OrExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
XorExpression xorExpression;
OrExpression orExpression;
}
class OrOrExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
OrOrExpression orOrExpression;
AndAndExpression andAndExpression;
}
class OutStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token parameter;
BlockStatement blockStatement;
}
class Parameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
ParameterAttribute[] paramaterAttributes;
Type type;
Token name;
bool vararg;
}
class ParameterAttribute: ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token attribute;
TypeConstructor typeConstructor;
}
class Parameters : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Parameter[] paramaters;
bool hasVarargs;
}
class PostIncDecExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token operator;
UnaryExpression unaryExpression;
}
class PowExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
UnaryExpression unaryExpression;
PowExpression powExpression;
}
class PragmaDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
PragmaExpression pragmaExpression;
}
class PragmaExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
ArgumentList argumentList;
}
class PreIncDecExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token operator;
UnaryExpression unaryExpression;
}
class PrimaryExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token primary;
bool hasDot;
IdentifierOrTemplateInstance identifierOrTemplateInstance;
Type type;
TypeofExpression typeofExpression;
TypeidExpression typeidExpression;
ArrayLiteral arrayLiteral;
AssocArrayLiteral assocArrayLiteral;
Expression expression;
IsExpression isExpression;
LambdaExpression lambdaExpression;
FunctionLiteralExpression functionLiteralExpression;
TraitsExpression traitsExpression;
MixinExpression mixinExpression;
ImportExpression importExpression;
}
class ProtectionAttribute : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token attribute;
}
class Register : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Token integerLiteral;
bool hasIntegerLiteral;
}
class RelExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
mixin(SHIFT_SHIFT_BODY);
}
class ReturnStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
}
class ScopeGuardStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class SharedStaticConstructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionBody functionBody;
}
class SharedStaticDestructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionBody functionBody;
}
class ShiftExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AddExpression addExpression;
ShiftExpression shiftExpression;
Token operator;
}
class SingleImport : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token rename;
IdentifierChain import_;
}
class Statement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatement nonEmptyStatement;
}
class StatementNoCaseNoDefault : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class StaticAssertDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
StaticAssertStatement staticAssertStatement;
}
class StaticAssertStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssertStatement assertStatement;
}
class StaticConstructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionBody functionBody;
}
class StaticDestructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
FunctionBody functionBody;
}
class StaticIfCondition : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
}
class StorageClass : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AtAttribute atAttribute;
TypeConstructor typeConstructor;
Token storageClass;
}
class StructBody : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Declaration[] declarations;
}
class StructDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateParameters templateParameters;
Constraint constraint;
StructBody structBody;
}
class StructInitializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
StructMemberInitializers structMemberInitializers;
}
class StructMemberInitializer : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
bool hasIdentifier;
NonVoidInitializer nonVoidInitializer;
}
class StructMemberInitializers : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
StructMemberInitializer[] structMemberInitializers;
}
class SwitchBody : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Statement[] statements;
}
class SwitchStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
SwitchBody switchBody;
}
class Symbol : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
IdentifierOrTemplateChain identifierOrTemplateChain;
bool hasDot;
}
class SynchronizedStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
}
class TemplateAliasParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
Token identifier;
Type colonType;
Expression colonExpression;
Type assignType;
Expression assignExpression;
}
class TemplateArgument : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
AssignExpression assignExpression;
Symbol symbol;
}
class TemplateArgumentList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateArgument[] templateArguments;
}
class TemplateArguments : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateArgumentList templateArgumentList;
TemplateSingleArgument templateSingleArgument;
}
class TemplateDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateParameters templateParameters;
Constraint constraint;
Declaration[] declarations;
}
class TemplateInstance : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateArguments templateArguments;
}
class TemplateMixinStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateArguments templateArguments;
MixinTemplateName mixinTemplateName;
}
class TemplateParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateTypeParameter templateTypeParameter;
TemplateValueParameter templateValueParameter;
TemplateAliasParameter templateAliasParameter;
TemplateTupleParameter templateTupleParameter;
TemplateThisParameter templateThisParameter;
}
class TemplateParameterList : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateParameter[] templateParameters;
}
class TemplateParameters : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateParameterList templateParameterList;
}
class TemplateSingleArgument : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token token;
BasicType builtinType;
}
class TemplateThisParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TemplateTypeParameter templateTypeParameter;
}
class TemplateTupleParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
}
class TemplateTypeParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
Type colonType;
Type assignType;
}
class TemplateValueParameter : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
Token identifier;
Expression expression;
TemplateValueParameterDefault templateValueParameterDefault;
}
class TemplateValueParameterDefault : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
Token token;
}
class TernaryExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
OrOrExpression orOrExpression;
Expression expression;
TernaryExpression ternaryExpression;
}
class ThrowStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
}
class TraitsArgument : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
AssignExpression assignExpression;
Type type;
}
class TraitsExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TraitsArgument[] traitsArguments;
}
class TryStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
NonEmptyStatementNoCaseNoDefault nonEmptyStatementNoCaseNoDefault;
Catches catches;
Finally finally_;
}
class Type : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TypeConstructors typeConstructors;
Type2 type2;
}
class Type2 : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type2 type2;
Type3 type3;
TypeSuffix typeSuffix;
}
class Type3 : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BasicType builtinType;
Symbol symbol;
TypeofExpression typeofExpression;
IdentifierOrTemplateChain identifierOrTemplateChain;
TypeConstructor typeConstructor;
Type type;
}
class TypeConstructor : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token typeConstructor;
}
class TypeConstructors : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
TypeConstructor[] typeConstructors;
}
class TypeSpecialization : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token token;
Type type;
}
class TypeSuffix : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token delegateOrFunction;
bool star;
Type type;
AssignExpression assignExpression;
MemberFunctionAttribute[] memberFunctionAttributes;
}
class TypeidExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Type type;
Expression expression;
}
class TypeofExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
Token return_;
}
class UnaryExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
PrimaryExpression primaryExpression;
UnaryExpression unaryExpression;
Token prefix;
PreIncDecExpression preIncDecExpression;
PostIncDecExpression postIncDecExpression;
NewExpression newExpression;
DeleteExpression deleteExpression;
CastExpression castExpression;
FunctionCallExpression functionCallExpression;
ArgumentList argumentList;
AssignExpression low;
AssignExpression high;
IdentifierOrTemplateInstance identifierOrTemplateInstance;
AssertExpression assertExpression;
}
class UnionDeclaration : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token identifier;
TemplateParameters templateParameters;
Constraint constraint;
StructBody structBody;
}
class Unittest : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
BlockStatement blockStatement;
}
class VariableDeclaration : Declaration
{
public:
mixin(OVERRIDE_DEFAULT_ACCEPT);
Type type;
Declarator[] declarators;
StorageClass storageClass;
AutoDeclaration autoDeclaration;
}
class VersionCondition : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token token;
}
class VersionSpecification : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Token token;
}
class WhileStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
StatementNoCaseNoDefault statementNoCaseNoDefault;
}
class WithStatement : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
Expression expression;
Symbol symbol;
TemplateInstance templateInstance;
}
class XorExpression : ASTNode
{
public:
mixin(DEFAULT_ACCEPT);
XorExpression left;
AndExpression right;
}