--- /dev/null
+/**
+ * The vararg module is intended to facilitate vararg manipulation in D.
+ * It should be interface compatible with the C module "stdarg," and the
+ * two modules may share a common implementation if possible (as is done
+ * here).
+ *
+ * Copyright: Public Domain
+ * License: Public Domain
+ * Authors: Hauke Duden, Walter Bright
+ */
+module core.vararg;
+
+
+version( GNU )
+{
+ public import std.stdarg;
+}
+else
+{
+ /**
+ * The base vararg list type.
+ */
+ alias void* va_list;
+
+
+ /**
+ * This function initializes the supplied argument pointer for subsequent
+ * use by va_arg and va_end.
+ *
+ * Params:
+ * ap = The argument pointer to initialize.
+ * paramn = The identifier of the rightmost parameter in the function
+ * parameter list.
+ */
+ void va_start(T) ( out va_list ap, inout T parmn )
+ {
+ ap = cast(va_list) ( cast(void*) &parmn + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) );
+ }
+
+ /**
+ * This function returns the next argument in the sequence referenced by
+ * the supplied argument pointer. The argument pointer will be adjusted
+ * to point to the next arggument in the sequence.
+ *
+ * Params:
+ * ap = The argument pointer.
+ *
+ * Returns:
+ * The next argument in the sequence. The result is undefined if ap
+ * does not point to a valid argument.
+ */
+ T va_arg(T) ( 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;
+ }
+
+ /**
+ * This function cleans up any resources allocated by va_start. It is
+ * currently a no-op and exists mostly for syntax compatibility with
+ * the variadric argument functions for C.
+ *
+ * Params:
+ * ap = The argument pointer.
+ */
+ void va_end( va_list ap )
+ {
+
+ }
+
+
+ /**
+ * This function copied the argument pointer src to dst.
+ *
+ * Params:
+ * src = The source pointer.
+ * dst = The destination pointer.
+ */
+ void va_copy( out va_list dst, va_list src )
+ {
+ dst = src;
+ }
+}
core/exception.o \\r
core/memory_.o \\r
core/runtime.o \\r
- core/thread.o\r
+ core/thread.o \\r
+ core/vararg.o\r
\r
OBJ_STDC= \\r
core/stdc/errno.o\r
core/exception.html \\r
core/memory.html \\r
core/runtime.html \\r
- core/thread.html\r
+ core/thread.html \\r
+ core/vararg.html\r
\r
######################################################\r
\r
core/thread.o : core/thread.d\r
$(DC) -c $(DFLAGS) -d -Hf$*.di core/thread.d -of$@\r
\r
+### vararg\r
+\r
+core/vararg.o : core/vararg.d\r
+ $(DC) -c $(TFLAGS) -Hf$*.di core/vararg.d -of$@\r
+\r
######################################################\r
\r
clean :\r
core\exception.obj \\r
core\memory.obj \\r
core\runtime.obj \\r
- core\thread.obj\r
+ core\thread.obj \\r
+ core\vararg.obj\r
\r
OBJ_STDC= \\r
core\stdc\errno.obj\r
core\exception.html \\r
core\memory.html \\r
core\runtime.html \\r
- core\thread.html\r
+ core\thread.html \\r
+ core\vararg.html\r
\r
######################################################\r
\r
core\thread.obj : core\thread.d\r
$(DC) -c $(DFLAGS) -d -Hf$*.di core\thread.d -of$@\r
\r
+### vararg\r
+\r
+core\vararg.obj : core\vararg.d\r
+ $(DC) -c $(TFLAGS) -Hf$*.di core\vararg.d -of$@\r
+\r
######################################################\r
\r
clean :\r