diff dmd/import.c @ 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 aaade6ded589
children bc982f1ad106
line wrap: on
line diff
--- 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();
     }