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 }