Changeset 1921
- Timestamp:
- 03/16/07 22:51:57 (2 years ago)
- Files:
-
- trunk/std/c/stdarg.di (modified) (1 diff)
- trunk/std/stdarg.di (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/std/c/stdarg.di
r1919 r1921 14 14 alias __builtin_va_end va_end; 15 15 alias __builtin_va_copy va_copy; 16 }17 else18 {19 alias void* va_list;20 16 21 void va_end(va_list ap)17 template va_start(T) 22 18 { 19 void va_start( out va_list ap, inout T parmn ) 20 { 23 21 24 }25 26 void va_copy( out va_list dest, va_list src )27 {28 static if ( is( dest T == T[1]) )29 {30 dest[0] = src[0];31 }32 else33 {34 dest = src;35 22 } 36 23 } 37 24 38 } 39 40 template va_start(T) 41 { 42 void va_start( out va_list ap, inout T parmn ) 25 template va_arg(T) 43 26 { 44 /* 45 ap = cast(va_list)(cast(void*)&parmn + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1))); 46 */ 27 T va_arg( inout va_list ap ) 28 { 29 return T.init; 30 } 47 31 } 48 32 } 49 50 template va_arg(T)51 {52 T va_arg( inout va_list ap )53 {54 /*55 T arg = *cast(T*)ap;56 ap = cast(va_list)(cast(void*)ap + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)));57 return arg;58 */59 T t;60 return t;61 }62 }trunk/std/stdarg.di
r1919 r1921 10 10 version( GNU ) 11 11 { 12 // va_list might be a pointer, but assuming so is not portable.13 12 private import gcc.builtins; 14 13 alias __builtin_va_list va_list; 14 alias __builtin_va_end va_end; 15 alias __builtin_va_copy va_copy; 15 16 16 // va_arg is handled magically by the compiler 17 } 18 else 19 { 20 alias void* va_list; 21 } 17 template va_start(T) 18 { 19 void va_start( out va_list ap, inout T parmn ) 20 { 22 21 23 template va_arg(T) 24 { 25 T va_arg( inout va_list _argptr ) 22 } 23 } 24 25 template va_arg(T) 26 26 { 27 /* 28 T arg = *cast(T*)_argptr; 29 _argptr = _argptr + ((T.sizeof + int.sizeof - 1) & ~(int.sizeof - 1)); 30 return arg; 31 */ 32 T t; return t; 27 T va_arg( inout va_list ap ) 28 { 29 return T.init; 30 } 33 31 } 34 32 } 35 36 private import std.c.stdarg;37 /* The existence of std.stdarg.va_copy isn't standard. Prevent38 conflicts by using '__'. */39 alias std.c.stdarg.va_copy __va_copy;












