view lphobos/std/c/stdarg.d @ 23:77e3d1ddae3f trunk

[svn r27] * Fixed bug in aggregate field lookup. * Fixed structs with no fields. * Added support for NegExp as in -x.
author lindquist
date Thu, 04 Oct 2007 09:24:15 +0200
parents c53b6e3fe49a
children 0ccfae271c45
line wrap: on
line source


/**
 * 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;
}