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