# HG changeset patch # User korDen # Date 1271104684 -14400 # Node ID 3f834bed4f1346f4f72f08fbf8b14203c7f5fae3 # Parent 1b81e14880efc640991f8a7739e18ca5a452d2c9 FWindows linking issues fixed diff -r 1b81e14880ef -r 3f834bed4f13 dmd/AsmStatement.d --- a/dmd/AsmStatement.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/AsmStatement.d Tue Apr 13 00:38:04 2010 +0400 @@ -58,6 +58,8 @@ Statement semantic(Scope sc) { //printf("AsmStatement.semantic()\n"); + + std.stdio.writeln("semantic"); if (global.params.safe && !sc.module_.safe) { diff -r 1b81e14880ef -r 3f834bed4f13 dmd/CompoundStatement.d --- a/dmd/CompoundStatement.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/CompoundStatement.d Tue Apr 13 00:38:04 2010 +0400 @@ -90,8 +90,6 @@ continue; } - s = s.semantic(sc); - statements.data[i] = cast(void*)s; if (s) { diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/Config.d --- a/dmd/backend/Config.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/Config.d Tue Apr 13 00:38:04 2010 +0400 @@ -8,23 +8,49 @@ void cod3_set386(); } -debug extern (C) extern -{ - __gshared char debuga; /* cg - watch assignaddr() */ - __gshared char debugb; /* watch block optimization */ - __gshared char debugc; /* watch code generated */ - __gshared char debugd; /* watch debug information generated */ - __gshared char debuge; // dump eh info - __gshared char debugf; /* trees after dooptim */ - __gshared char debugg; /* trees for code generator */ - __gshared char debugo; // watch optimizer - __gshared char debugr; // watch register allocation - __gshared char debugs; /* watch common subexp eliminator */ - __gshared char debugt; /* do test points */ - __gshared char debugu; - __gshared char debugw; /* watch progress */ - __gshared char debugx; /* suppress predefined CPP stuff */ - __gshared char debugy; /* watch output to il buffer */ + +debug { + +version (Windows) { + extern (C++) extern + { + __gshared char debuga; /* cg - watch assignaddr() */ + __gshared char debugb; /* watch block optimization */ + __gshared char debugc; /* watch code generated */ + __gshared char debugd; /* watch debug information generated */ + __gshared char debuge; // dump eh info + __gshared char debugf; /* trees after dooptim */ + __gshared char debugg; /* trees for code generator */ + __gshared char debugo; // watch optimizer + __gshared char debugr; // watch register allocation + __gshared char debugs; /* watch common subexp eliminator */ + __gshared char debugt; /* do test points */ + __gshared char debugu; + __gshared char debugw; /* watch progress */ + __gshared char debugx; /* suppress predefined CPP stuff */ + __gshared char debugy; /* watch output to il buffer */ + } +} else { + extern (C) extern + { + __gshared char debuga; /* cg - watch assignaddr() */ + __gshared char debugb; /* watch block optimization */ + __gshared char debugc; /* watch code generated */ + __gshared char debugd; /* watch debug information generated */ + __gshared char debuge; // dump eh info + __gshared char debugf; /* trees after dooptim */ + __gshared char debugg; /* trees for code generator */ + __gshared char debugo; // watch optimizer + __gshared char debugr; // watch register allocation + __gshared char debugs; /* watch common subexp eliminator */ + __gshared char debugt; /* do test points */ + __gshared char debugu; + __gshared char debugw; /* watch progress */ + __gshared char debugx; /* suppress predefined CPP stuff */ + __gshared char debugy; /* watch output to il buffer */ + } +} + } // This part of the configuration is saved in the precompiled header for use @@ -190,7 +216,11 @@ LINKAGE linkage; // default function call linkage } -extern (C) extern __gshared Config config; +version (Windows) { + extern (C++) extern __gshared Config config; +} else { + extern (C) extern __gshared Config config; +} enum CVNONE = 0; // No symbolic info enum CVOLD = 1; // Codeview 1 symbolic info diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/Cstate.d --- a/dmd/backend/Cstate.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/Cstate.d Tue Apr 13 00:38:04 2010 +0400 @@ -18,4 +18,8 @@ char* modname; // module unique identifier } -extern (C) extern __gshared Cstate cstate; +version (Windows) { + extern (C++) extern __gshared Cstate cstate; +} else { + extern (C) extern __gshared Cstate cstate; +} diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/RTLSYM.d --- a/dmd/backend/RTLSYM.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/RTLSYM.d Tue Apr 13 00:38:04 2010 +0400 @@ -98,5 +98,8 @@ import dmd.EnumUtils; mixin(BringToCurrentScope!(RTLSYM)); -//extern(C++) extern __gshared Symbol* rtlsym[RTLSYM.RTLSYM_MAX]; -extern(C) extern __gshared Symbol* rtlsym[RTLSYM.RTLSYM_MAX]; +version (Windows) { + extern(C++) extern __gshared Symbol* rtlsym[RTLSYM.RTLSYM_MAX]; +} else { + extern(C) extern __gshared Symbol* rtlsym[RTLSYM.RTLSYM_MAX]; +} diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/TYM.d --- a/dmd/backend/TYM.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/TYM.d Tue Apr 13 00:38:04 2010 +0400 @@ -76,8 +76,14 @@ ///#endif } -extern (C) extern { - __gshared int TYptrdiff, TYsize, TYsize_t; +version (Windows) { + extern (C++) extern { + __gshared int TYptrdiff, TYsize, TYsize_t; + } +} else { + extern (C) extern { + __gshared int TYptrdiff, TYsize, TYsize_t; + } } import dmd.EnumUtils; diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/TYPE.d --- a/dmd/backend/TYPE.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/TYPE.d Tue Apr 13 00:38:04 2010 +0400 @@ -97,8 +97,13 @@ alias type* typep_t; -extern(C) extern __gshared typep_t tstypes[TYM.TYMAX]; -extern(C) extern __gshared typep_t tsptr2types[TYM.TYMAX]; +version (Windows) { + extern(C++) extern __gshared typep_t tstypes[TYM.TYMAX]; + extern(C++) extern __gshared typep_t tsptr2types[TYM.TYMAX]; +} else { + extern(C) extern __gshared typep_t tstypes[TYM.TYMAX]; + extern(C) extern __gshared typep_t tsptr2types[TYM.TYMAX]; +} ref type* tsbool () { return tstypes[TYM.TYbool]; } ref type* tschar () { return tstypes[TYM.TYchar]; } diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/Util.d --- a/dmd/backend/Util.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/Util.d Tue Apr 13 00:38:04 2010 +0400 @@ -117,7 +117,7 @@ void obj_includelib(const(char)* name); Symbol* symbol_name(const(char)* name, int sclass, type* t); dt_t** dtabytes(dt_t** pdtend, tym_t ty, targ_size_t offset, targ_size_t size, const(char)* ptr); - type* type_setty(type**, long); + type* type_setty(type**, int); void cod3_thunk(Symbol* sthunk, Symbol* sfunc, uint p, tym_t thisty, targ_size_t d, int i, targ_size_t d2); } diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/glue.d --- a/dmd/backend/glue.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/glue.d Tue Apr 13 00:38:04 2010 +0400 @@ -20,12 +20,22 @@ __gshared Array obj_symbols_towrite; -extern (C++) /+extern+/ -{ - extern(C) extern __gshared Outbuffer objbuf; - int go_flag(char* cp); - void util_set64(); - void util_set386(); +version (Windows) { + extern (C++) extern + { + __gshared Outbuffer objbuf; + int go_flag(char* cp); + void util_set64(); + void util_set386(); + } +} else { + extern (C++) /+extern+/ + { + extern(C) extern __gshared Outbuffer objbuf; + int go_flag(char* cp); + void util_set64(); + void util_set386(); + } } import std.contracts; @@ -279,7 +289,9 @@ } else { - void obj_init(Outbuffer* objbuf, const(char)* filename, const(char)* csegname); + extern (C++) { + void obj_init(Outbuffer* objbuf, const(char)* filename, const(char)* csegname); + } } extern (C++) { diff -r 1b81e14880ef -r 3f834bed4f13 dmd/backend/iasm.d --- a/dmd/backend/iasm.d Mon Apr 12 17:02:32 2010 +0100 +++ b/dmd/backend/iasm.d Tue Apr 13 00:38:04 2010 +0400 @@ -77,7 +77,11 @@ "word".ptr, ]; -extern (C) code * cat(code *c1,code *c2); +version (Windows) { + extern (Pascal) code * cat(code *c1,code *c2); +} else { + extern (C) code * cat(code *c1,code *c2); +} version (Bug4059) { @@ -88,8 +92,10 @@ } else { - OP* asm_op_lookup(const(char)* s); - int binary(const(char)* p , const(char)** tab, int high); + extern (C++) { + OP* asm_op_lookup(const(char)* s); + int binary(const(char)* p , const(char)** tab, int high); + } } extern (C++) //extern diff -r 1b81e14880ef -r 3f834bed4f13 main.d --- a/main.d Mon Apr 12 17:02:32 2010 +0100 +++ b/main.d Tue Apr 13 00:38:04 2010 +0400 @@ -60,92 +60,93 @@ version (Windows) { import win32.windows; -} -/* Link to druntimes main() */ -/+ -extern (C) int main(int argc, char **argv) -{ - char[][] args; - int result; + + /* 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 (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 (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); + 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); + char* cargp = null; + size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, null); - cargp = cast(char*) alloca(cargl); - args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc]; + 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, 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]; - } + 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(); + gc_init(); + version (Windows) + _minit(); + _moduleCtor(); + + GC.disable(); + CrashHandlerInit(); - result = main(cast(string[])args); - - thread_joinAll(); - _d_isHalting = true; - _moduleDtor(); - gc_term(); + result = main(cast(string[])args); + + thread_joinAll(); + _d_isHalting = true; + _moduleDtor(); + gc_term(); - version (Posix) - { - _STD_critical_term(); - _STD_monitor_staticdtor(); - } + version (Posix) + { + _STD_critical_term(); + _STD_monitor_staticdtor(); + } - return result; + return result; + } } -+/ + int main(string[] args) { GC.disable();