view lphobos/std/stdarg.d @ 115:5ba6d286c941 trunk

[svn r119] Added the monitor data field that comes after the vtable pointer to all classes. Represented as a void* initialized to zero.
author lindquist
date Sun, 25 Nov 2007 03:58:55 +0100
parents fb265a6efea1
children 5825d48b27d1
line wrap: on
line source


/*
 * Placed in public domain.
 * Written by Hauke Duden and Walter Bright
 */

/* This is for use with variable argument lists with extern(D) linkage. */

module std.stdarg;

alias void* va_list;

T va_arg(T)(inout va_list vp)
{
    static assert((T.sizeof & (T.sizeof -1)) == 0);
    va_list vptmp = cast(va_list)((cast(size_t)vp + T.sizeof - 1) &  ~(T.sizeof - 1));
    vp = vptmp + T.sizeof;
    return *cast(T*)vptmp;
}