annotate tangotests/vararg3.d @ 214:629cfc1e7b77 trunk

[svn r230] Added vararg3 sample tangotest.
author lindquist
date Fri, 30 May 2008 19:32:56 +0200
parents
children a58d8f4b84df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
214
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
1 // tries to implement a fairly complete variadic print function
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
2 module tangotests.vararg3;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
3
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
4 extern(C) int printf(char*, ...);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
5
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
6 struct User
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
7 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
8 char[] name;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
9 char[] nick;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
10 uint age;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
11
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
12 char[] toString()
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
13 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
14 return nick ~ "(" ~ name ~ ")";
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
15 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
16 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
17
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
18 struct Infidel
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
19 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
20 char[] whocares;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
21 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
22
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
23 class Obj
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
24 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
25 private char[] ty;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
26
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
27 this(char[] t)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
28 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
29 ty = t;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
30 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
31
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
32 char[] toString()
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
33 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
34 return "Obj(" ~ ty ~ ")";
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
35 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
36 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
37
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
38 void main()
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
39 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
40 User user = User("Bob Doe", "bd", 47);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
41 char[] str = user.toString();
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
42 printf("Direct call:\n%.*s\nBy typeinfo:\n", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
43 print(user, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
44
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
45 print("Without toString:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
46 Infidel inf = Infidel("not me");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
47 print(inf, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
48
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
49 print("Character arrays:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
50 print("hello world\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
51
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
52 print("Signed integers:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
53 print(cast(byte)byte.max,' ',cast(short)short.max,' ',cast(int)int.max,' ',cast(long)long.max,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
54
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
55 print("Unsigned integers:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
56 print(cast(ubyte)ubyte.max,' ',cast(ushort)ushort.max,' ',cast(uint)uint.max,' ',cast(ulong)ulong.max,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
57
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
58 print("Floating point:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
59 print(cast(float)1.273f, ' ', cast(double)3.412367, ' ', cast(real)142.96731112, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
60
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
61 print("Arrays:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
62 int[] ia1 = [1,2,3,4,5,6,7,8,9];
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
63 print(ia1, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
64 float[] fa1 = [0.1f, 0.15f, 0.2f, 0.25f, 0.3f];
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
65 print(fa1, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
66
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
67 print("Pointers:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
68 print(&user,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
69 print(&inf,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
70 print(&ia1,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
71 print(&fa1,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
72
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
73 print("Static arrays:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
74 int[5] isa1 = [1,2,4,8,16];
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
75 print(isa1,'\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
76
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
77 print("Classes:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
78 Obj o = new Obj("foo");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
79 print(o, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
80
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
81 print("Mixed:\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
82 print(123, ' ', 42.536f, " foobar ", ia1, ' ', user, '\n');
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
83 print(42, ' ', cast(byte)12, ' ', user, ' ', cast(short)1445, " foo\n");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
84 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
85
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
86 private void* get_va_arg(TypeInfo ti, ref void* vp)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
87 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
88 auto tisize = ti.tsize;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
89 assert(tisize);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
90 size_t size = tisize > size_t.sizeof ? size_t.sizeof : tisize;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
91 void* vptmp = cast(void*)((cast(size_t)vp + size - 1) & ~(size - 1));
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
92 vp = vptmp + tisize;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
93 return vptmp;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
94 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
95
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
96 void print(TypeInfo ti, void* arg)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
97 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
98 if (ti == typeid(byte))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
99 printf("%d", *cast(byte*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
100 else if (ti == typeid(short))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
101 printf("%d", *cast(short*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
102 else if (ti == typeid(int))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
103 printf("%d", *cast(int*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
104 else if (ti == typeid(long))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
105 printf("%lld", *cast(long*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
106
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
107 else if (ti == typeid(ubyte))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
108 printf("%u", *cast(ubyte*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
109 else if (ti == typeid(ushort))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
110 printf("%u", *cast(ushort*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
111 else if (ti == typeid(uint))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
112 printf("%u", *cast(uint*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
113 else if (ti == typeid(ulong))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
114 printf("%llu", *cast(ulong*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
115
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
116 else if (ti == typeid(float))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
117 printf("%f", *cast(float*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
118 else if (ti == typeid(double))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
119 printf("%f", *cast(double*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
120 else if (ti == typeid(real)) // FIXME: 80bit?
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
121 printf("%f", *cast(real*)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
122
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
123 else if (ti == typeid(char))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
124 printf("%.*s", 1, arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
125 else if (ti == typeid(wchar))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
126 printf("%.*s", 2, arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
127 else if (ti == typeid(dchar))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
128 printf("%.*s", 4, arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
129
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
130 else if (ti == typeid(char[]))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
131 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
132 char[] str = *cast(char[]*)arg;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
133 printf("%.*s", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
134 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
135 else if (ti == typeid(wchar[]))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
136 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
137 wchar[] str = *cast(wchar[]*)arg;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
138 printf("%.*s", str.length*2, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
139 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
140 else if (ti == typeid(dchar[]))
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
141 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
142 dchar[] str = *cast(dchar[]*)arg;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
143 printf("%.*s", str.length*4, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
144 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
145
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
146 else if (auto pti = cast(TypeInfo_Pointer)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
147 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
148 printf("%p", *cast(void**)arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
149 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
150
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
151 else if (auto sti = cast(TypeInfo_Struct)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
152 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
153 if (sti.xtoString !is null)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
154 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
155 char[] str = sti.xtoString(arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
156 printf("%.*s", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
157 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
158 else
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
159 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
160 char[] str = sti.toString();
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
161 printf("%.*s", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
162 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
163 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
164
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
165 else if (auto ati = cast(TypeInfo_Array)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
166 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
167 auto tnext = ati.next;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
168 size_t len = *cast(size_t*)arg;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
169 void* ptr = *(cast(void**)arg + 1);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
170 printf("[");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
171 for(auto i=0; i<len; ++i)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
172 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
173 print(tnext, get_va_arg(tnext, ptr));
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
174 if (i < len-1)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
175 printf(",");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
176 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
177 printf("]");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
178 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
179
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
180 else if (auto cti = cast(TypeInfo_Class)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
181 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
182 auto o = *cast(Object*)arg;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
183 char[] str = o.toString();
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
184 printf("%.*s", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
185 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
186
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
187 // static arrays are converted to dynamic arrays when passed to variadic functions
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
188 else if (auto sati = cast(TypeInfo_StaticArray)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
189 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
190 assert(0, "static arrays not supported");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
191 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
192
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
193 else if (auto aati = cast(TypeInfo_AssociativeArray)ti)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
194 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
195 assert(0, "associative array not supported");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
196 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
197
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
198 else
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
199 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
200 char[] str = ti.toString();
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
201 printf("typeinfo: %.*s\n", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
202 str = ti.classinfo.name;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
203 printf("typeinfo.classinfo: %.*s\n", str.length, str.ptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
204 assert(0, "unsupported type ^");
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
205 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
206 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
207
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
208 void print(...)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
209 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
210 void* argptr = _argptr;
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
211 assert(argptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
212
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
213 foreach(i,ti; _arguments)
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
214 {
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
215 void* arg = get_va_arg(ti, argptr);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
216 assert(arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
217 print(ti, arg);
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
218 }
629cfc1e7b77 [svn r230] Added vararg3 sample tangotest.
lindquist
parents:
diff changeset
219 }