Mercurial > projects > dil
changeset 580:fa6d3c52757d
Moved SyntaxTree.d to new package 'ast'.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sat, 05 Jan 2008 17:49:55 +0100 |
parents | 90d0cff4107e |
children | 61f9784aaf2a |
files | trunk/src/cmd/Generate.d trunk/src/cmd/ImportGraph.d trunk/src/dil/Declarations.d trunk/src/dil/Expressions.d trunk/src/dil/Module.d trunk/src/dil/Semantics.d trunk/src/dil/SettingsLoader.d trunk/src/dil/Statements.d trunk/src/dil/Symbol.d trunk/src/dil/Symbols.d trunk/src/dil/SyntaxTree.d trunk/src/dil/Types.d trunk/src/dil/ast/Node.d trunk/src/dil/parser/ImportParser.d trunk/src/dil/parser/Parser.d trunk/src/main.d |
diffstat | 16 files changed, 307 insertions(+), 303 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/cmd/Generate.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/cmd/Generate.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,7 +4,7 @@ +/ module cmd.Generate; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Token; import dil.parser.Parser; import dil.lexer.Lexer;
--- a/trunk/src/cmd/ImportGraph.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/cmd/ImportGraph.d Sat Jan 05 17:49:55 2008 +0100 @@ -3,7 +3,8 @@ License: GPL3 +/ module cmd.ImportGraph; -import dil.SyntaxTree; + +import dil.ast.Node; import dil.Declarations; import dil.Token; import dil.File;
--- a/trunk/src/dil/Declarations.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Declarations.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,7 +4,7 @@ +/ module dil.Declarations; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Expressions; import dil.Types; import dil.Statements;
--- a/trunk/src/dil/Expressions.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Expressions.d Sat Jan 05 17:49:55 2008 +0100 @@ -3,7 +3,8 @@ License: GPL3 +/ module dil.Expressions; -import dil.SyntaxTree; + +import dil.ast.Node; import dil.Token; import dil.Types; import dil.Declarations; @@ -943,6 +944,7 @@ { if (type) return this; + return this; } char[] getString()
--- a/trunk/src/dil/Module.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Module.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,7 +4,7 @@ +/ module dil.Module; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Declarations; import dil.parser.Parser; import dil.parser.ImportParser;
--- a/trunk/src/dil/Semantics.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Semantics.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,10 +4,10 @@ +/ module dil.Semantics; +import dil.ast.Node; import dil.Expressions; import dil.Token; import dil.Scope; -import dil.SyntaxTree; import dil.IdTable; import common;
--- a/trunk/src/dil/SettingsLoader.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/SettingsLoader.d Sat Jan 05 17:49:55 2008 +0100 @@ -6,7 +6,7 @@ import dil.Settings; import dil.Messages; -import dil.Module, dil.SyntaxTree, dil.Declarations, dil.Expressions; +import dil.Module, dil.ast.Node, dil.Declarations, dil.Expressions; import dil.File; import tango.io.FilePath; import common;
--- a/trunk/src/dil/Statements.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Statements.d Sat Jan 05 17:49:55 2008 +0100 @@ -3,7 +3,8 @@ License: GPL3 +/ module dil.Statements; -import dil.SyntaxTree; + +import dil.ast.Node; import dil.Expressions; import dil.Declarations; import dil.Types;
--- a/trunk/src/dil/Symbol.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Symbol.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,7 +4,7 @@ +/ module dil.Symbol; -import dil.SyntaxTree; +import dil.ast.Node; import common; /// Symbol IDs.
--- a/trunk/src/dil/Symbols.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Symbols.d Sat Jan 05 17:49:55 2008 +0100 @@ -6,7 +6,7 @@ import dil.Symbol; import dil.SymbolTable; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Enums; import dil.TypeSystem; import dil.Identifier;
--- a/trunk/src/dil/SyntaxTree.d Sat Jan 05 17:32:27 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -/++ - 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, - ProtectionDeclaration, - StorageClassDeclaration, - LinkageDeclaration, - 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, - - // 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, - DotExpression, - DotListExpression, - TemplateInstanceExpression, - ThisExpression, - SuperExpression, - NullExpression, - DollarExpression, - BoolExpression, - IntExpression, - RealExpression, - ComplexExpression, - CharExpression, - StringExpression, - ArrayLiteralExpression, - AArrayLiteralExpression, - AssertExpression, - MixinExpression, - ImportExpression, - TypeofExpression, - TypeDotIdExpression, - TypeidExpression, - IsExpression, - FunctionLiteralExpression, - TraitsExpression, // D2.0 - VoidInitializer, - ArrayInitializer, - StructInitializer, - AsmTypeExpression, - AsmOffsetExpression, - AsmSegExpression, - AsmPostBracketExpression, - AsmBracketExpression, - AsmLocalSizeExpression, - AsmRegisterExpression, - - // Types: - IntegralType, - UndefinedType, - DotType, - DotListType, - IdentifierType, - TypeofType, - TemplateInstanceType, - PointerType, - ArrayType, - FunctionType, - DelegateType, - CFuncPointerType, - ConstType, // D2.0 - InvariantType, // D2.0 - - // Other: - FunctionBody, - Parameter, - Parameters, - BaseClass, - TemplateAliasParameter, - TemplateTypeParameter, - TemplateThisParameter, // D2.0 - TemplateValueParameter, - TemplateTupleParameter, - TemplateParameters, - TemplateArguments, - EnumMember, -} - -/// 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 TryCast(Class)(Node n) -{ - assert(n !is null); - if (n.kind == mixin("NodeKind." ~ typeof(Class).stringof)) - return cast(Class)cast(void*)n; - return null; -} - -Class CastTo(Class)(Node n) -{ - assert(n !is null && n.kind == mixin("NodeKind." ~ typeof(Class).stringof)); - return cast(Class)cast(void*)n; -} - -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; - } - - Class setToks(Class)(Class node) - { - node.setTokens(this.begin, this.end); - return node; - } - - void addChild(Node child) - { - assert(child !is null, "failed in " ~ this.classinfo.name); - this.children ~= child; - } - - void addOptChild(Node child) - { - child is null || addChild(child); - } - - void addChildren(Node[] children) - { - assert(children !is null && delegate{ - foreach (child; children) - if (child is null) - return false; - return true; }(), - "failed in " ~ this.classinfo.name - ); - this.children ~= children; - } - - void addOptChildren(Node[] children) - { - children is null || addChildren(children); - } -}
--- a/trunk/src/dil/Types.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/Types.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,7 +4,7 @@ +/ module dil.Types; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Token; import dil.Expressions; import dil.Enums;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/dil/ast/Node.d Sat Jan 05 17:49:55 2008 +0100 @@ -0,0 +1,289 @@ +/++ + Author: Aziz Köksal + License: GPL3 ++/ +module dil.ast.Node; +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, + ProtectionDeclaration, + StorageClassDeclaration, + LinkageDeclaration, + 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, + + // 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, + DotExpression, + DotListExpression, + TemplateInstanceExpression, + ThisExpression, + SuperExpression, + NullExpression, + DollarExpression, + BoolExpression, + IntExpression, + RealExpression, + ComplexExpression, + CharExpression, + StringExpression, + ArrayLiteralExpression, + AArrayLiteralExpression, + AssertExpression, + MixinExpression, + ImportExpression, + TypeofExpression, + TypeDotIdExpression, + TypeidExpression, + IsExpression, + FunctionLiteralExpression, + TraitsExpression, // D2.0 + VoidInitializer, + ArrayInitializer, + StructInitializer, + AsmTypeExpression, + AsmOffsetExpression, + AsmSegExpression, + AsmPostBracketExpression, + AsmBracketExpression, + AsmLocalSizeExpression, + AsmRegisterExpression, + + // Types: + IntegralType, + UndefinedType, + DotType, + DotListType, + IdentifierType, + TypeofType, + TemplateInstanceType, + PointerType, + ArrayType, + FunctionType, + DelegateType, + CFuncPointerType, + ConstType, // D2.0 + InvariantType, // D2.0 + + // Other: + FunctionBody, + Parameter, + Parameters, + BaseClass, + TemplateAliasParameter, + TemplateTypeParameter, + TemplateThisParameter, // D2.0 + TemplateValueParameter, + TemplateTupleParameter, + TemplateParameters, + TemplateArguments, + EnumMember, +} + +/// 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 TryCast(Class)(Node n) +{ + assert(n !is null); + if (n.kind == mixin("NodeKind." ~ typeof(Class).stringof)) + return cast(Class)cast(void*)n; + return null; +} + +Class CastTo(Class)(Node n) +{ + assert(n !is null && n.kind == mixin("NodeKind." ~ typeof(Class).stringof)); + return cast(Class)cast(void*)n; +} + +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; + } + + Class setToks(Class)(Class node) + { + node.setTokens(this.begin, this.end); + return node; + } + + void addChild(Node child) + { + assert(child !is null, "failed in " ~ this.classinfo.name); + this.children ~= child; + } + + void addOptChild(Node child) + { + child is null || addChild(child); + } + + void addChildren(Node[] children) + { + assert(children !is null && delegate{ + foreach (child; children) + if (child is null) + return false; + return true; }(), + "failed in " ~ this.classinfo.name + ); + this.children ~= children; + } + + void addOptChildren(Node[] children) + { + children is null || addChildren(children); + } +}
--- a/trunk/src/dil/parser/ImportParser.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/parser/ImportParser.d Sat Jan 05 17:49:55 2008 +0100 @@ -4,12 +4,12 @@ +/ module dil.parser.ImportParser; +import dil.ast.Node; import dil.parser.Parser; import dil.Token; import dil.Enums; import dil.Declarations; import dil.Statements; -import dil.SyntaxTree; import common; private alias TOK T;
--- a/trunk/src/dil/parser/Parser.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/dil/parser/Parser.d Sat Jan 05 17:49:55 2008 +0100 @@ -5,7 +5,7 @@ module dil.parser.Parser; import dil.lexer.Lexer; -import dil.SyntaxTree; +import dil.ast.Node; import dil.Token; import dil.Messages; import dil.Information;
--- a/trunk/src/main.d Sat Jan 05 17:32:27 2008 +0100 +++ b/trunk/src/main.d Sat Jan 05 17:49:55 2008 +0100 @@ -12,7 +12,7 @@ import dil.SettingsLoader; import dil.CompilerInfo; import dil.Module; -import dil.Declarations, dil.Expressions, dil.SyntaxTree; +import dil.Declarations, dil.Expressions, dil.ast.Node; import dil.Information; import dil.File; import cmd.Generate;