annotate lphobos/std/stdarg.d @ 108:288fe1029e1f trunk

[svn r112] Fixed 'case 1,2,3:' style case statements. Fixed a bunch of bugs with return/break/continue in loops. Fixed support for the DMDFE hidden implicit return value variable. This can be needed for some foreach statements where the loop body is converted to a nested delegate, but also possibly returns from the function. Added std.math to phobos. Added AA runtime support code, done ground work for implementing AAs. Several other bugfixes.
author lindquist
date Tue, 20 Nov 2007 05:29:20 +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 }