Mercurial > projects > ldc
annotate tango/tango/stdc/stdarg.d @ 144:a27941d00351 trunk
[svn r149] fixed: a bunch of D-style variadics problems.
fixed: GotoDefaultStatement implemented.
fixed: some other minor bugs.
author | lindquist |
---|---|
date | Sat, 26 Jan 2008 17:13:22 +0100 |
parents | 1700239cab2e |
children |
rev | line source |
---|---|
132 | 1 /** |
2 * D header file for C99. | |
3 * | |
4 * Copyright: Public Domain | |
5 * License: Public Domain | |
6 * Authors: Hauke Duden, Walter Bright | |
7 * Standards: ISO/IEC 9899:1999 (E) | |
8 */ | |
9 module tango.stdc.stdarg; | |
10 | |
11 | |
12 version( GNU ) | |
13 { | |
14 public import std.c.stdarg; | |
15 } | |
144
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
16 else version( LLVMDC ) |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
17 { |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
18 alias void* va_list; |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
19 |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
20 pragma(LLVM_internal, "va_start") |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
21 void va_start(T)(va_list ap, ref T); |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
22 |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
23 pragma(LLVM_internal, "va_arg") |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
24 T va_arg(T)(va_list ap); |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
25 |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
26 pragma(LLVM_internal, "va_intrinsic", "llvm.va_end") |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
27 void va_end(va_list args); |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
28 |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
29 pragma(LLVM_internal, "va_intrinsic", "llvm.va_copy") |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
30 void va_copy(va_list dst, va_list src); |
a27941d00351
[svn r149] fixed: a bunch of D-style variadics problems.
lindquist
parents:
132
diff
changeset
|
31 } |
132 | 32 else |
33 { | |
34 alias void* va_list; | |
35 | |
36 template va_start( T ) | |
37 { | |
38 void va_start( out va_list ap, inout T parmn ) | |
39 { | |
40 ap = cast(va_list) ( cast(void*) &parmn + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); | |
41 } | |
42 } | |
43 | |
44 template va_arg( T ) | |
45 { | |
46 T va_arg( inout va_list ap ) | |
47 { | |
48 T arg = *cast(T*) ap; | |
49 ap = cast(va_list) ( cast(void*) ap + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); | |
50 return arg; | |
51 } | |
52 } | |
53 | |
54 void va_end( va_list ap ) | |
55 { | |
56 | |
57 } | |
58 | |
59 void va_copy( out va_list dest, va_list src ) | |
60 { | |
61 dest = src; | |
62 } | |
63 } |