[Issue 209] New: "Diamond" import name conflicts when using Fully	Qualified names
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Mon Jun 19 07:38:19 PDT 2006
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=209
           Summary: "Diamond" import name conflicts when using Fully
                    Qualified names
           Product: D
           Version: 0.160
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: daiphoenix at lycos.com
In a "diamond-shaped" structure of imports, name conflicts occur on the bottom
module when accessing top module entities with a fully qualified name (because
the top module name itself conflicts). Example:
---- foo.d ----
module foo;
int fooEnt; // could a be a class, func, any other entity.
---- barA.d ----
module barA;
import foo;
---- barB.d ----
module barA;
import foo;
---- test.d ----
import barA;
import barB;
void main()
{
  fooEnt++;  // Compiles ok. (Correct)
  foo.fooEnt++;  // Compile error, name conflicts (INCORRECT) :
      // barA.d(3): import barA.foo conflicts with barB.foo at barB.d(3)
  alias foo xxx; // Compile error too, 
      // accessing the top module is enough to trigger it
} 
This bug does not happen if the "root name" (first name) of the top and middle
modules is the same, such as this:
---- mod.foo.d ----
module mod.foo;
int fooEnt; // could a be a class, func, any other entity.
---- mod.barA.d ----
module mod.barA;
import mod.foo;
---- mod.barB.d ----
module mod.barA;
import mod.foo;
---- test.d ----
import mod.barA;
import mod.barB;
void main()
{
  fooEnt++;  // Compiles ok. (Correct)
  mod.foo.fooEnt++;  // Compiles ok. (Correct)
}
-- 
    
    
More information about the Digitalmars-d-bugs
mailing list