diff lphobos/std/c/stdarg.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children 0ccfae271c45
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/std/c/stdarg.d	Sat Sep 01 21:43:27 2007 +0200
@@ -0,0 +1,42 @@
+
+/**
+ * C's <stdarg.h>
+ * Authors: Hauke Duden and Walter Bright, Digital Mars, www.digitalmars.com
+ * License: Public Domain
+ * Macros:
+ *	WIKI=Phobos/StdCStdarg
+ */
+
+/* This is for use with extern(C) variable argument lists. */
+
+module std.c.stdarg;
+
+alias void* va_list;
+
+template va_start(T)
+{
+    void va_start(out va_list ap, inout T parmn)
+    {
+	ap = cast(va_list)(cast(void*)&parmn + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
+    }
+}
+
+template va_arg(T)
+{
+    T va_arg(inout va_list ap)
+    {
+	T arg = *cast(T*)ap;
+	ap = cast(va_list)(cast(void*)ap + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
+	return arg;
+    }
+}
+
+void va_end(va_list ap)
+{
+
+}
+
+void va_copy(out va_list dest, va_list src)
+{
+    dest = src;
+}