Mercurial > projects > ldc
annotate dmd/module.h @ 1138:4c8bb03e4fbc
Update DtoConstFP() to be correct after LLVM r67562, which changed the way the
APFloat constructor expects its i80 APInts to be formatted. (They're now
actually consistent with the x87 format)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Tue, 24 Mar 2009 15:24:59 +0100 |
parents | b30fe7e1dbb9 |
children | 1860414bf3b7 |
rev | line source |
---|---|
336 | 1 |
2 // Compiler implementation of the D programming language | |
3 // Copyright (c) 1999-2008 by Digital Mars | |
4 // All Rights Reserved | |
5 // written by Walter Bright | |
6 // http://www.digitalmars.com | |
7 // License for redistribution is by either the Artistic License | |
8 // in artistic.txt, or the GNU General Public License in gnu.txt. | |
9 // See the included readme.txt for details. | |
10 | |
11 #ifndef DMD_MODULE_H | |
12 #define DMD_MODULE_H | |
13 | |
14 #ifdef __DMC__ | |
15 #pragma once | |
16 #endif /* __DMC__ */ | |
17 | |
18 #include "root.h" | |
19 #include "dsymbol.h" | |
20 | |
21 struct ModuleInfoDeclaration; | |
22 struct ClassDeclaration; | |
23 struct ModuleDeclaration; | |
24 struct Macro; | |
25 struct Escape; | |
26 struct VarDeclaration; | |
27 struct Library; | |
28 | |
29 // Back end | |
30 #if IN_LLVM | |
31 struct DValue; | |
32 typedef DValue elem; | |
1052
12ea38902e83
Add '-singleobj' command line switch that will tell LDC to link LLVM modules internally and only emit a single object file.
Christian Kamm <kamm incasoftware de>
parents:
957
diff
changeset
|
33 namespace llvm { class Module; } |
336 | 34 #else |
35 #ifdef IN_GCC | |
36 union tree_node; typedef union tree_node elem; | |
37 #else | |
38 struct elem; | |
39 #endif | |
40 #endif | |
41 | |
42 struct Package : ScopeDsymbol | |
43 { | |
44 Package(Identifier *ident); | |
45 const char *kind(); | |
46 | |
47 static DsymbolTable *resolve(Array *packages, Dsymbol **pparent, Package **ppkg); | |
48 | |
49 Package *isPackage() { return this; } | |
50 | |
51 virtual void semantic(Scope *sc) { } | |
52 }; | |
53 | |
54 struct Module : Package | |
55 { | |
56 static Module *rootModule; | |
57 static DsymbolTable *modules; // symbol table of all modules | |
58 static Array amodules; // array of all modules | |
59 static Array deferred; // deferred Dsymbol's needing semantic() run on them | |
60 static unsigned dprogress; // progress resolving the deferred list | |
61 static void init(); | |
62 | |
63 static ClassDeclaration *moduleinfo; | |
64 | |
65 | |
66 const char *arg; // original argument name | |
67 ModuleDeclaration *md; // if !NULL, the contents of the ModuleDeclaration declaration | |
68 File *srcfile; // input source file | |
580
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
69 |
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
70 File *objfile; // output object file |
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
71 File *docfile; // output doc file |
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
72 File *hdrfile; // output hdr file |
486
a34078905d01
Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
432
diff
changeset
|
73 |
336 | 74 unsigned errors; // if any errors in file |
75 unsigned numlines; // number of lines in source file | |
76 int isHtml; // if it is an HTML file | |
77 int isDocFile; // if it is a documentation input file, not D source | |
78 int needmoduleinfo; | |
79 #ifdef IN_GCC | |
80 int strictlyneedmoduleinfo; | |
81 #endif | |
82 | |
1103
b30fe7e1dbb9
- Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1052
diff
changeset
|
83 int selfimports; // 0: don't know, 1: does not, 2: does |
b30fe7e1dbb9
- Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1052
diff
changeset
|
84 int selfImports(); // returns !=0 if module imports itself |
b30fe7e1dbb9
- Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1052
diff
changeset
|
85 |
336 | 86 int insearch; |
87 Identifier *searchCacheIdent; | |
88 Dsymbol *searchCacheSymbol; // cached value of search | |
89 int searchCacheFlags; // cached flags | |
90 | |
91 int semanticstarted; // has semantic() been started? | |
92 int semanticdone; // has semantic() been done? | |
93 int root; // != 0 if this is a 'root' module, | |
94 // i.e. a module that will be taken all the | |
95 // way to an object file | |
96 Module *importedFrom; // module from command line we're imported from, | |
97 // i.e. a module that will be taken all the | |
98 // way to an object file | |
99 | |
100 Array *decldefs; // top level declarations for this Module | |
101 | |
102 Array aimports; // all imported modules | |
103 | |
104 ModuleInfoDeclaration *vmoduleinfo; | |
105 | |
106 unsigned debuglevel; // debug level | |
107 Array *debugids; // debug identifiers | |
108 Array *debugidsNot; // forward referenced debug identifiers | |
109 | |
110 unsigned versionlevel; // version level | |
111 Array *versionids; // version identifiers | |
112 Array *versionidsNot; // forward referenced version identifiers | |
113 | |
114 Macro *macrotable; // document comment macros | |
432 | 115 struct Escape *escapetable; // document comment escapes |
336 | 116 |
604
a30fc28e8f23
Make creating and deleting of doc and hdr files dependent on whether doc and
Christian Kamm <kamm incasoftware de>
parents:
580
diff
changeset
|
117 int doDocComment; // enable generating doc comments for this module |
a30fc28e8f23
Make creating and deleting of doc and hdr files dependent on whether doc and
Christian Kamm <kamm incasoftware de>
parents:
580
diff
changeset
|
118 int doHdrGen; // enable generating header file for this module |
a30fc28e8f23
Make creating and deleting of doc and hdr files dependent on whether doc and
Christian Kamm <kamm incasoftware de>
parents:
580
diff
changeset
|
119 |
336 | 120 Module(char *arg, Identifier *ident, int doDocComment, int doHdrGen); |
121 ~Module(); | |
122 | |
123 static Module *load(Loc loc, Array *packages, Identifier *ident); | |
124 | |
125 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); | |
126 const char *kind(); | |
127 void read(Loc loc); // read file | |
128 #if IN_GCC | |
129 void parse(bool dump_source = false); // syntactic parse | |
130 #else | |
131 void parse(); // syntactic parse | |
132 #endif | |
751
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
703
diff
changeset
|
133 void semantic(Scope* unused_sc = NULL); // semantic analysis |
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
703
diff
changeset
|
134 void semantic2(Scope* unused_sc = NULL); // pass 2 semantic analysis |
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
703
diff
changeset
|
135 void semantic3(Scope* unused_sc = NULL); // pass 3 semantic analysis |
336 | 136 void inlineScan(); // scan for functions to inline |
137 #ifdef _DH | |
138 void genhdrfile(); // generate D import file | |
139 #endif | |
580
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
140 // void gensymfile(); |
336 | 141 void gendocfile(); |
142 int needModuleInfo(); | |
143 Dsymbol *search(Loc loc, Identifier *ident, int flags); | |
144 void deleteObjFile(); | |
145 void addDeferredSemantic(Dsymbol *s); | |
146 void runDeferredSemantic(); | |
875
330f999ade44
Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
849
diff
changeset
|
147 int imports(Module *m); |
336 | 148 |
149 // Back end | |
150 | |
151 int doppelganger; // sub-module | |
152 Symbol *cov; // private uint[] __coverage; | |
153 unsigned *covb; // bit array of valid code line numbers | |
154 | |
155 Symbol *sictor; // module order independent constructor | |
156 Symbol *sctor; // module constructor | |
157 Symbol *sdtor; // module destructor | |
158 Symbol *stest; // module unit test | |
159 | |
160 Symbol *sfilename; // symbol for filename | |
161 | |
162 Symbol *massert; // module assert function | |
163 Symbol *toModuleAssert(); // get module assert function | |
164 | |
165 Symbol *marray; // module array bounds function | |
166 Symbol *toModuleArray(); // get module array bounds function | |
167 | |
168 | |
169 static Symbol *gencritsec(); | |
170 elem *toEfilename(); | |
171 elem *toEmodulename(); | |
172 | |
173 Symbol *toSymbol(); | |
174 void genmoduleinfo(); | |
175 | |
664
eef8ac26c66c
Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents:
604
diff
changeset
|
176 // LDC |
1052
12ea38902e83
Add '-singleobj' command line switch that will tell LDC to link LLVM modules internally and only emit a single object file.
Christian Kamm <kamm incasoftware de>
parents:
957
diff
changeset
|
177 llvm::Module* genLLVMModule(int multiobj); |
580
7824c21a58e3
Restructure path handling a bit. Fixes #66.
Christian Kamm <kamm incasoftware de>
parents:
486
diff
changeset
|
178 void buildTargetFiles(); |
1103
b30fe7e1dbb9
- Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1052
diff
changeset
|
179 File* buildFilePath(const char* forcename, const char* path, const char* ext); |
336 | 180 Module *isModule() { return this; } |
486
a34078905d01
Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
432
diff
changeset
|
181 |
a34078905d01
Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
432
diff
changeset
|
182 bool llvmForceLogging; |
703
06576ece1a1b
Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
676
diff
changeset
|
183 |
06576ece1a1b
Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
676
diff
changeset
|
184 // array ops emitted in this module already |
06576ece1a1b
Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
676
diff
changeset
|
185 StringTable arrayfuncs; |
336 | 186 }; |
187 | |
188 | |
189 struct ModuleDeclaration | |
190 { | |
191 Identifier *id; | |
192 Array *packages; // array of Identifier's representing packages | |
193 | |
194 ModuleDeclaration(Array *packages, Identifier *id); | |
195 | |
196 char *toChars(); | |
197 }; | |
198 | |
199 #endif /* DMD_MODULE_H */ |