1
|
1
|
|
2 /**
|
|
3 * C's <stdarg.h>
|
|
4 * Authors: Hauke Duden and Walter Bright, Digital Mars, www.digitalmars.com
|
|
5 * License: Public Domain
|
|
6 * Macros:
|
|
7 * WIKI=Phobos/StdCStdarg
|
|
8 */
|
|
9
|
|
10 /* This is for use with extern(C) variable argument lists. */
|
|
11
|
|
12 module std.c.stdarg;
|
|
13
|
|
14 alias void* va_list;
|
|
15
|
|
16 template va_start(T)
|
|
17 {
|
|
18 void va_start(out va_list ap, inout T parmn)
|
|
19 {
|
|
20 ap = cast(va_list)(cast(void*)&parmn + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
|
|
21 }
|
|
22 }
|
|
23
|
|
24 template va_arg(T)
|
|
25 {
|
|
26 T va_arg(inout va_list ap)
|
|
27 {
|
|
28 T arg = *cast(T*)ap;
|
|
29 ap = cast(va_list)(cast(void*)ap + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));
|
|
30 return arg;
|
|
31 }
|
|
32 }
|
|
33
|
|
34 void va_end(va_list ap)
|
|
35 {
|
|
36
|
|
37 }
|
|
38
|
|
39 void va_copy(out va_list dest, va_list src)
|
|
40 {
|
|
41 dest = src;
|
|
42 }
|