annotate dmd/mars.h @ 1052:12ea38902e83

Add '-singleobj' command line switch that will tell LDC to link LLVM modules internally and only emit a single object file. The switch allows the optimizer and inliner to run on all modules at once and opens the door for template instantiation improvements that should lower compile time and executable size.
author Christian Kamm <kamm incasoftware de>
date Sat, 07 Mar 2009 19:38:00 +0100
parents 2667e3a145be
children f0b6549055ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
2 // Compiler implementation of the D programming language
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
3 // Copyright (c) 1999-2007 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
11 #ifndef DMD_MARS_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
12 #define DMD_MARS_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
14 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
15 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
16 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
17
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
18 #include <stdint.h>
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
19 #include <stdarg.h>
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
20 #include <stddef.h>
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
21 #define __STDC_FORMAT_MACROS 1
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
22 #include <inttypes.h>
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
23 #include <stdarg.h>
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
24
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
25 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
26 #ifdef DEBUG
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
27 #undef assert
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
28 #define assert(e) (static_cast<void>((e) || (printf("assert %s(%d) %s\n", __FILE__, __LINE__, #e), halt())))
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
29 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
30 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
31
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
32 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
33 /* Changes for the GDC compiler by David Friedman */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
34 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
35
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
36 #define DMDV2 0 // Version 2.0 features
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
37 #define BREAKABI 1 // 0 if not ready to break the ABI just yet
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
38
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
39 struct Array;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
40
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 651
diff changeset
41 // LDC
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
42 enum ARCH
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
43 {
566
68d7df3f9b05 Added some sanity checks for target detection.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 550
diff changeset
44 ARCHinvalid,
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
45 ARCHx86,
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
46 ARCHx86_64,
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
47 ARCHppc,
734
6dcab994ddc3 Fold in mandel's patch for ARM from #106
Christian Kamm <kamm incasoftware de>
parents: 723
diff changeset
48 ARCHppc_64,
735
eee9efe5b51f Attempt at getting LLVM to provide a proper target data layout. Should assert now if things are borked.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 734
diff changeset
49 ARCHarm,
eee9efe5b51f Attempt at getting LLVM to provide a proper target data layout. Should assert now if things are borked.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 734
diff changeset
50 ARCHthumb
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
51 };
708
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
52 enum OUTPUTFLAG
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
53 {
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
54 OUTPUTFLAGno,
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
55 OUTPUTFLAGdefault, // for the .o default
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
56 OUTPUTFLAGset // for -output
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
57 };
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
58
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
59 enum OS
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
60 {
566
68d7df3f9b05 Added some sanity checks for target detection.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 550
diff changeset
61 OSinvalid,
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
62 OSLinux,
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
63 OSWindows,
637
29dc68c949b0 Applied the FreeBSD patch from Ralith, closes ticket #95 , slightly changed but basically the same. Thanx Ralith :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 580
diff changeset
64 OSMacOSX,
872
aa953cc960b6 Apply BlueZeniX's patch for OpenSolaris compatibility. Fixes #158.
Christian Kamm <kamm incasoftware de>
parents: 853
diff changeset
65 OSFreeBSD,
aa953cc960b6 Apply BlueZeniX's patch for OpenSolaris compatibility. Fixes #158.
Christian Kamm <kamm incasoftware de>
parents: 853
diff changeset
66 OSSolaris,
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
67 };
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
68
918
a4fcc13da3cd Changed templates and typeinfo to use linkonce linkage instead of weak linkage, this should fix inlining problems, fixing bug #197 . If problems show up, it's easy to change it back by changing the define in mars.h . I'm 95% sure this is safe, given how we handle templates.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 876
diff changeset
69 // make it easier to test new linkage types
a4fcc13da3cd Changed templates and typeinfo to use linkonce linkage instead of weak linkage, this should fix inlining problems, fixing bug #197 . If problems show up, it's easy to change it back by changing the define in mars.h . I'm 95% sure this is safe, given how we handle templates.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 876
diff changeset
70 #define TEMPLATE_LINKAGE_TYPE llvm::GlobalValue::LinkOnceLinkage
a4fcc13da3cd Changed templates and typeinfo to use linkonce linkage instead of weak linkage, this should fix inlining problems, fixing bug #197 . If problems show up, it's easy to change it back by changing the define in mars.h . I'm 95% sure this is safe, given how we handle templates.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 876
diff changeset
71 #define TYPEINFO_LINKAGE_TYPE llvm::GlobalValue::LinkOnceLinkage
a4fcc13da3cd Changed templates and typeinfo to use linkonce linkage instead of weak linkage, this should fix inlining problems, fixing bug #197 . If problems show up, it's easy to change it back by changing the define in mars.h . I'm 95% sure this is safe, given how we handle templates.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 876
diff changeset
72
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
73 // Put command line switches in here
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
74 struct Param
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
75 {
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
76 bool obj; // write object file
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
77 bool link; // perform link
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
78 bool verbose; // verbose compile
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
79 char symdebug; // insert debug symbolic information
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
80 bool optimize; // run optimizer
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
81 char optimizeLevel; // optimization level
534
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
82 ARCH cpu; // target CPU
7e2867ed70d9 Get rid of isLinux and isWindows in favor of global.params.os.
Christian Kamm <kamm incasoftware de>
parents: 445
diff changeset
83 OS os; // target OS
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
84 bool is64bit; // generate 64 bit code
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
85 bool isLE; // generate little endian code
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
86 bool useDeprecated; // allow use of deprecated features
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
87 bool useAssert; // generate runtime code for assert()'s
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
88 bool useInvariants; // generate class invariant checks
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
89 bool useIn; // generate precondition checks
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
90 bool useOut; // generate postcondition checks
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
91 bool useArrayBounds; // generate array bounds checks
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
92 bool useSwitchError; // check for switches without a default
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
93 bool useUnitTests; // generate unittest code
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
94 bool useInline; // inline expand functions
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
95 bool warnings; // enable warnings
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
96 char Dversion; // D version number
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
97
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
98 char *argv0; // program name
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
99 Array *imppath; // array of char*'s of where to look for import modules
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
100 Array *fileImppath; // array of char*'s of where to look for file import modules
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
101 char *objdir; // .obj file output directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
102 char *objname; // .obj file output name
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
103
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
104 bool doDocComments; // process embedded documentation comments
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
105 char *docdir; // write documentation file to docdir directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
106 char *docname; // write documentation file to docname
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
107 Array *ddocfiles; // macro include files for Ddoc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
108
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
109 bool doHdrGeneration; // process embedded documentation comments
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
110 char *hdrdir; // write 'header' file to docdir directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
111 char *hdrname; // write 'header' file to docname
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
112
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
113 unsigned debuglevel; // debug level
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
114 Array *debugids; // debug identifiers
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
115
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
116 unsigned versionlevel; // version level
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
117 Array *versionids; // version identifiers
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
118
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
119 bool dump_source;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
120
567
aaba4f7c6d8a Get rid of runtime path. Allow defaultlib and debuglib switches to be given multiple times.
Christian Kamm <kamm incasoftware de>
parents: 550
diff changeset
121 Array *defaultlibnames; // default libraries for non-debug builds
aaba4f7c6d8a Get rid of runtime path. Allow defaultlib and debuglib switches to be given multiple times.
Christian Kamm <kamm incasoftware de>
parents: 550
diff changeset
122 Array *debuglibnames; // default libraries for debug builds
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
123
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
124 char *xmlname; // filename for XML output
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
125
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
126 // Hidden debug switches
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
127 bool debuga;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
128 bool debugb;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
129 bool debugc;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
130 bool debugf;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
131 bool debugr;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
132 bool debugw;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
133 bool debugx;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
134 bool debugy;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
135
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
136 bool run; // run resulting executable
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
137
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
138 // Linker stuff
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
139 Array *objfiles;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
140 Array *linkswitches;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
141 Array *libfiles;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
142 char *deffile;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
143 char *resfile;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
144 char *exefile;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
145
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 651
diff changeset
146 // LDC stuff
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
147 OUTPUTFLAG output_ll;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
148 OUTPUTFLAG output_bc;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
149 OUTPUTFLAG output_s;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
150 OUTPUTFLAG output_o;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
151 bool llvmInline;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
152 bool llvmAnnotate;
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 918
diff changeset
153 bool useInlineAsm;
699
ed9a9e6dd1cc Started changing target triple stuff, part of fixing #97
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 694
diff changeset
154
ed9a9e6dd1cc Started changing target triple stuff, part of fixing #97
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 694
diff changeset
155 // target stuff
988
2667e3a145be - Fixed LLVM style CL args for D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 986
diff changeset
156 const char* llvmArch;
2667e3a145be - Fixed LLVM style CL args for D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 986
diff changeset
157 const char *targetTriple;
2667e3a145be - Fixed LLVM style CL args for D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 986
diff changeset
158 const char *dataLayout;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
159 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
160
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
161 struct Global
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
162 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
163 char *mars_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
164 char *sym_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
165 char *obj_ext;
708
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
166 #if _WIN32
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
167 char *obj_ext_alt;
fd5665da3a27 Hopefully sensible command switch handling. Changed default ext to .o on Windows.
Christian Kamm <kamm incasoftware de>
parents: 699
diff changeset
168 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
169 char *ll_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
170 char *bc_ext;
675
bfe5229f9d8e Disable bc output by default. Remove -dis. Add -output-bc, -output-ll, -output-s.
Christian Kamm <kamm incasoftware de>
parents: 663
diff changeset
171 char *s_ext;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
172 char *doc_ext; // for Ddoc generated files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
173 char *ddoc_ext; // for Ddoc macro include files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
174 char *hdr_ext; // for D 'header' import files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
175 char *copyright;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
176 char *written;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
177 Array *path; // Array of char*'s which form the import lookup path
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
178 Array *filePath; // Array of char*'s which form the file import lookup path
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
179 int structalign;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
180 char *version;
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 651
diff changeset
181 char *ldc_version;
853
82ad6c0c601c Add Elrood's patch to output LDC and LLVM source revs.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
182 char *llvm_version;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
183
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
184 Param params;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
185 unsigned errors; // number of errors reported so far
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
186 unsigned gag; // !=0 means gag reporting of errors
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
187
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
188 Global();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
189 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
190
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
191 extern Global global;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
192
876
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
193 /* Set if Windows Structured Exception Handling C extensions are supported.
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
194 * Apparently, VC has dropped support for these?
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
195 */
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
196 #define WINDOWS_SEH (_WIN32 && __DMC__)
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
197
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 872
diff changeset
198
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
199 #if __GNUC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
200 //#define memicmp strncasecmp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
201 //#define stricmp strcasecmp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
202 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
203
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
204 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
205 typedef _Complex long double complex_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
206 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
207 #ifndef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
208 #include "complex_t.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
209 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
210 #ifdef __APPLE__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
211 //#include "complex.h"//This causes problems with include the c++ <complex> and not the C "complex.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
212 #define integer_t dmd_integer_t
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
213 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
214 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
215
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
216 // Be careful not to care about sign when using integer_t
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
217 typedef uint64_t integer_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
218
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
219 // Signed and unsigned variants
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
220 typedef int64_t sinteger_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
221 typedef uint64_t uinteger_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
222
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
223 typedef int8_t d_int8;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
224 typedef uint8_t d_uns8;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
225 typedef int16_t d_int16;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
226 typedef uint16_t d_uns16;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
227 typedef int32_t d_int32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
228 typedef uint32_t d_uns32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
229 typedef int64_t d_int64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
230 typedef uint64_t d_uns64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
231
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
232 typedef float d_float32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
233 typedef double d_float64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
234 typedef long double d_float80;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
235
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
236 typedef d_uns8 d_char;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
237 typedef d_uns16 d_wchar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
238 typedef d_uns32 d_dchar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
239
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
240 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
241 #include "d-gcc-real.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
242 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
243 typedef long double real_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
244 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
245
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
246 // Modify OutBuffer::writewchar to write the correct size of wchar
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
247 #if _WIN32
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
248 #define writewchar writeword
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
249 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
250 // This needs a configuration test...
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
251 #define writewchar write4
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
252 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
253
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
254 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
255 #include "d-gcc-complex_t.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
256 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
257
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
258 // taken from GDC
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
259 // for handling printf incompatibilities
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
260 #if __MSVCRT__
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
261 #define PRIuSIZE "Iu"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
262 #define PRIxSIZE "Ix"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
263 #elif __MINGW32__
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
264 #define PRIuSIZE "u"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
265 #define PRIxSIZE "x"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
266 #else
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
267 #define PRIuSIZE "zu"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
268 #define PRIxSIZE "zx"
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
269 #endif
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 277
diff changeset
270
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
271 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
272
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
273 //typedef unsigned Loc; // file location
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
274 struct Loc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
275 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
276 char *filename;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
277 unsigned linnum;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
278
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
279 Loc()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
280 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
281 linnum = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
282 filename = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
283 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
284
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
285 Loc(int x)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
286 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
287 linnum = x;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
288 filename = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
289 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
290
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
291 Loc(Module *mod, unsigned linnum);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
292
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
293 char *toChars() const;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
294 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
295
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
296 #ifndef GCC_SAFE_DMD
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
297 #define TRUE 1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
298 #define FALSE 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
299 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
300
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
301 #define INTERFACE_OFFSET 0 // if 1, put classinfo as first entry
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
302 // in interface vtbl[]'s
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
303 #define INTERFACE_VIRTUAL 0 // 1 means if an interface appears
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
304 // in the inheritance graph multiple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
305 // times, only one is used
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
306
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
307 enum LINK
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
308 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
309 LINKdefault,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
310 LINKd,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
311 LINKc,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
312 LINKcpp,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
313 LINKwindows,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
314 LINKpascal,
723
55f6c2e454d7 Implemented correct parameter order according to x86-32 ABI documentation.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 708
diff changeset
315
55f6c2e454d7 Implemented correct parameter order according to x86-32 ABI documentation.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 708
diff changeset
316 // LDC
55f6c2e454d7 Implemented correct parameter order according to x86-32 ABI documentation.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 708
diff changeset
317 LINKintrinsic,
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
318 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
319
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
320 enum DYNCAST
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
321 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
322 DYNCAST_OBJECT,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
323 DYNCAST_EXPRESSION,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
324 DYNCAST_DSYMBOL,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
325 DYNCAST_TYPE,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
326 DYNCAST_IDENTIFIER,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
327 DYNCAST_TUPLE,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
328 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
329
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
330 enum MATCH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
331 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
332 MATCHnomatch, // no match
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
333 MATCHconvert, // match with conversions
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
334 #if DMDV2
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
335 MATCHconst, // match with conversion to const
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
336 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
337 MATCHexact // exact match
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
338 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
339
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
340 void error(Loc loc, const char *format, ...);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
341 void verror(Loc loc, const char *format, va_list);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
342 void fatal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
343 void err_nomem();
988
2667e3a145be - Fixed LLVM style CL args for D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 986
diff changeset
344 void inifile(char *argv0, const char *inifile);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
345 void halt();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
346
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
347 /*** Where to send error messages ***/
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 735
diff changeset
348 #if IN_GCC || IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
349 #define stdmsg stderr
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
350 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
351 #define stdmsg stdout
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
352 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
353
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
354 #endif /* DMD_MARS_H */