Mercurial > projects > dil
annotate src/dil/semantic/Package.d @ 815:615c1386b18d
Added code to class Package.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Wed, 12 Mar 2008 19:11:30 +0100 |
parents | bcb74c9b895c |
children | 35d238d502cb |
rev | line source |
---|---|
503
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 /++ |
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 Author: Aziz Köksal |
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 License: GPL3 |
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
4 +/ |
594
7a9b5074a005
Moved dil.Package to dil.semantic.Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
503
diff
changeset
|
5 module dil.semantic.Package; |
7a9b5074a005
Moved dil.Package to dil.semantic.Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
503
diff
changeset
|
6 |
7a9b5074a005
Moved dil.Package to dil.semantic.Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
503
diff
changeset
|
7 import dil.semantic.Symbol; |
815
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
8 import dil.semantic.Symbols; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
9 import dil.semantic.Module; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
10 import dil.lexer.IdTable; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
11 import common; |
503
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
12 |
815
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
13 /// A package groups modules and other packages. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
14 class Package : ScopeSymbol |
503
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
15 { |
815
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
16 string pckgName; /// The name of the package. E.g.: 'dil'. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
17 Package[] packages; /// The sub-packages contained in this package. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
18 Module[] modules; /// The modules contained in this package. |
503
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
19 |
815
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
20 /// Constructs a Package object. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
21 this(string pckgName) |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
22 { |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
23 auto ident = IdTable.inStatic(pckgName); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
24 super(SYM.Package, ident, null); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
25 this.pckgName = pckgName; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
26 } |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
27 |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
28 /// Returns true if this is the root package. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
29 bool isRoot() |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
30 { |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
31 return parent is null; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
32 } |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
33 |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
34 /// Returns the parent package or null if this is the root. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
35 Package parentPackage() |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
36 { |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
37 if (isRoot()) |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
38 return null; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
39 assert(parent.isPackage); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
40 return parent.to!(Package); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
41 } |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
42 |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
43 /// Adds a module to this package. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
44 void add(Module modul) |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
45 { |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
46 modules ~= modul; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
47 insert(modul, modul.name); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
48 } |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
49 |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
50 /// Adds a package to this package. |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
51 void add(Package pckg) |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
52 { |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
53 packages ~= pckg; |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
54 insert(pckg, pckg.name); |
615c1386b18d
Added code to class Package.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
55 } |
503
fa63ef408790
Added module dil.Package and semantic() to class Module.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 } |