Mercurial > projects > dang
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;