Mercurial > projects > dil
view trunk/src/dil/SyntaxTree.d @ 391:33b566df6af4
Migrated project to Tango.
Decremented the numbers of the format placeholders in the localized messages
by one.
Replaced all instances of writef/ln with Stdout.
Added module common.d with string aliases and a global Layout!(char) instance.
Replaced %s format specifiers with index placeholders in html/xml_tags.
Changed member Information.arguments to string message.
Copied std.metastring, std.uni and std.utf from Phobos.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sat, 15 Sep 2007 17:12:26 +0200 |
parents | 6d22f0b6a674 |
children | ff1d11c27061 |
line wrap: on
line source
/++ Author: Aziz Köksal License: GPL3 +/ module dil.SyntaxTree; import dil.Token; import common; enum NodeCategory { Declaration, Statement, Expression, Type, Other } enum NodeKind { // Declarations: Declarations, EmptyDeclaration, IllegalDeclaration, ModuleDeclaration, ImportDeclaration, AliasDeclaration, TypedefDeclaration, EnumDeclaration, ClassDeclaration, InterfaceDeclaration, StructDeclaration, UnionDeclaration, ConstructorDeclaration, StaticConstructorDeclaration, DestructorDeclaration, StaticDestructorDeclaration, FunctionDeclaration, VariableDeclaration, InvariantDeclaration, UnittestDeclaration, DebugDeclaration, VersionDeclaration, StaticIfDeclaration, StaticAssertDeclaration, TemplateDeclaration, NewDeclaration, DeleteDeclaration, AttributeDeclaration, ExternDeclaration, AlignDeclaration, PragmaDeclaration, MixinDeclaration, // Statements: Statements, IllegalStatement, EmptyStatement, ScopeStatement, LabeledStatement, ExpressionStatement, DeclarationStatement, IfStatement, ConditionalStatement, WhileStatement, DoWhileStatement, ForStatement, ForeachStatement, ForeachRangeStatement, // D2.0 SwitchStatement, CaseStatement, DefaultStatement, ContinueStatement, BreakStatement, ReturnStatement, GotoStatement, WithStatement, SynchronizedStatement, TryStatement, CatchBody, FinallyBody, ScopeGuardStatement, ThrowStatement, VolatileStatement, AsmStatement, AsmInstruction, AsmAlignStatement, IllegalAsmInstruction, PragmaStatement, MixinStatement, StaticIfStatement, StaticAssertStatement, DebugStatement, VersionStatement, AttributeStatement, ExternStatement, // Expressions: EmptyExpression, BinaryExpression, CondExpression, CommaExpression, OrOrExpression, AndAndExpression, OrExpression, XorExpression, AndExpression, CmpExpression, EqualExpression, IdentityExpression, RelExpression, InExpression, LShiftExpression, RShiftExpression, URShiftExpression, PlusExpression, MinusExpression, CatExpression, MulExpression, DivExpression, ModExpression, AssignExpression, LShiftAssignExpression, RShiftAssignExpression, URShiftAssignExpression, OrAssignExpression, AndAssignExpression, PlusAssignExpression, MinusAssignExpression, DivAssignExpression, MulAssignExpression, ModAssignExpression, XorAssignExpression, CatAssignExpression, UnaryExpression, AddressExpression, PreIncrExpression, PreDecrExpression, PostIncrExpression, PostDecrExpression, DerefExpression, SignExpression, NotExpression, CompExpression, PostDotListExpression, CallExpression, NewExpression, NewAnonClassExpression, DeleteExpression, CastExpression, IndexExpression, SliceExpression, PrimaryExpressio, IdentifierExpression, SpecialTokenExpression, DotListExpression, TemplateInstanceExpression, ThisExpression, SuperExpression, NullExpression, DollarExpression, BoolExpression, IntNumberExpression, RealNumberExpression, CharLiteralExpression, StringLiteralsExpression, ArrayLiteralExpression, AssocArrayLiteralExpression, AssertExpression, MixinExpression, ImportExpression, TypeofExpression, TypeDotIdExpression, TypeidExpression, IsExpression, FunctionLiteralExpression, TraitsExpression, // D2.0 VoidInitializer, ArrayInitializer, StructInitializer, AsmTypeExpression, AsmOffsetExpression, AsmSegExpression, AsmPostBracketExpression, AsmBracketExpression, AsmLocalSizeExpression, AsmRegisterExpression, // Types: IntegralType, UndefinedType, DotListType, IdentifierType, TypeofType, TemplateInstanceType, PointerType, ArrayType, FunctionType, DelegateType, ConstType, // D2.0 InvariantType, // D2.0 // Other: FunctionBody, Parameter, Parameters, BaseClass, TemplateAliasParameter, TemplateTypeParameter, TemplateValueParameter, TemplateTupleParameter, TemplateParameters, TemplateArguments, Linkage, } /// This string is mixed into the constructor of a class that inherits from Node. const string set_kind = `this.kind = mixin("NodeKind." ~ typeof(this).stringof);`; Class Cast(Class)(Node n) { assert(n !is null); if (n.kind == mixin("NodeKind." ~ typeof(Class).stringof)) return cast(Class)cast(void*)n; return null; } class Node { NodeCategory category; NodeKind kind; Node[] children; Token* begin, end; this(NodeCategory category) { this.category = category; } void setTokens(Token* begin, Token* end) { this.begin = begin; this.end = end; } }