diff trunk/src/dil/Module.d @ 365:ed67acc82268

- Added option includes to config.d. - Added methods getName() and getPackageName() to class ModuleDeclaration. - Added method isNonReservedIdentifier() to class Lexer. - Added private member parser to class Module. - Initializing members moduleName and packageName in Module.parse().
author aziz
date Fri, 31 Aug 2007 11:07:05 +0000
parents 1059295c2727
children dcbd3bf9bf74
line wrap: on
line diff
--- a/trunk/src/dil/Module.d	Fri Aug 31 00:53:00 2007 +0000
+++ b/trunk/src/dil/Module.d	Fri Aug 31 11:07:05 2007 +0000
@@ -6,7 +6,9 @@
 import dil.SyntaxTree;
 import dil.Declarations;
 import dil.Parser;
+import dil.Lexer;
 import dil.File;
+import std.path;
 
 class Module
 {
@@ -16,6 +18,7 @@
   Declarations root; /// The root of the AST.
   ImportDeclaration[] imports;
   ModuleDeclaration moduleDecl;
+  private Parser parser;
 
   this(string fileName)
   {
@@ -25,7 +28,7 @@
   void parse()
   {
     auto sourceText = loadFile(fileName);
-    auto parser = new Parser(sourceText, fileName);
+    this.parser = new Parser(sourceText, fileName);
     parser.start();
 
     this.root = parser.parseModule();
@@ -34,6 +37,17 @@
     {
       // moduleDecl will be null if first node can't be casted to ModuleDeclaration.
       this.moduleDecl = Cast!(ModuleDeclaration)(root.children[0]);
+      if (moduleDecl)
+      {
+        this.moduleName = moduleDecl.getName();
+        this.packageName = moduleDecl.getPackageName('/');
+      }
+      else
+      {
+        auto str = getBaseName(getName(fileName));
+        if (Lexer.isNonReservedIdentifier(str))
+          this.moduleName = str;
+      }
 
       this.imports = parser.imports;
     }