annotate dmd/mars.h @ 270:d9d5d59873d8 trunk

[svn r291] Fixed a bunch of the old Phobos tests to work with Tango. Branch statements now emit a new block after it. Fixed the _adSort runtime function had a bad signature. Added a missing dot prefix on compiler generated string tables for string switch. Fixed, PTRSIZE seems like it was wrong on 64bit, now it definitely gets set properly.
author lindquist
date Mon, 16 Jun 2008 16:01:19 +0200
parents a168a2c3ea48
children 665b81613475
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>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
19 #include <string>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
20 #include <cstdarg>
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
21
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
22 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
23 #ifdef DEBUG
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
24 #undef assert
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
25 #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
26 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
27 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
28
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
29 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
30 /* Changes for the GDC compiler by David Friedman */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
31 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
32
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
33 #define V2 0 // Version 2.0 features
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
34 #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
35
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
36 struct Array;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
37
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
38 // Put command line switches in here
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
39 struct Param
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
40 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
41 char obj; // write object file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
42 char link; // perform link
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
43 char trace; // insert profiling hooks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
44 char quiet; // suppress non-error messages
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
45 char verbose; // verbose compile
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
46 char symdebug; // insert debug symbolic information
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
47 char optimize; // run optimizer
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
48 char optimizeLevel; // optimization level
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
49 char cpu; // target CPU
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
50 char is64bit; // generate 64 bit code
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
51 char isLE; // generate little endian code
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
52 char isLinux; // generate code for linux
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
53 char isWindows; // generate code for Windows
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
54 char scheduler; // which scheduler to use
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
55 char useDeprecated; // allow use of deprecated features
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
56 char useAssert; // generate runtime code for assert()'s
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
57 char useInvariants; // generate class invariant checks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
58 char useIn; // generate precondition checks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
59 char useOut; // generate postcondition checks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
60 char useArrayBounds; // generate array bounds checks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
61 char useSwitchError; // check for switches without a default
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
62 char useUnitTests; // generate unittest code
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
63 char useInline; // inline expand functions
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
64 char release; // build release version
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
65 char preservePaths; // !=0 means don't strip path from source file
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
66 char warnings; // enable warnings
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
67 char pic; // generate position-independent-code for shared libs
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
68 char cov; // generate code coverage data
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
69 char nofloat; // code should not pull in floating point support
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
70 char noruntime; // code is not allowed to make implicit calls to the runtime
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
71 char novalidate;// no bitcode validation
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
72 char Dversion; // D version number
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
73 char ignoreUnsupportedPragmas; // rather than error on them
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
74
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
75 char *argv0; // program name
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
76 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
77 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
78 char *runtimeImppath; // char* of where to look for the core runtime
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
79 char *objdir; // .obj file output directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
80 char *objname; // .obj file output name
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
81
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
82 char doDocComments; // process embedded documentation comments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
83 char *docdir; // write documentation file to docdir directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
84 char *docname; // write documentation file to docname
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
85 Array *ddocfiles; // macro include files for Ddoc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
86
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
87 char doHdrGeneration; // process embedded documentation comments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
88 char *hdrdir; // write 'header' file to docdir directory
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
89 char *hdrname; // write 'header' file to docname
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
90
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
91 unsigned debuglevel; // debug level
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
92 Array *debugids; // debug identifiers
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
93
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
94 unsigned versionlevel; // version level
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
95 Array *versionids; // version identifiers
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
96
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
97 bool dump_source;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
98
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
99 char *defaultlibname; // default library for non-debug builds
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
100 char *debuglibname; // default library for debug builds
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
101
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
102 char *xmlname; // filename for XML output
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
103
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
104 // Hidden debug switches
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
105 char debuga;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
106 char debugb;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
107 char debugc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
108 char debugf;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
109 char debugr;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
110 char debugw;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
111 char debugx;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
112 char debugy;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
113
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
114 char run; // run resulting executable
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
115 size_t runargs_length;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
116 char** runargs; // arguments for executable
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
117
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
118 // Linker stuff
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
119 Array *objfiles;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
120 Array *linkswitches;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
121 Array *libfiles;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
122 char *deffile;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
123 char *resfile;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
124 char *exefile;
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 // LLVM stuff
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
127 char *llvmArch;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
128 char forceBE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
129 char *tt_arch;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
130 char *tt_os;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
131 char *data_layout;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
132 char disassemble;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
133 char llvmInline;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
134 char llvmAnnotate;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
135 char *runtimePath;
217
0806379a5eca [svn r233] Added: -oq command line option for writing fully qualified object names.
lindquist
parents: 159
diff changeset
136 char useFP80;
220
ccc2e6898a78 [svn r236] added initial codegen of inline asm, pretty buggy and incomplete still. see the tangotests/asm1.d test for a sample of what does
lindquist
parents: 217
diff changeset
137 char useInlineAsm;
217
0806379a5eca [svn r233] Added: -oq command line option for writing fully qualified object names.
lindquist
parents: 159
diff changeset
138 char fqnPaths; // use fully qualified object names
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
139 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
140
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
141 struct Global
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
142 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
143 char *mars_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
144 char *sym_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
145 char *obj_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
146 char *ll_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
147 char *bc_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
148 char *nativeobj_ext;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
149 char *doc_ext; // for Ddoc generated files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
150 char *ddoc_ext; // for Ddoc macro include files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
151 char *hdr_ext; // for D 'header' import files
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
152 char *copyright;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
153 char *written;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
154 Array *path; // Array of char*'s which form the import lookup path
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
155 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
156 int structalign;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
157 char *version;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
158 char *llvmdc_version;
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 Param params;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
161 unsigned errors; // number of errors reported so far
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
162 unsigned gag; // !=0 means gag reporting of errors
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
163
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
164 Global();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
165 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
166
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
167 extern Global global;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
168
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
169 #if __GNUC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
170 //#define memicmp strncasecmp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
171 //#define stricmp strcasecmp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
172 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
173
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
174 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
175 typedef _Complex long double complex_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
176 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
177 #ifndef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
178 #include "complex_t.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
179 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
180 #ifdef __APPLE__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
181 //#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
182 #define integer_t dmd_integer_t
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
183 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
184 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
185
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
186 // Be careful not to care about sign when using integer_t
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
187 typedef uint64_t integer_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
188
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
189 // Signed and unsigned variants
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
190 typedef int64_t sinteger_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
191 typedef uint64_t uinteger_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
192
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
193 typedef int8_t d_int8;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
194 typedef uint8_t d_uns8;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
195 typedef int16_t d_int16;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
196 typedef uint16_t d_uns16;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
197 typedef int32_t d_int32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
198 typedef uint32_t d_uns32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
199 typedef int64_t d_int64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
200 typedef uint64_t d_uns64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
201
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
202 typedef float d_float32;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
203 typedef double d_float64;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
204 typedef long double d_float80;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
205
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
206 typedef d_uns8 d_char;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
207 typedef d_uns16 d_wchar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
208 typedef d_uns32 d_dchar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
209
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
210 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
211 #include "d-gcc-real.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
212 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
213 typedef long double real_t;
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 // Modify OutBuffer::writewchar to write the correct size of wchar
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
217 #if _WIN32
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
218 #define writewchar writeword
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
219 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
220 // This needs a configuration test...
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
221 #define writewchar write4
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
222 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
223
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
224 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
225 #include "d-gcc-complex_t.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
226 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
227
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
228 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
229
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
230 //typedef unsigned Loc; // file location
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
231 struct Loc
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
232 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
233 char *filename;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
234 unsigned linnum;
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 Loc()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
237 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
238 linnum = 0;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
239 filename = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
240 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
241
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
242 Loc(int x)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
243 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
244 linnum = x;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
245 filename = NULL;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
246 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
247
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
248 Loc(Module *mod, unsigned linnum);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
249
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
250 char *toChars() const;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
251 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
252
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
253 #ifndef GCC_SAFE_DMD
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
254 #define TRUE 1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
255 #define FALSE 0
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
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
258 #define INTERFACE_OFFSET 0 // if 1, put classinfo as first entry
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
259 // in interface vtbl[]'s
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
260 #define INTERFACE_VIRTUAL 0 // 1 means if an interface appears
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
261 // in the inheritance graph multiple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
262 // times, only one is used
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
263
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
264 enum LINK
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
265 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
266 LINKdefault,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
267 LINKd,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
268 LINKc,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
269 LINKcpp,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
270 LINKwindows,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
271 LINKpascal,
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
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
274 enum DYNCAST
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 DYNCAST_OBJECT,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
277 DYNCAST_EXPRESSION,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
278 DYNCAST_DSYMBOL,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
279 DYNCAST_TYPE,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
280 DYNCAST_IDENTIFIER,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
281 DYNCAST_TUPLE,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
282 };
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 enum MATCH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
285 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
286 MATCHnomatch, // no match
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
287 MATCHconvert, // match with conversions
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
288 #if V2
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
289 MATCHconst, // match with conversion to const
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
290 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
291 MATCHexact // exact match
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
237
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
294 enum ARCH
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
295 {
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
296 ARCHx86,
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
297 ARCHx86_64,
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
298 ARCHppc,
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
299 ARCHppc_64
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
300 };
a168a2c3ea48 [svn r253] Removed -inlineasm option. inline asm is now enabled by default unless the new -noasm option is passed.
lindquist
parents: 220
diff changeset
301
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
302 void error(Loc loc, const char *format, ...);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
303 void verror(Loc loc, const char *format, va_list);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
304 void fatal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
305 void err_nomem();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
306 int runLINK();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
307 void deleteExeFile();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
308 int runProgram();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
309 void inifile(char *argv0, char *inifile);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
310 void halt();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
311
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
312 /*** Where to send error messages ***/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
313 #if IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
314 #define stdmsg stderr
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
315 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
316 #define stdmsg stdout
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 133
diff changeset
317 #endif
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 #endif /* DMD_MARS_H */