diff dmd/mtype.c @ 378:d8234836b40f

Get rid of runTimeHack and instead add proper argument info to the frontend declatation.
author Christian Kamm <kamm incasoftware de>
date Tue, 22 Jul 2008 19:24:40 +0200
parents 3c4460b988bd
children d632801b15f0
line wrap: on
line diff
--- a/dmd/mtype.c	Mon Jul 21 20:36:03 2008 +0200
+++ b/dmd/mtype.c	Tue Jul 22 19:24:40 2008 +0200
@@ -1536,8 +1536,12 @@
 	static char *name[2] = { "_adReverseChar", "_adReverseWchar" };
 
 	nm = name[n->ty == Twchar];
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(), nm);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	Type* arrty = n->ty == Twchar ? Type::tchar->arrayOf() : Type::twchar->arrayOf();
+	args->push(new Argument(STCin, arrty, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(), nm);
+
 	ec = new VarExp(0, fd);
 	e = e->castTo(sc, n->arrayOf());	// convert to dynamic array
 	arguments = new Expressions();
@@ -1554,8 +1558,12 @@
 	static char *name[2] = { "_adSortChar", "_adSortWchar" };
 
 	nm = name[n->ty == Twchar];
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(), nm);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	Type* arrty = n->ty == Twchar ? Type::tchar->arrayOf() : Type::twchar->arrayOf();
+	args->push(new Argument(STCin, arrty, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(), nm);
+
 	ec = new VarExp(0, fd);
 	e = e->castTo(sc, n->arrayOf());	// convert to dynamic array
 	arguments = new Expressions();
@@ -1573,8 +1581,16 @@
 
 	assert(size);
 	dup = (ident == Id::dup);
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(), dup ? Id::adDup : Id::adReverse);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	if(dup) {
+	    args->push(new Argument(STCin, Type::typeinfo->type, NULL, NULL));
+	    args->push(new Argument(STCin, Type::tvoid->arrayOf(), NULL, NULL));
+	} else {
+	    args->push(new Argument(STCin, Type::tvoid->arrayOf(), NULL, NULL));
+	    args->push(new Argument(STCin, Type::tsize_t, NULL, NULL));
+	}
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(), dup ? Id::adDup : Id::adReverse);
 	ec = new VarExp(0, fd);
 	e = e->castTo(sc, n->arrayOf());	// convert to dynamic array
 	arguments = new Expressions();
@@ -1592,9 +1608,12 @@
 	FuncDeclaration *fd;
 	Expressions *arguments;
 
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(),
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	args->push(new Argument(STCin, Type::tvoid->arrayOf(), NULL, NULL));
+	args->push(new Argument(STCin, Type::typeinfo->type, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(),
 		(char*)(n->ty == Tbit ? "_adSortBit" : "_adSort"));
-    fd->runTimeHack = true;
 	ec = new VarExp(0, fd);
 	e = e->castTo(sc, n->arrayOf());	// convert to dynamic array
 	arguments = new Expressions();
@@ -2268,8 +2287,10 @@
 	FuncDeclaration *fd;
 	Expressions *arguments;
 
-	fd = FuncDeclaration::genCfunc(Type::tsize_t, Id::aaLen);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	args->push(new Argument(STCin, Type::tvoidptr, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tsize_t, Id::aaLen);
 	ec = new VarExp(0, fd);
 	arguments = new Expressions();
 	arguments->push(e);
@@ -2284,8 +2305,11 @@
 	int size = key->size(e->loc);
 
 	assert(size);
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(), Id::aaKeys);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	args->push(new Argument(STCin, Type::tvoidptr, NULL, NULL));
+	args->push(new Argument(STCin, Type::tsize_t, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(), Id::aaKeys);
 	ec = new VarExp(0, fd);
 	arguments = new Expressions();
 	arguments->push(e);
@@ -2299,8 +2323,12 @@
 	FuncDeclaration *fd;
 	Expressions *arguments;
 
-	fd = FuncDeclaration::genCfunc(Type::tvoid->arrayOf(), Id::aaValues);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	args->push(new Argument(STCin, Type::tvoidptr, NULL, NULL));
+	args->push(new Argument(STCin, Type::tsize_t, NULL, NULL));
+	args->push(new Argument(STCin, Type::tsize_t, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->arrayOf(), Id::aaValues);
 	ec = new VarExp(0, fd);
 	arguments = new Expressions();
 	arguments->push(e);
@@ -2317,8 +2345,11 @@
 	FuncDeclaration *fd;
 	Expressions *arguments;
 
-	fd = FuncDeclaration::genCfunc(Type::tvoid->pointerTo(), Id::aaRehash);
-    fd->runTimeHack = true;
+	//LLVMDC: Build arguments.
+	Arguments* args = new Arguments;
+	args->push(new Argument(STCin, Type::tvoidptr->pointerTo(), NULL, NULL));
+	args->push(new Argument(STCin, Type::typeinfo->type, NULL, NULL));
+	fd = FuncDeclaration::genCfunc(args, Type::tvoid->pointerTo(), Id::aaRehash);
 	ec = new VarExp(0, fd);
 	arguments = new Expressions();
 	arguments->push(e->addressOf(sc));