import and module names question

Jarrett Billingsley kb3ctd2 at yahoo.com
Sat Jan 12 19:39:29 PST 2008


"Ary Borenszweig" <ary at esperanto.org.ar> wrote in message 
news:fmbqi6$o01$1 at digitalmars.com...
> I'm currently testing the semantic analysis of Descent, to match it with 
> DMD's. I'm trying to get zero errors on phobos. There's one thing I don't 
> understand. In module internal.gc.gc there's this line:
>
> public import gcx;
>
> At the root of phobos there is no file named gcx.d, but in internal/gc/ 
> there is one. That file doesn't have a module declaration (no "module 
> ...;"). So I thought "Oh, since it doesn't have a module declaration, the 
> module's name is gcx (the filename minus .d), and that's why the public 
> import works". But... When compiling this piece of code:
>
> ---
> import internal.gc.gc;
> ---
>
> I get:
> ..\dmd\bin\..\src\phobos\internal\gc\gc.d(37): module gcx cannot read file 
> 'gcx.d'
>
> So... is there an error in internal.gc.gc? If so... how does phobos gets 
> compiled? Should I ignore that kind of errors while testing Descent on 
> phobos?

The GC is compiled as a single piece of the library.  If you were to compile 
gc.d from the /internal/gc directory, you would import gcx.d by using 
"import gcx;", which is exactly what's going on here.

The downside is that if you're _not_ compiling from /internal/gc, you can't 
import internal.gc.gcx, since now it's nested in a directory, so the FQN now 
becomes "internal.gc.gcx".

So either skip that dir when testing Descent, or set your path to it when 
testing it so that gcx comes into the "root" namespace. 




More information about the Digitalmars-d-learn mailing list