0
|
1 module dmd.Package;
|
|
2
|
|
3 import dmd.ScopeDsymbol;
|
|
4 import dmd.Identifier;
|
|
5 import dmd.Array;
|
|
6 import dmd.DsymbolTable;
|
|
7 import dmd.Scope;
|
|
8 import dmd.Dsymbol;
|
|
9 import dmd.Module;
|
|
10 import dmd.Util;
|
|
11
|
|
12 class Package : ScopeDsymbol
|
|
13 {
|
|
14 this(Identifier ident)
|
|
15 {
|
|
16 super(ident);
|
|
17 }
|
|
18
|
72
|
19 override string kind()
|
0
|
20 {
|
|
21 assert(false);
|
|
22 }
|
|
23
|
|
24 static DsymbolTable resolve(Array packages, Dsymbol* pparent, Package* ppkg)
|
|
25 {
|
|
26 DsymbolTable dst = Module.modules;
|
|
27 Dsymbol parent = null;
|
|
28
|
|
29 //printf("Package::resolve()\n");
|
|
30 if (ppkg)
|
|
31 *ppkg = null;
|
|
32
|
|
33 if (packages)
|
|
34 {
|
|
35 for (int i = 0; i < packages.dim; i++)
|
|
36 {
|
|
37 Identifier pid = cast(Identifier)packages.data[i];
|
|
38 Dsymbol p = dst.lookup(pid);
|
|
39 if (!p)
|
|
40 {
|
|
41 p = new Package(pid);
|
|
42 dst.insert(p);
|
|
43 p.parent = parent;
|
|
44 (cast(ScopeDsymbol)p).symtab = new DsymbolTable();
|
|
45 }
|
|
46 else
|
|
47 {
|
|
48 assert(p.isPackage());
|
|
49 version (TARGET_NET) { //dot net needs modules and packages with same name
|
|
50 } else {
|
|
51 if (p.isModule())
|
|
52 {
|
|
53 p.error("module and package have the same name");
|
|
54 fatal();
|
|
55 break;
|
|
56 }
|
|
57 }
|
|
58 }
|
|
59 parent = p;
|
|
60 dst = (cast(Package)p).symtab;
|
|
61 if (ppkg && !*ppkg)
|
|
62 *ppkg = cast(Package)p;
|
|
63 }
|
|
64 if (pparent)
|
|
65 {
|
|
66 *pparent = parent;
|
|
67 }
|
|
68 }
|
|
69 return dst;
|
|
70 }
|
|
71
|
72
|
72 override Package isPackage() { return this; }
|
0
|
73
|
72
|
74 override void semantic(Scope sc) { }
|
|
75 }
|