diff sema/AstAction.d @ 99:857f0d530789 new_gen

Imports and improved module statement Allow "module a.b.c" Supports most forms of D's import. import A, B; import A, B = C; import A, B : a = b, c;
author Anders Halager <halager@gmail.com>
date Tue, 06 May 2008 21:59:22 +0200
parents 48bb2287c035
children cd066f3b539a
line wrap: on
line diff
--- a/sema/AstAction.d	Tue May 06 21:55:29 2008 +0200
+++ b/sema/AstAction.d	Tue May 06 21:59:22 2008 +0200
@@ -42,7 +42,12 @@
         return new Identifier(t.location, sm.getText(t.asRange));
     }
 
-    override ModuleT actOnModule(char[] name)
+    override ModuleT actOnModule(ref Token _module, char[] name)
+    {
+        return new Module(name);
+    }
+
+    override ModuleT actOnImplicitModule(SLoc startLoc, char[] name)
     {
         return new Module(name);
     }
@@ -53,6 +58,30 @@
     }
 
     // -- Declarations --
+    override DeclT actOnImport(ref Token _, ref ModuleName target, Id* name)
+    {
+        auto res = new ImportDecl;
+        Identifier[] packages = new Identifier[target.packages.length];
+        foreach (i, v; target.packages)
+            packages[i] = identifierFromTok(v.tok);
+        res.packages = packages;
+
+        res.name = identifierFromTok(target.id.tok);
+        if (name !is null)
+            res.aliasedName = identifierFromTok(name.tok);
+        return res;
+    }
+
+    override void addSelectiveImport(DeclT _import, ref Id target, Id* name)
+    {
+        auto d = cast(ImportDecl)_import;
+        Identifier t = identifierFromTok(target.tok);
+        Identifier n = t;
+        if (name !is null)
+            n = identifierFromTok(name.tok);
+        d.explicitSymbols ~= [t, n];
+    }
+
     override DeclT actOnDeclarator(ref Id type, ref Id id, ExprT init)
     {
         Exp exp = cast(Exp)init;