diff trunk/src/dil/Parser.d @ 364:1059295c2727

- Every command module has an execute method now. - Added module cmd.ImportGraph. - Renamed ModuleName to ModuleFQN. - Added module dil.Module. - Added member 'imports' to class Parser.
author aziz
date Fri, 31 Aug 2007 00:53:00 +0000
parents 511c14950cac
children dcbd3bf9bf74
line wrap: on
line diff
--- a/trunk/src/dil/Parser.d	Thu Aug 30 12:02:04 2007 +0000
+++ b/trunk/src/dil/Parser.d	Fri Aug 31 00:53:00 2007 +0000
@@ -24,6 +24,8 @@
 
   Information[] errors;
 
+  ImportDeclaration[] imports;
+
   this(char[] srcText, string fileName)
   {
     lx = new Lexer(srcText, fileName);
@@ -119,14 +121,14 @@
     if (token.type == T.Module)
     {
       auto begin = token;
-      ModuleName moduleName;
+      ModuleFQN moduleFQN;
       do
       {
         nT();
-        moduleName ~= requireId();
+        moduleFQN ~= requireId();
       } while (token.type == T.Dot)
       require(T.Semicolon);
-      decls ~= set(new ModuleDeclaration(moduleName), begin);
+      decls ~= set(new ModuleDeclaration(moduleFQN), begin);
     }
     decls ~= parseDeclarationDefinitions();
     return decls;
@@ -220,6 +222,8 @@
       break;
     case T.Import:
       decl = parseImportDeclaration();
+      assert(decl && decl.kind == NodeKind.ImportDeclaration);
+      imports ~= cast(ImportDeclaration)cast(void*)decl;
       break;
     case T.Enum:
       decl = parseEnumDeclaration();
@@ -781,7 +785,7 @@
       nT();
     }
 
-    ModuleName[] moduleNames;
+    ModuleFQN[] moduleFQNs;
     Token*[] moduleAliases;
     Token*[] bindNames;
     Token*[] bindAliases;
@@ -789,7 +793,7 @@
     nT(); // Skip import keyword.
     while (1)
     {
-      ModuleName moduleName;
+      ModuleFQN moduleFQN;
       Token* moduleAlias;
 
       moduleAlias = requireId();
@@ -798,11 +802,11 @@
       if (token.type == T.Assign)
       {
         nT();
-        moduleName ~= requireId();
+        moduleFQN ~= requireId();
       }
       else // import Identifier [^=]
       {
-        moduleName ~= moduleAlias;
+        moduleFQN ~= moduleAlias;
         moduleAlias = null;
       }
 
@@ -810,11 +814,11 @@
       while (token.type == T.Dot)
       {
         nT();
-        moduleName ~= requireId();
+        moduleFQN ~= requireId();
       }
 
       // Push identifiers.
-      moduleNames ~= moduleName;
+      moduleFQNs ~= moduleFQN;
       moduleAliases ~= moduleAlias;
 
       if (token.type == T.Colon)
@@ -853,7 +857,7 @@
 
     require(T.Semicolon);
 
-    return new ImportDeclaration(moduleNames, moduleAliases, bindNames, bindAliases);
+    return new ImportDeclaration(moduleFQNs, moduleAliases, bindNames, bindAliases);
   }
 
   Declaration parseEnumDeclaration()