annotate main.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents 96c0fff6897d
children cd48cb899aee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module main;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
99
903b95002d4e Id and Macro are quite experimental currently
Trass3r
parents: 79
diff changeset
3 import dmd.Macro;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.Array;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Module;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.Global;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.VersionCondition;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.DebugCondition;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.Loc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.Lexer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 import dmd.FileName;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 import dmd.Type;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.File;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.Id;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 import dmd.Identifier;
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
17 import dmd.Json;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 import dmd.Library;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 import dmd.TOK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 import dmd.String;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 import dmd.backend.glue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 import std.stdarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 import std.string : toStringz;
34
544b922227c7 update to work with dmd 2.048
korDen
parents: 25
diff changeset
25 import std.exception;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 import core.stdc.string;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 import core.stdc.stdio;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 import core.stdc.ctype;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 import core.stdc.errno;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 import core.stdc.stdlib;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 import core.stdc.limits;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34 import core.memory;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35
70
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
36 import dbg.CallStackInfo;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 import dmd.Util;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 enum ExitCode
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 EXIT_SUCCESS = 0,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
45 version = CrashHandler;
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
46
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
47 version (CrashHandler) {
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
48 version(Linux)
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
49 {
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
50 extern (C) extern __gshared bool rt_trapExceptions;
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
51
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
52 static this() {
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
53 rt_trapExceptions = false;
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
54 }
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
55
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
56 }
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
57
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
58
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
59 version(Windows)
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
60 {
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
61
70
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
62 version (Windows)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
63 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
64 private import core.stdc.wchar_;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
65
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
66 extern (Windows) alias int function() FARPROC;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
67 extern (Windows) FARPROC GetProcAddress(void*, in char*);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
68 extern (Windows) void* LoadLibraryA(in char*);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
69 extern (Windows) int FreeLibrary(void*);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
70 extern (Windows) void* LocalFree(void*);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
71 extern (Windows) wchar_t* GetCommandLineW();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
72 extern (Windows) wchar_t** CommandLineToArgvW(wchar_t*, int*);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
73 extern (Windows) export int WideCharToMultiByte(uint, uint, wchar_t*, int, char*, int, char*, int);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
74 pragma(lib, "shell32.lib"); // needed for CommandLineToArgvW
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
75 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
76
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
77 shared bool _d_isHalting = false;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
78 __gshared string[] _d_args = null;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
79
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
80 version(Posix)
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
81 {
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
82 extern (C) void _STI_monitor_staticctor();
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
83 extern (C) void _STD_monitor_staticdtor();
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
84 extern (C) void _STI_critical_init();
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
85 extern (C) void _STD_critical_term();
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
86 }
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
87
70
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
88 extern (C) void gc_init();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
89 extern (C) void gc_term();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
90 extern (C) void _minit();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
91 extern (C) void _moduleCtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
92 extern (C) void _moduleDtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
93 extern (C) bool runModuleUnitTests();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
94 extern (C) void thread_joinAll();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
95
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
96 import rt.memory;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
97
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
98 extern (C) int main(int argc, char** argv)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
99 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
100 char[][] args;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
101 int result;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
102
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
103 version (OSX)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
104 { /* OSX does not provide a way to get at the top of the
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
105 * stack, except for the magic value 0xC0000000.
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
106 * But as far as the gc is concerned, argv is at the top
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
107 * of the main thread's stack, so save the address of that.
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
108 */
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
109 __osx_stack_end = cast(void*)&argv;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
110 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
111
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
112 version (FreeBSD) version (D_InlineAsm_X86)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
113 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
114 /*
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
115 * FreeBSD/i386 sets the FPU precision mode to 53 bit double.
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
116 * Make it 64 bit extended.
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
117 */
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
118 ushort fpucw;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
119 asm
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
120 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
121 fstsw fpucw;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
122 or fpucw, 0b11_00_111111; // 11: use 64 bit extended-precision
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
123 // 111111: mask all FP exceptions
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
124 fldcw fpucw;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
125 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
126 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
127
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
128 version (Posix)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
129 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
130 _STI_monitor_staticctor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
131 _STI_critical_init();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
132 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133
70
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
134 version (Windows)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
135 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
136 wchar_t* wcbuf = GetCommandLineW();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
137 size_t wclen = wcslen(wcbuf);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
138 int wargc = 0;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
139 wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
140 assert(wargc == argc);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
141
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
142 char* cargp = null;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
143 size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, 0);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
144
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
145 cargp = cast(char*) alloca(cargl);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
146 args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc];
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
147
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
148 for (size_t i = 0, p = 0; i < wargc; i++)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
149 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
150 int wlen = wcslen(wargs[i]);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
151 int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, 0);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
152 args[i] = cargp[p .. p+clen];
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
153 p += clen; assert(p <= cargl);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
154 WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, 0);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
155 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
156 LocalFree(wargs);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
157 wargs = null;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
158 wargc = 0;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
159 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
160 else version (Posix)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
161 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
162 char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
163 scope(exit) free(am);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
164
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
165 for (size_t i = 0; i < argc; i++)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
166 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
167 auto len = strlen(argv[i]);
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
168 am[i] = argv[i][0 .. len];
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
169 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
170 args = am[0 .. argc];
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
171 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
172 _d_args = cast(string[]) args;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
173
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
174 void runMain()
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
175 {
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
176 CrashHandlerInit();
165
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
177 // while (true)
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
178 {
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
179 result = main(_d_args);
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
180 }
70
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
181 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
182
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
183 void runAll()
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
184 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
185 gc_init();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
186 initStaticDataGC();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
187 version (Windows)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
188 _minit();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
189 _moduleCtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
190 _moduleTlsCtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
191 if (runModuleUnitTests())
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
192 runMain();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
193 else
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
194 result = EXIT_FAILURE;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
195 _moduleTlsDtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
196 thread_joinAll();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
197 _d_isHalting = true;
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
198 _moduleDtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
199 gc_term();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
200 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
201
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
202 runAll();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
203
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
204 version (Posix)
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
205 {
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
206 _STD_critical_term();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
207 _STD_monitor_staticdtor();
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
208 }
6bdecc3f4569 Get rid of win32 bindings
korDen
parents: 34
diff changeset
209 return result;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
210 }
25
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 22
diff changeset
211
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
212 }
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
213 }
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 70
diff changeset
214
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
215 int main(string[] args)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 {
165
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
217 GC.disable();
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 164
diff changeset
218
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
219 Array files = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
220 Array libmodules = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
221 Module m;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
222 int status = ExitCode.EXIT_SUCCESS;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
223 int argcstart = args.length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
224 int setdebuglib = 0;
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
225 byte noboundscheck = 0;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
226
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227 global = new Global();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
228
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 /// if (response_expand(&argc,&argv)) // expand response files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
230 /// error("can't open response file");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
231
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232 files.reserve(args.length - 1);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
233
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
234 // Set default values
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
235 global.params.argv0 = args[0];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
236 global.params.link = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237 global.params.useAssert = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
238 global.params.useInvariants = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
239 global.params.useIn = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 global.params.useOut = 1;
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
241 global.params.useArrayBounds = 2; // default to all functions
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242 global.params.useSwitchError = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
243 global.params.useInline = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
244 global.params.obj = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
245 global.params.Dversion = 2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
246 global.params.quiet = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
247
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
248 global.params.linkswitches = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
249 global.params.libfiles = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
250 global.params.objfiles = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
251 global.params.ddocfiles = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
252
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254 global.params.defaultlibname = "phobos";
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 4
diff changeset
255 } else version (POSIX) { //#elif TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
256 global.params.defaultlibname = "phobos2";
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
257 } else version (TARGET_NET) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
258 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
259 static assert(false, "fix this");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
260 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
261
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
262 // Predefine version identifiers
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
263 VersionCondition.addPredefinedGlobalIdent("DigitalMars");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
264
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
265 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
266 VersionCondition.addPredefinedGlobalIdent("Windows");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
267 global.params.isWindows = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
268 version (TARGET_NET) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
269 // TARGET_NET macro is NOT mutually-exclusive with TARGET_WINDOS
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
270 VersionCondition.addPredefinedGlobalIdent("D_NET");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
271 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
272 } else version (TARGET_LINUX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
273 VersionCondition.addPredefinedGlobalIdent("Posix");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
274 VersionCondition.addPredefinedGlobalIdent("linux");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
275 global.params.isLinux = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
276 } else version (TARGET_OSX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
277 VersionCondition.addPredefinedGlobalIdent("Posix");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
278 VersionCondition.addPredefinedGlobalIdent("OSX");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
279 global.params.isOSX = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
280
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
281 // For legacy compatibility
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
282 VersionCondition.addPredefinedGlobalIdent("darwin");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
283 } else version (TARGET_FREEBSD) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
284 VersionCondition.addPredefinedGlobalIdent("Posix");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
285 VersionCondition.addPredefinedGlobalIdent("FreeBSD");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
286 global.params.isFreeBSD = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
287 } else version (TARGET_SOLARIS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
288 VersionCondition.addPredefinedGlobalIdent("Posix");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
289 VersionCondition.addPredefinedGlobalIdent("Solaris");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
290 global.params.isSolaris = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
291 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
292 static assert (false, "fix this");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
293 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
294
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
295 VersionCondition.addPredefinedGlobalIdent("LittleEndian");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
296 //VersionCondition.addPredefinedGlobalIdent("D_Bits");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
297 version (DMDV2) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
298 VersionCondition.addPredefinedGlobalIdent("D_Version2");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
299 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
300 VersionCondition.addPredefinedGlobalIdent("all");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
301
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
302 version (Windows)
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
303 {
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
304 inifile(args[0], "sc.ini");
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
305 }
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
306 else version (Posix) ///linux || __APPLE__ || __FreeBSD__ || __sun&&__SVR4
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
307 {
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
308 inifile(args[0], "dmd.conf");
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
309 }
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
310 else
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
311 {
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
312 static assert (false, "fix this");
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
313 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
314 args = getenv_setargv("DFLAGS", args);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
315
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
316 version (disabled) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
317 for (i = 0; i < argc; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
318 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
319 writef("argv[%d] = '%s'\n", i, argv[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
320 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
321 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
322
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
323 foreach(i; 1..args.length)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
324 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
325 auto arg = args[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
326 auto p = arg.ptr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
327 if (*p == '-')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
328 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
329 arg = arg[1..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
330 if (arg == "d")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
331 global.params.useDeprecated = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
332 else if (arg == "c")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
333 global.params.link = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
334 else if (arg == "cov")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
335 global.params.cov = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
336 ///version (XXX) {// TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
337 /// else if (arg == "fPIC")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
338 /// global.params.pic = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
339 ///}
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
340 else if (arg == "multiobj")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
341 global.params.multiobj = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
342 else if (arg == "g")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
343 global.params.symdebug = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
344 else if (arg == "gc")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
345 global.params.symdebug = 2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
346 else if (arg == "gt")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
347 { error("use -profile instead of -gt\n");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
348 global.params.trace = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
349 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
350 else if (arg == "m64")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
351 global.params.isX86_64 = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
352 else if (arg == "profile")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
353 global.params.trace = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
354 else if (arg == "v")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
355 global.params.verbose = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
356 ///version (DMDV2) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
357 else if (arg == "vtls")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
358 global.params.vtls = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
359 ///}
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
360 else if (arg == "v1")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
361 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
362 version (DMDV1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
363 global.params.Dversion = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
364 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
365 error("use DMD 1.0 series compilers for -v1 switch");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
366 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
367 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
368 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
369 else if (arg == "w")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
370 global.params.warnings = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
371 else if (arg == "O")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
372 global.params.optimize = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
373 else if (p[1] == 'o')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
374 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
375 switch (p[2])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
376 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
377 case '-':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
378 global.params.obj = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
379 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
380
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
381 case 'd':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
382 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
383 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
384 global.params.objdir = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
385 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
386
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
387 case 'f':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
388 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
389 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
390 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
391
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
392 global.params.objname = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
393 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
394 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
395
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
396 case 'p':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
397 if (p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
398 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
399 global.params.preservePaths = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
400 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
401
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
402 case 0:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
403 error("-o no longer supported, use -of or -od");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
404 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
405
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
406 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
407 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
408 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
409 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
410 else if (p[1] == 'D')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
411 { global.params.doDocComments = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
412 switch (p[2])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
413 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
414 case 'd':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
415 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
416 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
417 global.params.docdir = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
418 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
419 case 'f':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
420 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
421 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
422 global.params.docname = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
423 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
424
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
425 case 0:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
426 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
427
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
428 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
429 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
430 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
431 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
432 ///version (_DH) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
433 else if (p[1] == 'H')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
434 { global.params.doHdrGeneration = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
435 switch (p[2])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
436 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
437 case 'd':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
438 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
439 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
440 global.params.hdrdir = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
441 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
442
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
443 case 'f':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
444 if (!p[3])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
445 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
446 global.params.hdrname = arg[(p - arg.ptr) + 3..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
447 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
448
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
449 case 0:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
450 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
451
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
452 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
453 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
454 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
455 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
456 ///}
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
457 else if (p[1] == 'X')
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
458 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
459 global.params.doXGeneration = 1;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
460 switch (p[2])
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
461 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
462 case 'f':
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
463 if (!p[3])
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
464 goto Lnoarg;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
465 global.params.xfilename = arg[(p - arg.ptr) + 3..$];
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
466 break;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
467
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
468 case 0:
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
469 break;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
470
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
471 default:
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
472 goto Lerror;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
473 }
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
474 }
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
475
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
476 else if (arg == "ignore")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
477 global.params.ignoreUnsupportedPragmas = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
478 else if (arg == "inline")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
479 global.params.useInline = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
480 else if (arg == "lib")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
481 global.params.lib = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
482 else if (arg == "nofloat")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
483 global.params.nofloat = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
484 else if (arg == "quiet")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
485 global.params.quiet = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
486 else if (arg == "release")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
487 global.params.release = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
488 ///version (DMDV2) {
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
489 else if (arg == "noboundscheck")
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
490 noboundscheck = 1;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
491 ///}
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
492 else if (arg == "unittest")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
493 global.params.useUnitTests = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
494 else if (p[1] == 'I')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
495 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
496 global.params.imppath.push(cast(void*)new String(arg[(p - arg.ptr) + 2..$])); ///
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
497 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
498 else if (p[1] == 'J')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
499 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
500 if (!global.params.fileImppath)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
501 global.params.fileImppath = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
502 global.params.fileImppath.push(cast(void*)new String(arg[(p - arg.ptr) + 2..$]));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
503 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
504 else if (memcmp(p + 1, "debug".ptr, 5) == 0 && p[6] != 'l')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
505 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
506 // Parse:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
507 // -debug
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
508 // -debug=number
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
509 // -debug=identifier
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
510 if (p[6] == '=')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
511 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
512 if (isdigit(p[7]))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
513 { long level;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
514
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
515 errno = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
516 level = strtol(p + 7, cast(char**)&p, 10);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
517 if (*p || errno || level > INT_MAX)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
518 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
519 DebugCondition.setGlobalLevel(cast(int)level);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
520 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
521 else if (Lexer.isValidIdentifier(arg[(p - arg.ptr) + 7..$])) ///
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
522 DebugCondition.addGlobalIdent(p + 7);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
523 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
524 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
525 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
526 else if (p[6])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
527 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
528 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
529 global.params.debuglevel = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
530 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
531 else if (memcmp(p + 1, "version".ptr, 5) == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
532 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
533 // Parse:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
534 // -version=number
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
535 // -version=identifier
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
536 if (p[8] == '=')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
537 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
538 if (isdigit(p[9]))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
539 { long level;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
540
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
541 errno = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
542 level = strtol(p + 9, cast(char**)&p, 10); ///
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
543 if (*p || errno || level > INT_MAX)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
544 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
545 VersionCondition.setGlobalLevel(cast(int)level);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
546 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
547 else if (Lexer.isValidIdentifier(arg[(p - arg.ptr) + 9..$])) ///
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
548 VersionCondition.addGlobalIdent(arg[(p - arg.ptr) + 9..$]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
549 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
550 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
551 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
552 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
553 goto Lerror;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
554 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
555 else if (arg == "-b")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
556 global.params.debugb = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
557 else if (arg == "-c")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
558 global.params.debugc = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
559 else if (arg == "-f")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
560 global.params.debugf = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
561 else if (arg == "-help")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
562 { usage();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
563 exit(EXIT_SUCCESS);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
564 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
565 else if (arg == "-r")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
566 global.params.debugr = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
567 else if (arg == "-x")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
568 global.params.debugx = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
569 else if (arg == "-y")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
570 global.params.debugy = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
571 else if (p[1] == 'L')
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
572 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
573 global.params.linkswitches.push(cast(void*)p + 2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
574 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
575 else if (memcmp(p + 1, "defaultlib=".ptr, 11) == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
576 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
577 global.params.defaultlibname = p + 1 + 11;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
578 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
579 else if (memcmp(p + 1, "debuglib=".ptr, 9) == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
580 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
581 setdebuglib = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
582 global.params.debuglibname = p + 1 + 9;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
583 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
584 else if (memcmp(p + 1, "deps=".ptr, 5) == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
585 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
586 global.params.moduleDepsFile = arg[(p - arg.ptr) + 1 + 5..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
587 if (!global.params.moduleDepsFile[0])
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
588 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
589 global.params.moduleDeps = new OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
590 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
591 else if (memcmp(p + 1, "man".ptr, 3) == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
592 {
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
593 version (Windows) {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
594 version (DMDV1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
595 browse("http://www.digitalmars.com/d/1.0/dmd-windows.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
596 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
597 browse("http://www.digitalmars.com/d/2.0/dmd-windows.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
598 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
599 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
600 version (linux) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
601 version (DMDV1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
602 browse("http://www.digitalmars.com/d/1.0/dmd-linux.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
603 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
604 browse("http://www.digitalmars.com/d/2.0/dmd-linux.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
605 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
606 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
607 version (__APPLE__) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
608 version (DMDV1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
609 browse("http://www.digitalmars.com/d/1.0/dmd-osx.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
610 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
611 browse("http://www.digitalmars.com/d/2.0/dmd-osx.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
612 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
613 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
614 version (__FreeBSD__) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
615 version (DMDV1) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
616 browse("http://www.digitalmars.com/d/1.0/dmd-freebsd.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
617 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
618 browse("http://www.digitalmars.com/d/2.0/dmd-freebsd.html");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
619 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
620 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
621 exit(EXIT_SUCCESS);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
622 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
623 else if (arg == "run")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
624 { global.params.run = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
625 global.params.runargs_length = ((i >= argcstart) ? args.length : argcstart) - i - 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
626 if (global.params.runargs_length)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
627 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
628 files.push(cast(void*)args[i + 1].ptr);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
629 global.params.runargs = args[i + 2..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
630 i += global.params.runargs_length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
631 global.params.runargs_length--;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
632 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
633 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
634 { global.params.run = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
635 goto Lnoarg;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
636 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
637 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
638 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
639 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
640 Lerror:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
641 error("unrecognized switch '%s'", args[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
642 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
643
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
644 Lnoarg:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
645 error("argument expected for switch '%s'", args[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
646 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
647 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
648 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
649 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
650 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
651 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
652 string ext = FileName.ext(p[0..arg.length]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
653 if (ext != null && FileName.compare(ext, "exe") == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
654 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
655 global.params.objname = arg[(p - arg.ptr)..$];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
656 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
657 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
658 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
659 files.push(cast(void*)new String(arg[(p - arg.ptr)..$]));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
660 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
661 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
662 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
663 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
664 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
665 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
666 if (files.dim == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
667 { usage();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
668 return EXIT_FAILURE;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
669 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
670
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
671 if (!setdebuglib)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
672 global.params.debuglibname = global.params.defaultlibname;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
673
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
674 version (TARGET_OSX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
675 global.params.pic = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
676 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
677
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
678 if (global.params.release)
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
679 {
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
680 global.params.useInvariants = 0;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
681 global.params.useIn = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
682 global.params.useOut = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
683 global.params.useAssert = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
684 global.params.useArrayBounds = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
685 global.params.useSwitchError = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
686 }
130
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
687
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
688 if (noboundscheck)
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
689 global.params.useArrayBounds = 0;
60bb0fe4563e dmdfe 2.037 first main iteration
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
690
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
691 if (global.params.run)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
692 global.params.quiet = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
693
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
694 if (global.params.useUnitTests)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
695 global.params.useAssert = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
696
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
697 if (!global.params.obj || global.params.lib)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
698 global.params.link = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
699
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
700 if (global.params.link)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
701 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
702 global.params.exefile = global.params.objname;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
703 global.params.oneobj = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
704 if (global.params.objname)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
705 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
706 /* Use this to name the one object file with the same
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
707 * name as the exe file.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
708 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
709 global.params.objname = FileName.forceExt(global.params.objname, global.obj_ext).toChars();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
710
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
711 /* If output directory is given, use that path rather than
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
712 * the exe file path.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
713 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
714 if (global.params.objdir)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
715 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
716 string name = FileName.name(global.params.objname);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
717 global.params.objname = FileName.combine(global.params.objdir, name);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
718 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
719 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
720 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
721 else if (global.params.lib)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
722 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
723 global.params.libname = global.params.objname;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
724 global.params.objname = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
725
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
726 // Haven't investigated handling these options with multiobj
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
727 if (!global.params.cov && !global.params.trace)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
728 global.params.multiobj = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
729 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
730 else if (global.params.run)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
731 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
732 error("flags conflict with -run");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
733 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
734 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
735 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
736 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
737 if (global.params.objname && files.dim > 1)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
738 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
739 global.params.oneobj = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
740 //error("multiple source files, but only one .obj name");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
741 //fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
742 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
743 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
744 if (global.params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
745 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
746 VersionCondition.addPredefinedGlobalIdent("D_InlineAsm_X86_64");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
747 VersionCondition.addPredefinedGlobalIdent("X86_64");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
748 VersionCondition.addPredefinedGlobalIdent("D_LP64");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
749 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
750 VersionCondition.addPredefinedGlobalIdent("Win64");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
751 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
752 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
753 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
754 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
755 VersionCondition.addPredefinedGlobalIdent("D_InlineAsm");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
756 VersionCondition.addPredefinedGlobalIdent("D_InlineAsm_X86");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
757 VersionCondition.addPredefinedGlobalIdent("X86");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
758 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
759 VersionCondition.addPredefinedGlobalIdent("Win32");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
760 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
761 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
762 if (global.params.doDocComments)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
763 VersionCondition.addPredefinedGlobalIdent("D_Ddoc");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
764 if (global.params.cov)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
765 VersionCondition.addPredefinedGlobalIdent("D_Coverage");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
766 if (global.params.pic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
767 VersionCondition.addPredefinedGlobalIdent("D_PIC");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
768 version (DMDV2) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
769 if (global.params.useUnitTests)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
770 VersionCondition.addPredefinedGlobalIdent("unittest");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
771 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
772
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
773 // Initialization
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
774 Type.init();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
775 Id.initialize();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
776 initPrecedence();
170
96c0fff6897d more global state cleanup
korDen
parents: 169
diff changeset
777 global.initClasssym();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
778
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
779 backend_init();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
780
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
781 //printf("%d source files\n",files.dim);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
782
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
783 // Build import search path
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
784 if (global.params.imppath)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
785 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
786 for (int i = 0; i < global.params.imppath.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
787 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
788 string path = (cast(String)global.params.imppath.data[i]).str;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
789 string[] a = FileName.splitPath(path);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
790
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
791 global.path ~= a;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
792 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
793 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
794
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
795 // Build string import search path
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
796 if (global.params.fileImppath)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
797 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
798 for (int i = 0; i < global.params.fileImppath.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
799 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
800 string path = (cast(String)global.params.fileImppath.data[i]).str;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
801 string[] a = FileName.splitPath(path);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
802
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
803 global.filePath ~= a;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
804 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
805 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
806
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
807 // Create Modules
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
808 Array modules = new Array();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
809 modules.reserve(files.dim);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
810 int firstmodule = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
811 for (int i = 0; i < files.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
812 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
813 string ext;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
814 string name;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
815
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
816 String s = cast(String) files.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
817 string mp = s.str;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
818
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 99
diff changeset
819 version (Windows) {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
820 char[] copy = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
821 // Convert / to \ so linker will work
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
822 foreach (j, c; mp)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
823 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
824 if (c == '/') {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
825 if (copy is null) copy = mp.dup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
826 copy[j] = '\\';
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
827 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
828 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
829
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
830 if (copy !is null) mp = assumeUnique(copy);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
831 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
832 string p = mp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
833
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
834 p = FileName.name(p); // strip path
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
835 ext = FileName.ext(p);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
836
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
837 if (ext.length != 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
838 { /* Deduce what to do with a file based on its extension
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
839 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
840 if (FileName.equals(ext, global.obj_ext))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
841 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
842 global.params.objfiles.push(files.data[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
843 libmodules.push(files.data[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
844 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
845 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
846
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
847 if (FileName.equals(ext, global.lib_ext))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
848 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
849 global.params.libfiles.push(files.data[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
850 libmodules.push(files.data[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
851 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
852 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
853
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
854 if (ext == global.ddoc_ext)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
855 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
856 global.params.ddocfiles.push(files.data[i]);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
857 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
858 }
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
859
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
860 if (FileName.equals(ext, global.json_ext))
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
861 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
862 global.params.doXGeneration = 1;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
863 global.params.xfilename = (cast(immutable(char)*)files.data[i])[0..0];
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
864 continue;
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
865 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
866
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
867 version (TARGET_WINDOS)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
868 {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
869 if (FileName.equals(ext, "res"))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
870 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
871 global.params.resfile = (cast(immutable(char)*)files.data[i])[0..0]; /// !!!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
872 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
873 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
874
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
875 if (FileName.equals(ext, "def"))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
876 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
877 global.params.deffile = (cast(immutable(char)*)files.data[i])[0..0];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
878 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
879 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
880
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
881 if (FileName.equals(ext, "exe"))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
882 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
883 assert(0); // should have already been handled
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
884 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
885 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
886
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
887 /* Examine extension to see if it is a valid
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
888 * D source file extension
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
889 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
890 if (FileName.equals(ext, global.mars_ext) ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
891 FileName.equals(ext, global.hdr_ext) ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
892 FileName.equals(ext, "dd") ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
893 FileName.equals(ext, "htm") ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
894 FileName.equals(ext, "html") ||
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
895 FileName.equals(ext, "xhtml"))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
896 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
897 immutable(char)* e = ext.ptr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
898 e--; // skip onto '.'
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
899 assert(*e == '.');
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
900
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
901 immutable(char)* n = p.ptr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
902
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
903 name = n[0..(e-n)]; // strip extension
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
904
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
905 if (name.length == 0 || name == ".." || name == ".")
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
906 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
907 Linvalid:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
908 error("invalid file name '%s'", (cast(String)files.data[i]).str);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
909 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
910 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
911 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
912 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
913 { error("unrecognized file extension %s\n", ext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
914 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
915 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
916 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
917 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
918 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
919 name = p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
920 if (!*name)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
921 goto Linvalid;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
922 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
923
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
924 /* At this point, name is the D source file name stripped of
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
925 * its path and extension.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
926 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
927
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
928 Identifier id = new Identifier(name, TOK.TOKreserved);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
929 m = new Module((cast(String) files.data[i]).str, id, global.params.doDocComments, global.params.doHdrGeneration);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
930 modules.push(cast(void*)m);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
931
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
932 if (firstmodule)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
933 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
934 global.params.objfiles.push(cast(void*)m.objfile.name);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
935 firstmodule = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
936 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
937 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
938
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
939 // Read files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
940 //version = ASYNCREAD;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
941 version (ASYNCREAD) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
942 // Multi threaded
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
943 AsyncRead *aw = AsyncRead.create(modules.dim);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
944 for (i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
945 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
946 m = cast(Module *)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
947 aw.addFile(m.srcfile);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
948 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
949 aw.start();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
950 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
951 // Single threaded
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
952 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
953 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
954 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
955 m.read(Loc(0));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
956 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
957 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
958
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
959 // Parse files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
960 int anydocfiles = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
961 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
962 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
963 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
964 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
965 writef("parse %s\n", m.toChars());
169
e7769d53e750 Moves static variables from Module to Global
korDen
parents: 165
diff changeset
966 if (!global.rootModule)
e7769d53e750 Moves static variables from Module to Global
korDen
parents: 165
diff changeset
967 global.rootModule = m;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
968 m.importedFrom = m;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
969 if (!global.params.oneobj || i == 0 || m.isDocFile)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
970 m.deleteObjFile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
971 version (ASYNCREAD) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
972 if (aw.read(i))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
973 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
974 error("cannot read file %s", m.srcfile.name.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
975 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
976 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
977
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
978 m.parse();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
979 if (m.isDocFile)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
980 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
981 anydocfiles = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
982 m.gendocfile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
983
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
984 // Remove m from list of modules
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
985 modules.remove(i);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
986 i--;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
987
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
988 // Remove m's object file from list of object files
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
989 for (int j = 0; j < global.params.objfiles.dim; j++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
990 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
991 if (m.objfile.name.str == (cast(FileName)global.params.objfiles.data[j]).str)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
992 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
993 global.params.objfiles.remove(j);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
994 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
995 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
996 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
997
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
998 if (global.params.objfiles.dim == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
999 global.params.link = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1000 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1001 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1002 version (ASYNCREAD) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1003 AsyncRead.dispose(aw);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1004 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1005
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1006 if (anydocfiles && modules.dim &&
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1007 (global.params.oneobj || global.params.objname))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1008 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1009 error("conflicting Ddoc and obj generation options");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1010 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1011 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1012 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1013 fatal();
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1014 version (_DH)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1015 {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1016 if (global.params.doHdrGeneration)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1017 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1018 /* Generate 'header' import files.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1019 * Since 'header' import files must be independent of command
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1020 * line switches and what else is imported, they are generated
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1021 * before any semantic analysis.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1022 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1023 for (i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1024 {
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1025 m = cast(Module)modules.data[i];
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1026 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1027 writef("import %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1028 m.genhdrfile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1029 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1030 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1031 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1032 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1033 }
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1034 //load all unconditional imports for better symbol resolving
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1035 for (int i = 0; i < modules.dim; i++)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1036 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1037 m = cast(Module)modules.data[i];
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1038 if (global.params.verbose)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1039 writef("importall %s\n", m.toChars());
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1040 m.importAll(null);
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1041 }
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1042 if (global.errors)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1043 fatal();
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
1044
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1045 // Do semantic analysis
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1046 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1047 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1048 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1049 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1050 writef("semantic %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1051 m.semantic();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1052 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1053 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1054 fatal();
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
1055
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1056 // Do pass 2 semantic analysis
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1057 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1058 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1059 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1060 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1061 writef("semantic2 %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1062 m.semantic2();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1063 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1064 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1065 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1066
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1067 // Do pass 3 semantic analysis
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1068 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1069 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1070 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1071 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1072 writef("semantic3 %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1073 m.semantic3();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1074 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1075 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1076 fatal();
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
1077
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1078 if (global.params.moduleDeps !is null)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1079 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1080 assert(global.params.moduleDepsFile !is null);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1081
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1082 File deps = new File(global.params.moduleDepsFile);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1083 OutBuffer ob = global.params.moduleDeps;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1084 deps.setbuffer(cast(void*)ob.data, ob.offset);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1085 deps.writev();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1086 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1087
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1088
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1089 // Scan for functions to inline
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1090 if (global.params.useInline)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1091 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1092 /* The problem with useArrayBounds and useAssert is that the
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1093 * module being linked to may not have generated them, so if
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1094 * we inline functions from those modules, the symbols for them will
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1095 * not be found at link time.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1096 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1097 if (!global.params.useArrayBounds && !global.params.useAssert)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1098 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1099 // Do pass 3 semantic analysis on all imported modules,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1100 // since otherwise functions in them cannot be inlined
169
e7769d53e750 Moves static variables from Module to Global
korDen
parents: 165
diff changeset
1101 for (int i = 0; i < global.amodules.dim; i++)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1102 {
169
e7769d53e750 Moves static variables from Module to Global
korDen
parents: 165
diff changeset
1103 m = cast(Module)global.amodules.data[i];
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1104 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1105 writef("semantic3 %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1106 m.semantic3();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1107 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1108 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1109 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1110 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1111
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1112 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1113 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1114 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1115 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1116 writef("inline scan %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1117
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1118 m.inlineScan();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1119 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1120 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1121 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1122 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1123
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1124 Library library = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1125 if (global.params.lib)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1126 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1127 library = new Library();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1128 library.setFilename(global.params.objdir, global.params.libname);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1129
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1130 // Add input object and input library files to output library
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1131 for (int i = 0; i < libmodules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1132 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1133 string p = (cast(String)libmodules.data[i]).str;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1134 library.addObject(p, null, 0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1135 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1136 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1137
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1138 // Generate output files
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1139 if (global.params.doXGeneration)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1140 json_generate(modules);
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
1141
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1142 if (global.params.oneobj)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1143 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1144 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1145 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1146 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1147 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1148 writef("code %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1149 if (i == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1150 obj_start(cast(char*)toStringz(m.srcfile.toChars()));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1151 m.genobjfile(0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1152 if (!global.errors && global.params.doDocComments)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1153 m.gendocfile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1154 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1155 if (!global.errors && modules.dim)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1156 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1157 obj_end(library, (cast(Module)modules.data[0]).objfile);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1158 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1159 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1160 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1161 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1162 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1163 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1164 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1165 if (global.params.verbose)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1166 writef("code %s\n", m.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1167 if (global.params.obj)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1168 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1169 obj_start(cast(char*)toStringz(m.srcfile.toChars()));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1170 m.genobjfile(global.params.multiobj);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1171 obj_end(library, m.objfile);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1172 obj_write_deferred(library);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1173 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1174 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1175 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1176 if (!global.params.lib)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1177 m.deleteObjFile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1178 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1179 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1180 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1181 if (global.params.doDocComments)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1182 m.gendocfile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1183 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1184 }
164
8bf07a566fdf GC is working now
korDen
parents: 130
diff changeset
1185 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1186
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1187 if (global.params.lib && !global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1188 library.write();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1189
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1190 backend_term();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1191 if (global.errors)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1192 fatal();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1193
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1194 if (!global.params.objfiles.dim)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1195 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1196 if (global.params.link)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1197 error("no object files to link");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1198 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1199 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1200 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1201 if (global.params.link)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1202 status = runLINK();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1203
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1204 if (global.params.run)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1205 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1206 if (!status)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1207 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1208 status = runProgram();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1209
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1210 /* Delete .obj files and .exe file
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1211 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1212 for (int i = 0; i < modules.dim; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1213 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1214 m = cast(Module)modules.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1215 m.deleteObjFile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1216 if (global.params.oneobj)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1217 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1218 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1219 deleteExeFile();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1220 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1221 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1222 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1223
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1224 return status;
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 4
diff changeset
1225 }