Mercurial > projects > dil
comparison trunk/src/dil/Declarations.d @ 504:9076c4cea2a4
Changed occur. of Token* to Identifier* and refactored Parser.
Module dil.IdTable imports dil.Identifier and dil.IdentsEnum publicly.
Removed file TokenIDs.d
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Tue, 11 Dec 2007 17:02:42 +0100 |
parents | 5a607597dc22 |
children | 3bb94ba21490 |
comparison
equal
deleted
inserted
replaced
503:fa63ef408790 | 504:9076c4cea2a4 |
---|---|
8 import dil.Types; | 8 import dil.Types; |
9 import dil.Statements; | 9 import dil.Statements; |
10 import dil.Token; | 10 import dil.Token; |
11 import dil.Enums; | 11 import dil.Enums; |
12 import dil.Scope; | 12 import dil.Scope; |
13 import dil.Identifier; | |
13 | 14 |
14 abstract class Declaration : Node | 15 abstract class Declaration : Node |
15 { | 16 { |
16 bool hasBody; | 17 bool hasBody; |
17 this() | 18 this() |
106 void semantic(Scope) | 107 void semantic(Scope) |
107 {} | 108 {} |
108 } | 109 } |
109 | 110 |
110 /// FQN = fully qualified name | 111 /// FQN = fully qualified name |
111 alias Token*[] ModuleFQN; // Identifier(.Identifier)* | 112 alias Identifier*[] ModuleFQN; // Identifier(.Identifier)* |
112 | 113 |
113 class ModuleDeclaration : Declaration | 114 class ModuleDeclaration : Declaration |
114 { | 115 { |
115 Token* moduleName; | 116 Identifier* moduleName; |
116 Token*[] packages; | 117 Identifier*[] packages; |
117 this(ModuleFQN moduleFQN) | 118 this(ModuleFQN moduleFQN) |
118 { | 119 { |
119 mixin(set_kind); | 120 mixin(set_kind); |
120 assert(moduleFQN.length != 0); | 121 assert(moduleFQN.length != 0); |
121 this.moduleName = moduleFQN[$-1]; | 122 this.moduleName = moduleFQN[$-1]; |
132 } | 133 } |
133 | 134 |
134 char[] getName() | 135 char[] getName() |
135 { | 136 { |
136 if (moduleName) | 137 if (moduleName) |
137 return moduleName.identifier; | 138 return moduleName.str; |
138 return null; | 139 return null; |
139 } | 140 } |
140 | 141 |
141 char[] getPackageName(char separator) | 142 char[] getPackageName(char separator) |
142 { | 143 { |
143 char[] pname; | 144 char[] pname; |
144 foreach (pckg; packages) | 145 foreach (pckg; packages) |
145 if (pckg) | 146 if (pckg) |
146 pname ~= pckg.identifier ~ separator; | 147 pname ~= pckg.str ~ separator; |
147 if (pname.length) | 148 if (pname.length) |
148 pname = pname[0..$-1]; // Remove last separator | 149 pname = pname[0..$-1]; // Remove last separator |
149 return pname; | 150 return pname; |
150 } | 151 } |
151 } | 152 } |
152 | 153 |
153 class ImportDeclaration : Declaration | 154 class ImportDeclaration : Declaration |
154 { | 155 { |
156 private alias Identifier*[] Ids; | |
155 ModuleFQN[] moduleFQNs; | 157 ModuleFQN[] moduleFQNs; |
156 Token*[] moduleAliases; | 158 Ids moduleAliases; |
157 Token*[] bindNames; | 159 Ids bindNames; |
158 Token*[] bindAliases; | 160 Ids bindAliases; |
159 | 161 |
160 this(ModuleFQN[] moduleFQNs, Token*[] moduleAliases, Token*[] bindNames, Token*[] bindAliases, bool isStatic) | 162 this(ModuleFQN[] moduleFQNs, Ids moduleAliases, Ids bindNames, Ids bindAliases, bool isStatic) |
161 { | 163 { |
162 mixin(set_kind); | 164 mixin(set_kind); |
163 this.moduleFQNs = moduleFQNs; | 165 this.moduleFQNs = moduleFQNs; |
164 this.moduleAliases = moduleAliases; | 166 this.moduleAliases = moduleAliases; |
165 this.bindNames = bindNames; | 167 this.bindNames = bindNames; |
174 foreach (moduleFQN; moduleFQNs) | 176 foreach (moduleFQN; moduleFQNs) |
175 { | 177 { |
176 char[] FQN; | 178 char[] FQN; |
177 foreach (ident; moduleFQN) | 179 foreach (ident; moduleFQN) |
178 if (ident) | 180 if (ident) |
179 FQN ~= ident.identifier ~ separator; | 181 FQN ~= ident.str ~ separator; |
180 FQNs ~= FQN[0..$-1]; // Remove last separator | 182 FQNs ~= FQN[0..$-1]; // Remove last separator |
181 } | 183 } |
182 return FQNs; | 184 return FQNs; |
183 } | 185 } |
184 } | 186 } |