Mercurial > projects > ldc
changeset 626:e83ba4ae4878
Fix import visibility bugs 313 and 314.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Wed, 01 Oct 2008 19:16:10 +0200 |
parents | 7e0a766fef47 |
children | 79cbe5034fec |
files | dmd/dsymbol.c dmd/import.c dmd/import.h gen/toobj.cpp |
diffstat | 4 files changed, 23 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/dmd/dsymbol.c Wed Oct 01 19:15:17 2008 +0200 +++ b/dmd/dsymbol.c Wed Oct 01 19:16:10 2008 +0200 @@ -646,6 +646,11 @@ // Look in symbols declared in this module Dsymbol *s = symtab ? symtab->lookup(ident) : NULL; + + // hide private nonlocal symbols + if (flags & 1 && s && s->prot() == PROTprivate) + s = NULL; + if (s) { //printf("\ts = '%s.%s'\n",toChars(),s->toChars());
--- a/dmd/import.c Wed Oct 01 19:15:17 2008 +0200 +++ b/dmd/import.c Wed Oct 01 19:16:10 2008 +0200 @@ -33,6 +33,7 @@ this->id = id; this->aliasId = aliasId; this->isstatic = isstatic; + protection = PROTundefined; pkg = NULL; mod = NULL; @@ -60,6 +61,10 @@ return isstatic ? (char *)"static import" : (char *)"import"; } +enum PROT Import::prot() +{ + return protection; +} Dsymbol *Import::syntaxCopy(Dsymbol *s) { @@ -131,14 +136,15 @@ } #endif + /* Default to private importing + */ + protection = sc->protection; + if (!sc->explicitProtection) + protection = PROTprivate; + if (!isstatic && !aliasId && !names.dim) { - /* Default to private importing - */ - enum PROT prot = sc->protection; - if (!sc->explicitProtection) - prot = PROTprivate; - sc->scopesym->importScope(mod, prot); + sc->scopesym->importScope(mod, protection); } // Modules need a list of each imported module @@ -149,13 +155,14 @@ sc = sc->push(mod); for (size_t i = 0; i < aliasdecls.dim; i++) - { Dsymbol *s = (Dsymbol *)aliasdecls.data[i]; + { AliasDeclaration *ad = (AliasDeclaration *)aliasdecls.data[i]; //printf("\tImport alias semantic('%s')\n", s->toChars()); if (!mod->search(loc, (Identifier *)names.data[i], 0)) error("%s not found", ((Identifier *)names.data[i])->toChars()); - s->semantic(sc); + ad->semantic(sc); + ad->protection = protection; } sc = sc->pop(); }
--- a/dmd/import.h Wed Oct 01 19:15:17 2008 +0200 +++ b/dmd/import.h Wed Oct 01 19:16:10 2008 +0200 @@ -34,6 +34,7 @@ Identifier *id; // module Identifier Identifier *aliasId; int isstatic; // !=0 if static import + enum PROT protection; // Pairs of alias=name to bind into current namespace Array names; @@ -49,6 +50,7 @@ void addAlias(Identifier *name, Identifier *alias); const char *kind(); + enum PROT prot(); Dsymbol *syntaxCopy(Dsymbol *s); // copy only syntax trees void load(Scope *sc); void semantic(Scope *sc);
--- a/gen/toobj.cpp Wed Oct 01 19:15:17 2008 +0200 +++ b/gen/toobj.cpp Wed Oct 01 19:16:10 2008 +0200 @@ -64,7 +64,7 @@ Logger::println("Generating module: %s\n", (md ? md->toChars() : toChars())); LOG_SCOPE; - printf("codegen: %s\n", srcfile->toChars()); +// printf("codegen: %s\n", srcfile->toChars()); // start by deleting the old object file deleteObjFile();