Mercurial > projects > ddmd
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;