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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }