changeset 25:3f834bed4f13

FWindows linking issues fixed
author korDen
date Tue, 13 Apr 2010 00:38:04 +0400
parents 1b81e14880ef
children 05f02c19bd81 9fe59705c82d
files dmd/AsmStatement.d dmd/CompoundStatement.d dmd/backend/Config.d dmd/backend/Cstate.d dmd/backend/RTLSYM.d dmd/backend/TYM.d dmd/backend/TYPE.d dmd/backend/Util.d dmd/backend/glue.d dmd/backend/iasm.d main.d
diffstat 11 files changed, 179 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- 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)
 		{
--- 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)
 				{
--- 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
--- 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;
+}
--- 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];
+}
--- 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;
--- 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]; }
--- 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);
 	}
--- 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++) {
--- 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 
--- 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();