Build dlopenable modules with `-module'.
[bpt/guile.git] / test-suite / standalone / test-ffi-lib.c
CommitLineData
37371ea1
AW
1/* Copyright (C) 2010 Free Software Foundation, Inc.
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public License
5 * as published by the Free Software Foundation; either version 3 of
6 * the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 * 02110-1301 USA
17 */
18
19#ifndef HAVE_CONFIG_H
20# include <config.h>
21#endif
22
23#include <libguile.h>
24
25void test_ffi_v_ (void);
26void test_ffi_v_ (void)
27{
28 return;
29}
30
31void test_ffi_v_u8 (scm_t_uint8 a);
32void test_ffi_v_u8 (scm_t_uint8 a)
33{
34 return;
35}
36
37void test_ffi_v_s64 (scm_t_int64 a);
38void test_ffi_v_s64 (scm_t_int64 a)
39{
40 return;
41}
42
43scm_t_int8 test_ffi_s8_ (void);
44scm_t_int8 test_ffi_s8_ (void)
45{
46 return -100;
47}
48scm_t_int8 test_ffi_s8_u8 (scm_t_uint8 a);
49scm_t_int8 test_ffi_s8_u8 (scm_t_uint8 a)
50{
51 return -100 + a;
52}
53
54scm_t_int8 test_ffi_s8_s64 (scm_t_int64 a);
55scm_t_int8 test_ffi_s8_s64 (scm_t_int64 a)
56{
57 return -100 + a;
58}
59
60scm_t_uint8 test_ffi_u8_ (void);
61scm_t_uint8 test_ffi_u8_ (void)
62{
63 return 200;
64}
65
66scm_t_uint8 test_ffi_u8_u8 (scm_t_uint8 a);
67scm_t_uint8 test_ffi_u8_u8 (scm_t_uint8 a)
68{
69 return 200 + a;
70}
71
72scm_t_uint8 test_ffi_u8_s64 (scm_t_int64 a);
73scm_t_uint8 test_ffi_u8_s64 (scm_t_int64 a)
74{
75 return 200 + a;
76}
77
78scm_t_int16 test_ffi_s16_ (void);
79scm_t_int16 test_ffi_s16_ (void)
80{
81 return -20000;
82}
83
84scm_t_int16 test_ffi_s16_u8 (scm_t_uint8 a);
85scm_t_int16 test_ffi_s16_u8 (scm_t_uint8 a)
86{
87 return -20000 + a;
88}
89
90scm_t_int16 test_ffi_s16_s64 (scm_t_int64 a);
91scm_t_int16 test_ffi_s16_s64 (scm_t_int64 a)
92{
93 return -20000 + a;
94}
95
96scm_t_uint16 test_ffi_u16_ (void);
97scm_t_uint16 test_ffi_u16_ (void)
98{
99 return 40000;
100}
101
102scm_t_uint16 test_ffi_u16_u8 (scm_t_uint8 a);
103scm_t_uint16 test_ffi_u16_u8 (scm_t_uint8 a)
104{
105 return 40000 + a;
106}
107
108scm_t_uint16 test_ffi_u16_s64 (scm_t_int64 a);
109scm_t_uint16 test_ffi_u16_s64 (scm_t_int64 a)
110{
111 return 40000 + a;
112}
113
114scm_t_int32 test_ffi_s32_ (void);
115scm_t_int32 test_ffi_s32_ (void)
116{
117 return -2000000000;
118}
119
120scm_t_int32 test_ffi_s32_u8 (scm_t_uint8 a);
121scm_t_int32 test_ffi_s32_u8 (scm_t_uint8 a)
122{
123 return -2000000000 + a;
124}
125
126scm_t_int32 test_ffi_s32_s64 (scm_t_int64 a);
127scm_t_int32 test_ffi_s32_s64 (scm_t_int64 a)
128{
129 return -2000000000 + a;
130}
131
132scm_t_uint32 test_ffi_u32_ (void);
133scm_t_uint32 test_ffi_u32_ (void)
134{
135 return 4000000000;
136}
137
138scm_t_uint32 test_ffi_u32_u8 (scm_t_uint8 a);
139scm_t_uint32 test_ffi_u32_u8 (scm_t_uint8 a)
140{
141 return 4000000000 + a;
142}
143
144scm_t_uint32 test_ffi_u32_s64 (scm_t_int64 a);
145scm_t_uint32 test_ffi_u32_s64 (scm_t_int64 a)
146{
147 return 4000000000 + a;
148}
149
150/* FIXME: use 64-bit literals */
151scm_t_int64 test_ffi_s64_ (void);
152scm_t_int64 test_ffi_s64_ (void)
153{
154 return -2000000000;
155}
156
157scm_t_int64 test_ffi_s64_u8 (scm_t_uint8 a);
158scm_t_int64 test_ffi_s64_u8 (scm_t_uint8 a)
159{
160 return -2000000000 + a;
161}
162
163scm_t_int64 test_ffi_s64_s64 (scm_t_int64 a);
164scm_t_int64 test_ffi_s64_s64 (scm_t_int64 a)
165{
166 return -2000000000 + a;
167}
168
169scm_t_uint64 test_ffi_u64_ (void);
170scm_t_uint64 test_ffi_u64_ (void)
171{
172 return 4000000000;
173}
174
175scm_t_uint64 test_ffi_u64_u8 (scm_t_uint8 a);
176scm_t_uint64 test_ffi_u64_u8 (scm_t_uint8 a)
177{
178 return 4000000000 + a;
179}
180
181scm_t_uint64 test_ffi_u64_s64 (scm_t_int64 a);
182scm_t_uint64 test_ffi_u64_s64 (scm_t_int64 a)
183{
184 return 4000000000 + a;
185}
186
187
188scm_t_int64 test_ffi_sum (scm_t_int8 a, scm_t_int16 b,
189 scm_t_int32 c, scm_t_int64 d);
190scm_t_int64 test_ffi_sum (scm_t_int8 a, scm_t_int16 b,
191 scm_t_int32 c, scm_t_int64 d)
192{
193 return d + c + b + a;
194}
c612ed59
AW
195
196
197struct foo
198{
199 scm_t_int8 a;
200 scm_t_int16 b;
201 scm_t_int32 c;
202 scm_t_int64 d;
203};
204scm_t_int64 test_ffi_sum_struct (struct foo foo);
205scm_t_int64 test_ffi_sum_struct (struct foo foo)
206{
207 return foo.d + foo.c + foo.b + foo.a;
208}
17d819d4
AW
209
210
211void* test_ffi_memcpy (void *dest, void *src, scm_t_int32 n);
212void* test_ffi_memcpy (void *dest, void *src, scm_t_int32 n)
213{
214 return memcpy (dest, src, n);
215}
33186356
LC
216
217int test_ffi_callback_1 (int (*f) (int), int x);
218int test_ffi_callback_1 (int (*f) (int), int x)
219{
220 return f (x) + 7;
221}
222
223double test_ffi_callback_2 (double (*f) (float, int, double),
224 float x, int y, double z);
225double test_ffi_callback_2 (double (*f) (float, int, double),
226 float x, int y, double z)
227{
228 return f (x, y, z);
229}