diff 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
line wrap: on
line diff
--- a/src/dil/semantic/Package.d	Wed Mar 12 17:01:27 2008 +0100
+++ b/src/dil/semantic/Package.d	Wed Mar 12 19:11:30 2008 +0100
@@ -5,8 +5,52 @@
 module dil.semantic.Package;
 
 import dil.semantic.Symbol;
+import dil.semantic.Symbols;
+import dil.semantic.Module;
+import dil.lexer.IdTable;
+import common;
 
-class Package : Symbol
+/// A package groups modules and other packages.
+class Package : ScopeSymbol
 {
+  string pckgName;    /// The name of the package. E.g.: 'dil'.
+  Package[] packages; /// The sub-packages contained in this package.
+  Module[] modules;   /// The modules contained in this package.
 
+  /// Constructs a Package object.
+  this(string pckgName)
+  {
+    auto ident = IdTable.inStatic(pckgName);
+    super(SYM.Package, ident, null);
+    this.pckgName = pckgName;
+  }
+
+  /// Returns true if this is the root package.
+  bool isRoot()
+  {
+    return parent is null;
+  }
+
+  /// Returns the parent package or null if this is the root.
+  Package parentPackage()
+  {
+    if (isRoot())
+      return null;
+    assert(parent.isPackage);
+    return parent.to!(Package);
+  }
+
+  /// Adds a module to this package.
+  void add(Module modul)
+  {
+    modules ~= modul;
+    insert(modul, modul.name);
+  }
+
+  /// Adds a package to this package.
+  void add(Package pckg)
+  {
+    packages ~= pckg;
+    insert(pckg, pckg.name);
+  }
 }