Mercurial > projects > ldc
annotate dmd/import.c @ 1402:1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Wed, 20 May 2009 21:13:41 +0200 |
parents | 78038e540342 |
children | def7a1d494fd |
rev | line source |
---|---|
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
1 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
2 // Compiler implementation of the D programming language |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
3 // Copyright (c) 1999-2006 by Digital Mars |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
4 // All Rights Reserved |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
5 // written by Walter Bright |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
6 // http://www.digitalmars.com |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
7 // License for redistribution is by either the Artistic License |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
8 // in artistic.txt, or the GNU General Public License in gnu.txt. |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
9 // See the included readme.txt for details. |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
10 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
11 #include <stdio.h> |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
12 #include <assert.h> |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
13 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
14 #include "root.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
15 #include "dsymbol.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
16 #include "import.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
17 #include "identifier.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
18 #include "module.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
19 #include "scope.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
20 #include "hdrgen.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
21 #include "mtype.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
22 #include "declaration.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
23 #include "id.h" |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
24 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
25 /********************************* Import ****************************/ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
26 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
27 Import::Import(Loc loc, Array *packages, Identifier *id, Identifier *aliasId, |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
28 int isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
29 : Dsymbol(id) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
30 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
31 this->loc = loc; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
32 this->packages = packages; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
33 this->id = id; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
34 this->aliasId = aliasId; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
35 this->isstatic = isstatic; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
36 protection = PROTundefined; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
37 pkg = NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
38 mod = NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
39 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
40 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
41 this->ident = aliasId; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
42 // Kludge to change Import identifier to first package |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
43 else if (packages && packages->dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
44 this->ident = (Identifier *)packages->data[0]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
45 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
46 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
47 void Import::addAlias(Identifier *name, Identifier *alias) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
48 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
49 if (isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
50 error("cannot have an import bind list"); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
51 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
52 if (!aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
53 this->ident = NULL; // make it an anonymous import |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
54 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
55 names.push(name); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
56 aliases.push(alias); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
57 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
58 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
59 const char *Import::kind() |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
60 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
61 return isstatic ? (char *)"static import" : (char *)"import"; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
62 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
63 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
64 enum PROT Import::prot() |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
65 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
66 return protection; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
67 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
68 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
69 Dsymbol *Import::syntaxCopy(Dsymbol *s) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
70 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
71 assert(!s); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
72 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
73 Import *si; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
74 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
75 si = new Import(loc, packages, id, aliasId, isstatic); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
76 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
77 for (size_t i = 0; i < names.dim; i++) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
78 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
79 si->addAlias((Identifier *)names.data[i], (Identifier *)aliases.data[i]); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
80 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
81 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
82 return si; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
83 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
84 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
85 void Import::load(Scope *sc) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
86 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
87 DsymbolTable *dst; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
88 Dsymbol *s; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
89 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
90 //printf("Import::load('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
91 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
92 // See if existing module |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
93 dst = Package::resolve(packages, NULL, &pkg); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
94 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
95 s = dst->lookup(id); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
96 if (s) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
97 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
98 if (s->isModule()) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
99 mod = (Module *)s; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
100 else |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
101 error("package and module have the same name"); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
102 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
103 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
104 if (!mod) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
105 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
106 // Load module |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
107 mod = Module::load(loc, packages, id); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
108 dst->insert(id, mod); // id may be different from mod->ident, |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
109 // if so then insert alias |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
110 if (!mod->importedFrom) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
111 mod->importedFrom = sc ? sc->module->importedFrom : Module::rootModule; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
112 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
113 if (!pkg) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
114 pkg = mod; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
115 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
116 //printf("-Import::load('%s'), pkg = %p\n", toChars(), pkg); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
117 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
118 |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
119 char* escapePath(char* fname, char* buffer, int bufLen) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
120 char* res = buffer; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
121 bufLen -= 2; // for \0 and an occasional escape char |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
122 int dst = 0; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
123 for (; dst < bufLen && *fname; ++dst, ++fname) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
124 switch (*fname) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
125 case '(': |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
126 case ')': |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
127 case '\\': |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
128 buffer[dst++] = '\\'; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
129 // fall through |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
130 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
131 default: |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
132 buffer[dst] = *fname; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
133 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
134 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
135 buffer[dst] = '\0'; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
136 return buffer; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
137 } |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
138 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
139 void Import::semantic(Scope *sc) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
140 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
141 //printf("Import::semantic('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
142 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
143 load(sc); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
144 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
145 if (mod) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
146 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
147 #if 0 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
148 if (mod->loc.linnum != 0) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
149 { /* If the line number is not 0, then this is not |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
150 * a 'root' module, i.e. it was not specified on the command line. |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
151 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
152 mod->importedFrom = sc->module->importedFrom; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
153 assert(mod->importedFrom); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
154 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
155 #endif |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
156 |
875
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
157 // Modules need a list of each imported module |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
158 //printf("%s imports %s\n", sc->module->toChars(), mod->toChars()); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
159 sc->module->aimports.push(mod); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
160 |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
161 mod->semantic(); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
162 |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
163 /* Default to private importing |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
164 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
165 protection = sc->protection; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
166 if (!sc->explicitProtection) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
167 protection = PROTprivate; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
168 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
169 if (!isstatic && !aliasId && !names.dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
170 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
171 sc->scopesym->importScope(mod, protection); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
172 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
173 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
174 if (mod->needmoduleinfo) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
175 sc->module->needmoduleinfo = 1; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
176 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
177 sc = sc->push(mod); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
178 for (size_t i = 0; i < aliasdecls.dim; i++) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
179 { AliasDeclaration *ad = (AliasDeclaration *)aliasdecls.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
180 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
181 //printf("\tImport alias semantic('%s')\n", s->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
182 if (!mod->search(loc, (Identifier *)names.data[i], 0)) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
183 error("%s not found", ((Identifier *)names.data[i])->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
184 |
1358
78038e540342
Fix overload resolution issue in dmd bug 313/314 fix.
Christian Kamm <kamm incasoftware de>
parents:
875
diff
changeset
|
185 ad->importprot = protection; |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
186 ad->semantic(sc); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
187 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
188 sc = sc->pop(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
189 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
190 //printf("-Import::semantic('%s'), pkg = %p\n", toChars(), pkg); |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
191 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
192 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
193 if (global.params.moduleDeps != NULL) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
194 char fnameBuf[262]; // MAX_PATH+2 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
195 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
196 OutBuffer *const ob = global.params.moduleDeps; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
197 ob->printf("%s (%s) : ", |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
198 sc->module->toPrettyChars(), |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
199 escapePath(sc->module->srcfile->toChars(), fnameBuf, sizeof(fnameBuf) / sizeof(*fnameBuf)) |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
200 ); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
201 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
202 char* protStr = ""; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
203 switch (sc->protection) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
204 case PROTpublic: protStr = "public"; break; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
205 case PROTprivate: protStr = "private"; break; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
206 case PROTpackage: protStr = "package"; break; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
207 default: break; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
208 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
209 ob->writestring(protStr); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
210 if (isstatic) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
211 ob->writestring(" static"); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
212 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
213 ob->writestring(" : "); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
214 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
215 if (this->packages) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
216 for (size_t i = 0; i < this->packages->dim; i++) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
217 Identifier *pid = (Identifier *)this->packages->data[i]; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
218 ob->printf("%s.", pid->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
219 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
220 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
221 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
222 ob->printf("%s (%s)", |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
223 this->id->toChars(), |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
224 mod ? escapePath(mod->srcfile->toChars(), fnameBuf, sizeof(fnameBuf) / sizeof(*fnameBuf)) : "???" |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
225 ); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
226 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
227 if (aliasId) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
228 ob->printf(" -> %s", aliasId->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
229 } else { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
230 if (names.dim > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
231 ob->writestring(" : "); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
232 for (size_t i = 0; i < names.dim; i++) |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
233 { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
234 if (i > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
235 ob->writebyte(','); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
236 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
237 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
238 Identifier *name = (Identifier *)names.data[i]; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
239 Identifier *alias = (Identifier *)aliases.data[i]; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
240 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
241 if (!alias) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
242 ob->printf("%s", name->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
243 alias = name; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
244 } else { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
245 ob->printf("%s=%s", alias->toChars(), name->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
246 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
247 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
248 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
249 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
250 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
251 ob->writenl(); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
252 } |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
253 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
254 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
255 void Import::semantic2(Scope *sc) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
256 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
257 //printf("Import::semantic2('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
258 mod->semantic2(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
259 if (mod->needmoduleinfo) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
260 sc->module->needmoduleinfo = 1; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
261 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
262 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
263 Dsymbol *Import::toAlias() |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
264 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
265 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
266 return mod; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
267 return this; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
268 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
269 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
270 /***************************** |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
271 * Add import to sd's symbol table. |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
272 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
273 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
274 int Import::addMember(Scope *sc, ScopeDsymbol *sd, int memnum) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
275 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
276 int result = 0; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
277 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
278 if (names.dim == 0) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
279 return Dsymbol::addMember(sc, sd, memnum); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
280 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
281 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
282 result = Dsymbol::addMember(sc, sd, memnum); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
283 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
284 /* Instead of adding the import to sd's symbol table, |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
285 * add each of the alias=name pairs |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
286 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
287 for (size_t i = 0; i < names.dim; i++) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
288 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
289 Identifier *name = (Identifier *)names.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
290 Identifier *alias = (Identifier *)aliases.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
291 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
292 if (!alias) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
293 alias = name; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
294 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
295 TypeIdentifier *tname = new TypeIdentifier(loc, name); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
296 AliasDeclaration *ad = new AliasDeclaration(loc, alias, tname); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
297 result |= ad->addMember(sc, sd, memnum); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
298 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
299 aliasdecls.push(ad); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
300 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
301 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
302 return result; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
303 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
304 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
305 Dsymbol *Import::search(Loc loc, Identifier *ident, int flags) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
306 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
307 //printf("%s.Import::search(ident = '%s', flags = x%x)\n", toChars(), ident->toChars(), flags); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
308 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
309 if (!pkg) |
875
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
310 { load(NULL); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
311 mod->semantic(); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
312 } |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
313 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
314 // Forward it to the package/module |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
315 return pkg->search(loc, ident, flags); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
316 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
317 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
318 int Import::overloadInsert(Dsymbol *s) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
319 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
320 // Allow multiple imports of the same name |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
321 return s->isImport() != NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
322 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
323 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
324 void Import::toCBuffer(OutBuffer *buf, HdrGenState *hgs) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
325 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
326 if (hgs->hdrgen && id == Id::object) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
327 return; // object is imported by default |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
328 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
329 if (isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
330 buf->writestring("static "); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
331 buf->writestring("import "); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
332 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
333 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
334 buf->printf("%s = ", aliasId->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
335 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
336 if (packages && packages->dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
337 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
338 for (size_t i = 0; i < packages->dim; i++) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
339 { Identifier *pid = (Identifier *)packages->data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
340 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
341 buf->printf("%s.", pid->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
342 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
343 } |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
344 buf->printf("%s", id->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
345 if (names.dim > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
346 buf->writebyte(':'); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
347 for (size_t i = 0; i < names.dim; i++) |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
348 { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
349 if (i > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
350 buf->writebyte(','); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
351 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
352 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
353 Identifier *name = (Identifier *)names.data[i]; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
354 Identifier *alias = (Identifier *)aliases.data[i]; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
355 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
356 if (!alias) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
357 buf->printf("%s", name->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
358 alias = name; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
359 } else { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
360 buf->printf("%s=%s", alias->toChars(), name->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
361 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
362 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
363 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
364 buf->writebyte(';'); |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
365 buf->writenl(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
366 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
367 |