Mercurial > pub > dyncall > dyncall
comparison test/suite_aggrs/main.c @ 462:653b65580cb4
suite_aggr:
- added arrays (inside of structs/unions, only, as only way to pass/return them by value)
- cleanups and pregen of source
author | Tassilo Philipp |
---|---|
date | Tue, 01 Feb 2022 21:44:18 +0100 |
parents | 236015fdf7a8 |
children | 0f3b6898078d |
comparison
equal
deleted
inserted
replaced
461:236015fdf7a8 | 462:653b65580cb4 |
---|---|
92 case 'p': dcArgPointer (p,K_p[pos]); break; | 92 case 'p': dcArgPointer (p,K_p[pos]); break; |
93 case 'f': dcArgFloat (p,K_f[pos]); break; | 93 case 'f': dcArgFloat (p,K_f[pos]); break; |
94 case 'd': dcArgDouble (p,K_d[pos]); break; | 94 case 'd': dcArgDouble (p,K_d[pos]); break; |
95 case '<': /* union */ | 95 case '<': /* union */ |
96 case '{': /* struct */ | 96 case '{': /* struct */ |
97 { | 97 { |
98 /* find aggregate sig */ | 98 /* find aggregate sig */ |
99 int len; | 99 int len; |
100 DCstruct *st; | 100 DCstruct *st; |
101 int i = find_agg_idx(&len, sig); | 101 int i = find_agg_idx(&len, sig); |
102 if(i == -1) { | 102 if(i == -1) { |
124 case 'p': s = (dcCallPointer (p,t) == K_p[pos]) ; break; | 124 case 'p': s = (dcCallPointer (p,t) == K_p[pos]) ; break; |
125 case 'f': s = (dcCallFloat (p,t) == K_f[pos]) ; break; | 125 case 'f': s = (dcCallFloat (p,t) == K_f[pos]) ; break; |
126 case 'd': s = (dcCallDouble (p,t) == K_d[pos]) ; break; | 126 case 'd': s = (dcCallDouble (p,t) == K_d[pos]) ; break; |
127 case '<': /* union */ | 127 case '<': /* union */ |
128 case '{': /* struct */ | 128 case '{': /* struct */ |
129 { | 129 { |
130 /* bound check memory adjacent to returned aggregate, to check for overflows by dcCallStruct */ | 130 /* bound check memory adjacent to returned aggregate, to check for overflows by dcCallStruct */ |
131 long long* adj_ll = (get_max_aggr_size() - rtype_size) > sizeof(long long) ? (long long*)((char*)V_a[0] + rtype_size) : NULL; | 131 long long* adj_ll = (get_max_aggr_size() - rtype_size) > sizeof(long long) ? (long long*)((char*)V_a[0] + rtype_size) : NULL; |
132 if(adj_ll) | 132 if(adj_ll) |
133 *adj_ll = 0x0123456789abcdef; | 133 *adj_ll = 0x0123456789abcdef; |
134 | 134 |
158 case 'p': s = ( V_p[pos] == K_p[pos] ); if (!s) printf("'p':%d: %p != %p ; ", pos, V_p[pos], K_p[pos]); break; | 158 case 'p': s = ( V_p[pos] == K_p[pos] ); if (!s) printf("'p':%d: %p != %p ; ", pos, V_p[pos], K_p[pos]); break; |
159 case 'f': s = ( V_f[pos] == K_f[pos] ); if (!s) printf("'f':%d: %f != %f ; ", pos, V_f[pos], K_f[pos]); break; | 159 case 'f': s = ( V_f[pos] == K_f[pos] ); if (!s) printf("'f':%d: %f != %f ; ", pos, V_f[pos], K_f[pos]); break; |
160 case 'd': s = ( V_d[pos] == K_d[pos] ); if (!s) printf("'d':%d: %f != %f ; ", pos, V_d[pos], K_d[pos]); break; | 160 case 'd': s = ( V_d[pos] == K_d[pos] ); if (!s) printf("'d':%d: %f != %f ; ", pos, V_d[pos], K_d[pos]); break; |
161 case '<': /* union */ | 161 case '<': /* union */ |
162 case '{': /* struct */ | 162 case '{': /* struct */ |
163 { | 163 { |
164 /* no check: guaranteed to exist, or invoke func would've exited when passing args, above */ | 164 /* no check: guaranteed to exist, or invoke func would've exited when passing args, above */ |
165 int len; | 165 int len; |
166 int i = find_agg_idx(&len, sig); | 166 int i = find_agg_idx(&len, sig); |
167 s = ((int(*)(const void*,const void*))G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]); | 167 s = ((int(*)(const void*,const void*))G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]); |
168 if (!s) printf("'%c':%d: *%p != *%p ; ", atype, pos, V_a[pos], K_a[pos]); | 168 if (!s) printf("'%c':%d: *%p != *%p ; ", atype, pos, V_a[pos], K_a[pos]); |
221 dcFreeStruct(((DCstruct*(*)())G_agg_touchdcstfuncs[i])()); | 221 dcFreeStruct(((DCstruct*(*)())G_agg_touchdcstfuncs[i])()); |
222 | 222 |
223 dcFree(G_callvm); | 223 dcFree(G_callvm); |
224 deinit_test_data(G_maxargs); | 224 deinit_test_data(G_maxargs); |
225 | 225 |
226 printf("result: suite_aggrs: %d %d\n", total, get_max_aggr_size()); | 226 printf("result: suite_aggrs: %d\n", total); |
227 | 227 |
228 dcTest_deInitPlatform(); | 228 dcTest_deInitPlatform(); |
229 | 229 |
230 return !total; | 230 return !total; |
231 } | 231 } |