diff main.d @ 34:544b922227c7

update to work with dmd 2.048
author korDen
date Sat, 21 Aug 2010 05:46:08 +0400
parents 3f834bed4f13
children 6bdecc3f4569
line wrap: on
line diff
--- a/main.d	Sat Aug 21 05:45:28 2010 +0400
+++ b/main.d	Sat Aug 21 05:46:08 2010 +0400
@@ -20,7 +20,7 @@
 
 import std.stdarg;
 import std.string : toStringz;
-import std.contracts;
+import std.exception;
 
 import core.stdc.string;
 import core.stdc.stdio;
@@ -36,120 +36,22 @@
 
 import dmd.Util;
 
-bool loop = true;
-
 enum ExitCode
 {
 	EXIT_SUCCESS = 0,
 }
 
-version (Windows)
-{
-    private import core.stdc.wchar_;
-}
-
-extern (C) void gc_init();
-extern (C) void gc_term();
-extern (C) void _minit();
-extern (C) void _moduleCtor();
-extern (C) void _moduleDtor();
-extern (C) void thread_joinAll();
-
-shared bool _d_isHalting = false;
-
-version (Windows)
-{
-   import win32.windows;
-
-	/* Link to druntimes main() */
-
-	extern (C) int main(int argc, char **argv)
-	{
-		char[][] args;
-		int result;
-
-		version (OSX)
-		{   /* OSX does not provide a way to get at the top of the
-			 * stack, except for the magic value 0xC0000000.
-			 * But as far as the gc is concerned, argv is at the top
-			 * of the main thread's stack, so save the address of that.
-			 */
-			__osx_stack_end = cast(void*)&argv;
-		}
-
-		version (Posix)
-		{
-			_STI_monitor_staticctor();
-			_STI_critical_init();
-		}
-
-		version (Windows)
-		{
-			wchar_t*  wcbuf = GetCommandLineW();
-			size_t    wclen = wcslen(wcbuf);
-			int       wargc = 0;
-			wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc);
-			assert(wargc == argc);
-
-			char*     cargp = null;
-			size_t    cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, null);
+extern (C) extern __gshared bool rt_trapExceptions;
 
-			cargp = cast(char*) alloca(cargl);
-			args  = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc];
-
-			for (size_t i = 0, p = 0; i < wargc; i++)
-			{
-				int wlen = wcslen(wargs[i]);
-				int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, null);
-				args[i]  = cargp[p .. p+clen];
-				p += clen; assert(p <= cargl);
-				WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, null);
-			}
-			LocalFree(cast(HANDLE)wargs);
-			wargs = null;
-			wargc = 0;
-		}
-		else version (Posix)
-		{
-			char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof);
-			scope(exit) free(am);
-
-			for (size_t i = 0; i < argc; i++)
-			{
-				auto len = strlen(argv[i]);
-				am[i] = argv[i][0 .. len];
-			}
-			args = am[0 .. argc];
-		}
-
-		gc_init();
-		version (Windows)
-			_minit();
-		_moduleCtor();
-		
-		GC.disable();
-		CrashHandlerInit();
-
-		result = main(cast(string[])args);
-		
-		thread_joinAll();
-		_d_isHalting = true;
-		_moduleDtor();
-		gc_term();
-
-		version (Posix)
-		{
-			_STD_critical_term();
-			_STD_monitor_staticdtor();
-		}
-
-		return result;
-	}
+static this() {
+	rt_trapExceptions = false;
 }
 
 int main(string[] args)
 {
     GC.disable();
+	CrashHandlerInit();
+	
     Array files = new Array();
     Array libmodules = new Array();
     Module m;