Mercurial > projects > ldc
view runtime/internal/llvmdc/vararg.d @ 660:d6b71647b622
One more update of Tango Rebuild profile.
Made the inp/outp intrinsics throw exceptions instead of doing nothing silently.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Mon, 06 Oct 2008 16:39:47 +0200 |
parents | 44f08170f4ef |
children | 6aaa3d3c1183 |
line wrap: on
line source
/* * This module holds the implementation of special vararg templates for D style var args. * * Provides the functions tango.core.Vararg expects to be present! */ module llvmdc.Vararg; // Check for the right compiler version(LLVMDC) { // OK } else { static assert(false, "This module is only valid for LLVMDC"); } alias void* va_list; void va_start(T) ( out va_list ap, inout T parmn ) { // not needed ! } T va_arg(T)(ref va_list vp) { T* arg = cast(T*) vp; // llvmdc always aligns to size_t.sizeof in vararg lists vp = cast(va_list) ( cast(void*) vp + ( ( T.sizeof + size_t.sizeof - 1 ) & ~( size_t.sizeof - 1 ) ) ); return *arg; } void va_end( va_list ap ) { // not needed ! } void va_copy( out va_list dst, va_list src ) { // seems pretty useless ! dst = src; }