Mercurial > projects > ldc
annotate dmd/import.c @ 1650:40bd4a0d4870
Update to work with LLVM 2.7.
Removed use of dyn_cast, llvm no compiles
without exceptions and rtti by
default. We do need exceptions for the libconfig stuff, but rtti isn't
necessary (anymore).
Debug info needs to be rewritten, as in LLVM 2.7 the format has
completely changed. To have something to look at while rewriting, the
old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means
that you have to define this to compile at the moment.
Updated tango 0.99.9 patch to include updated EH runtime code, which is
needed for LLVM 2.7 as well.
author | Tomas Lindquist Olsen |
---|---|
date | Wed, 19 May 2010 12:42:32 +0200 |
parents | def7a1d494fd |
children |
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 |
1587 | 3 // Copyright (c) 1999-2009 by Digital Mars |
846
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" |
1587 | 24 #include "attrib.h" |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
25 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
26 /********************************* Import ****************************/ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
27 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
28 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
|
29 int isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
30 : Dsymbol(id) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
31 { |
1587 | 32 assert(id); |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
33 this->loc = loc; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
34 this->packages = packages; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
35 this->id = id; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
36 this->aliasId = aliasId; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
37 this->isstatic = isstatic; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
38 protection = PROTundefined; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
39 pkg = NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
40 mod = NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
41 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
42 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
43 this->ident = aliasId; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
44 // 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
|
45 else if (packages && packages->dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
46 this->ident = (Identifier *)packages->data[0]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
47 } |
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 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
|
50 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
51 if (isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
52 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
|
53 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
54 if (!aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
55 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
|
56 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
57 names.push(name); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
58 aliases.push(alias); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
59 } |
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 const char *Import::kind() |
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 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
|
64 } |
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 enum PROT Import::prot() |
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 return protection; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
69 } |
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 Dsymbol *Import::syntaxCopy(Dsymbol *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 assert(!s); |
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 Import *si; |
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 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
|
78 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
79 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
|
80 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
81 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
|
82 } |
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 return si; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
85 } |
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 void Import::load(Scope *sc) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
88 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
89 //printf("Import::load('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
90 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
91 // See if existing module |
1587 | 92 DsymbolTable *dst = Package::resolve(packages, NULL, &pkg); |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
93 |
1587 | 94 Dsymbol *s = dst->lookup(id); |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
95 if (s) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
96 { |
1587 | 97 #if TARGET_NET |
98 mod = (Module *)s; | |
99 #else | |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
100 if (s->isModule()) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
101 mod = (Module *)s; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
102 else |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
103 error("package and module have the same name"); |
1587 | 104 #endif |
846
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 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
107 if (!mod) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
108 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
109 // Load module |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
110 mod = Module::load(loc, packages, id); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
111 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
|
112 // if so then insert alias |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
113 if (!mod->importedFrom) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
114 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
|
115 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
116 if (!pkg) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
117 pkg = mod; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
118 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
119 //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
|
120 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
121 |
1587 | 122 void escapePath(OutBuffer *buf, const char *fname) |
123 { | |
124 while (1) | |
125 { | |
126 switch (*fname) | |
127 { | |
128 case 0: | |
129 return; | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
130 case '(': |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
131 case ')': |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
132 case '\\': |
1587 | 133 buf->writebyte('\\'); |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
134 default: |
1587 | 135 buf->writebyte(*fname); |
136 break; | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
137 } |
1587 | 138 fname++; |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
139 } |
1587 | 140 } |
141 | |
142 void Import::importAll(Scope *sc) | |
143 { | |
144 if (!mod) | |
145 { | |
146 load(sc); | |
147 mod->importAll(0); | |
148 | |
149 if (!isstatic && !aliasId && !names.dim) | |
150 { | |
151 /* Default to private importing | |
152 */ | |
153 enum PROT prot = sc->protection; | |
154 if (!sc->explicitProtection) | |
155 prot = PROTprivate; | |
156 sc->scopesym->importScope(mod, prot); | |
157 } | |
158 } | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
159 } |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
160 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
161 void Import::semantic(Scope *sc) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
162 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
163 //printf("Import::semantic('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
164 |
1587 | 165 // Load if not already done so |
166 if (!mod) | |
167 { load(sc); | |
168 mod->importAll(0); | |
169 } | |
846
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 if (mod) |
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 #if 0 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
174 if (mod->loc.linnum != 0) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
175 { /* 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
|
176 * 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
|
177 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
178 mod->importedFrom = sc->module->importedFrom; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
179 assert(mod->importedFrom); |
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 #endif |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
182 |
875
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
183 // 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
|
184 //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
|
185 sc->module->aimports.push(mod); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
186 |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
187 /* Default to private importing |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
188 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
189 protection = sc->protection; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
190 if (!sc->explicitProtection) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
191 protection = PROTprivate; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
192 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
193 if (!isstatic && !aliasId && !names.dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
194 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
195 sc->scopesym->importScope(mod, protection); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
196 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
197 |
1587 | 198 mod->semantic(); |
199 | |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
200 if (mod->needmoduleinfo) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
201 sc->module->needmoduleinfo = 1; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
202 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
203 sc = sc->push(mod); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
204 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
|
205 { AliasDeclaration *ad = (AliasDeclaration *)aliasdecls.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
206 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
207 //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
|
208 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
|
209 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
|
210 |
1358
78038e540342
Fix overload resolution issue in dmd bug 313/314 fix.
Christian Kamm <kamm incasoftware de>
parents:
875
diff
changeset
|
211 ad->importprot = protection; |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
212 ad->semantic(sc); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
213 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
214 sc = sc->pop(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
215 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
216 //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
|
217 |
1587 | 218 if (global.params.moduleDeps != NULL) |
219 { | |
220 /* The grammar of the file is: | |
221 * ImportDeclaration | |
222 * ::= BasicImportDeclaration [ " : " ImportBindList ] [ " -> " | |
223 * ModuleAliasIdentifier ] "\n" | |
224 * | |
225 * BasicImportDeclaration | |
226 * ::= ModuleFullyQualifiedName " (" FilePath ") : " Protection | |
227 * " [ " static" ] : " ModuleFullyQualifiedName " (" FilePath ")" | |
228 * | |
229 * FilePath | |
230 * - any string with '(', ')' and '\' escaped with the '\' character | |
231 */ | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
232 |
1587 | 233 OutBuffer *ob = global.params.moduleDeps; |
234 | |
235 ob->writestring(sc->module->toPrettyChars()); | |
236 ob->writestring(" ("); | |
237 escapePath(ob, sc->module->srcfile->toChars()); | |
238 ob->writestring(") : "); | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
239 |
1587 | 240 ProtDeclaration::protectionToCBuffer(ob, sc->protection); |
241 if (isstatic) | |
242 StorageClassDeclaration::stcToCBuffer(ob, STCstatic); | |
243 ob->writestring(": "); | |
244 | |
245 if (packages) | |
246 { | |
247 for (size_t i = 0; i < packages->dim; i++) | |
248 { | |
249 Identifier *pid = (Identifier *)packages->data[i]; | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
250 ob->printf("%s.", pid->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
251 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
252 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
253 |
1587 | 254 ob->writestring(id->toChars()); |
255 ob->writestring(" ("); | |
256 if (mod) | |
257 escapePath(ob, mod->srcfile->toChars()); | |
258 else | |
259 ob->writestring("???"); | |
260 ob->writebyte(')'); | |
261 | |
262 for (size_t i = 0; i < names.dim; i++) | |
263 { | |
264 if (i == 0) | |
265 ob->writebyte(':'); | |
266 else | |
267 ob->writebyte(','); | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
268 |
1587 | 269 Identifier *name = (Identifier *)names.data[i]; |
270 Identifier *alias = (Identifier *)aliases.data[i]; | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
271 |
1587 | 272 if (!alias) |
273 { | |
274 ob->printf("%s", name->toChars()); | |
275 alias = name; | |
276 } | |
277 else | |
278 ob->printf("%s=%s", alias->toChars(), name->toChars()); | |
279 } | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
280 |
1587 | 281 if (aliasId) |
282 ob->printf(" -> %s", aliasId->toChars()); | |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
283 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
284 ob->writenl(); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
285 } |
1587 | 286 |
287 //printf("-Import::semantic('%s'), pkg = %p\n", toChars(), pkg); | |
846
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 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
290 void Import::semantic2(Scope *sc) |
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 //printf("Import::semantic2('%s')\n", toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
293 mod->semantic2(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
294 if (mod->needmoduleinfo) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
295 sc->module->needmoduleinfo = 1; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
296 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
297 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
298 Dsymbol *Import::toAlias() |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
299 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
300 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
301 return mod; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
302 return this; |
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 /***************************** |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
306 * 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
|
307 */ |
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 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
|
310 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
311 int result = 0; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
312 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
313 if (names.dim == 0) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
314 return Dsymbol::addMember(sc, sd, memnum); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
315 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
316 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
317 result = Dsymbol::addMember(sc, sd, memnum); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
318 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
319 /* 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
|
320 * 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
|
321 */ |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
322 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
|
323 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
324 Identifier *name = (Identifier *)names.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
325 Identifier *alias = (Identifier *)aliases.data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
326 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
327 if (!alias) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
328 alias = name; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
329 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
330 TypeIdentifier *tname = new TypeIdentifier(loc, name); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
331 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
|
332 result |= ad->addMember(sc, sd, memnum); |
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 aliasdecls.push(ad); |
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 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
337 return result; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
338 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
339 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
340 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
|
341 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
342 //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
|
343 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
344 if (!pkg) |
875
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
345 { load(NULL); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
346 mod->semantic(); |
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
846
diff
changeset
|
347 } |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
348 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
349 // Forward it to the package/module |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
350 return pkg->search(loc, ident, flags); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
351 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
352 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
353 int Import::overloadInsert(Dsymbol *s) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
354 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
355 // 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
|
356 return s->isImport() != NULL; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
357 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
358 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
359 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
|
360 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
361 if (hgs->hdrgen && id == Id::object) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
362 return; // object is imported by default |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
363 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
364 if (isstatic) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
365 buf->writestring("static "); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
366 buf->writestring("import "); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
367 if (aliasId) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
368 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
369 buf->printf("%s = ", aliasId->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
370 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
371 if (packages && packages->dim) |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
372 { |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
373 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
|
374 { Identifier *pid = (Identifier *)packages->data[i]; |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
375 |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
376 buf->printf("%s.", pid->toChars()); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
377 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
378 } |
1402
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
379 buf->printf("%s", id->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
380 if (names.dim > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
381 buf->writebyte(':'); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
382 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
|
383 { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
384 if (i > 0) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
385 buf->writebyte(','); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
386 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
387 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
388 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
|
389 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
|
390 |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
391 if (!alias) { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
392 buf->printf("%s", name->toChars()); |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
393 alias = name; |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
394 } else { |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
395 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
|
396 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
397 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
398 } |
1311dabc6a1f
Merged xfBuild patch for dependency tree generation. See #286.
Christian Kamm <kamm incasoftware de>
parents:
1358
diff
changeset
|
399 buf->writebyte(';'); |
846
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
400 buf->writenl(); |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
401 } |
bc982f1ad106
Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
626
diff
changeset
|
402 |