annotate lphobos/std/stdarg.d @ 86:fd32135dca3e trunk

[svn r90] Major updates to the gen directory. Redesigned the 'elem' struct. Much more... !!! Lots of bugfixes. Added support for special foreach on strings. Added std.array, std.utf, std.ctype and std.uni to phobos. Changed all the .c files in the gen dir to .cpp (it *is* C++ after all)
author lindquist
date Sat, 03 Nov 2007 14:44:58 +0100
parents fb265a6efea1
children 5825d48b27d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
65
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
1
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
2 /*
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
3 * Placed in public domain.
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
4 * Written by Hauke Duden and Walter Bright
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
5 */
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
6
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
7 /* This is for use with variable argument lists with extern(D) linkage. */
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
8
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
9 module std.stdarg;
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
10
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
11 alias void* va_list;
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
12
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
13 T va_arg(T)(inout va_list vp)
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
14 {
70
fb265a6efea1 [svn r74] Fixed passing types with different alignment to D-style variadic functions.
lindquist
parents: 65
diff changeset
15 static assert((T.sizeof & (T.sizeof -1)) == 0);
fb265a6efea1 [svn r74] Fixed passing types with different alignment to D-style variadic functions.
lindquist
parents: 65
diff changeset
16 va_list vptmp = cast(va_list)((cast(size_t)vp + T.sizeof - 1) & ~(T.sizeof - 1));
fb265a6efea1 [svn r74] Fixed passing types with different alignment to D-style variadic functions.
lindquist
parents: 65
diff changeset
17 vp = vptmp + T.sizeof;
65
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
18 return *cast(T*)vptmp;
d4a678905d5e [svn r69] forgot std.stdarg
lindquist
parents:
diff changeset
19 }