ffi 0.4.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (316) hide show
  1. data/LICENSE +51 -0
  2. data/README.rdoc +69 -0
  3. data/Rakefile +142 -0
  4. data/ext/ffi_c/AbstractMemory.c +412 -0
  5. data/ext/ffi_c/AbstractMemory.h +68 -0
  6. data/ext/ffi_c/AutoPointer.c +60 -0
  7. data/ext/ffi_c/AutoPointer.h +18 -0
  8. data/ext/ffi_c/Buffer.c +171 -0
  9. data/ext/ffi_c/Callback.c +374 -0
  10. data/ext/ffi_c/Callback.h +47 -0
  11. data/ext/ffi_c/DynamicLibrary.c +213 -0
  12. data/ext/ffi_c/DynamicLibrary.h +22 -0
  13. data/ext/ffi_c/Invoker.c +962 -0
  14. data/ext/ffi_c/LastError.c +135 -0
  15. data/ext/ffi_c/LastError.h +18 -0
  16. data/ext/ffi_c/MemoryPointer.c +156 -0
  17. data/ext/ffi_c/MemoryPointer.h +20 -0
  18. data/ext/ffi_c/NullPointer.c +143 -0
  19. data/ext/ffi_c/Platform.c +59 -0
  20. data/ext/ffi_c/Platform.h +16 -0
  21. data/ext/ffi_c/Pointer.c +164 -0
  22. data/ext/ffi_c/Pointer.h +25 -0
  23. data/ext/ffi_c/Struct.c +477 -0
  24. data/ext/ffi_c/Struct.h +26 -0
  25. data/ext/ffi_c/Type.c +230 -0
  26. data/ext/ffi_c/Type.h +28 -0
  27. data/ext/ffi_c/Types.c +118 -0
  28. data/ext/ffi_c/Types.h +54 -0
  29. data/ext/ffi_c/compat.h +22 -0
  30. data/ext/ffi_c/endian.h +40 -0
  31. data/ext/ffi_c/extconf.rb +31 -0
  32. data/ext/ffi_c/ffi.c +76 -0
  33. data/ext/ffi_c/libffi.bsd.mk +34 -0
  34. data/ext/ffi_c/libffi.darwin.mk +75 -0
  35. data/ext/ffi_c/libffi.gnu.mk +29 -0
  36. data/ext/ffi_c/libffi.mk +13 -0
  37. data/ext/ffi_c/libffi/ChangeLog +3243 -0
  38. data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  39. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  40. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  41. data/ext/ffi_c/libffi/LICENSE +21 -0
  42. data/ext/ffi_c/libffi/Makefile.am +177 -0
  43. data/ext/ffi_c/libffi/Makefile.in +1640 -0
  44. data/ext/ffi_c/libffi/README +328 -0
  45. data/ext/ffi_c/libffi/TODO +1 -0
  46. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  47. data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  48. data/ext/ffi_c/libffi/compile +142 -0
  49. data/ext/ffi_c/libffi/config.guess +1516 -0
  50. data/ext/ffi_c/libffi/config.sub +1626 -0
  51. data/ext/ffi_c/libffi/configure +24414 -0
  52. data/ext/ffi_c/libffi/configure.ac +365 -0
  53. data/ext/ffi_c/libffi/configure.host +11 -0
  54. data/ext/ffi_c/libffi/depcomp +584 -0
  55. data/ext/ffi_c/libffi/doc/libffi.info +533 -0
  56. data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  57. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  58. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  59. data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  60. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  61. data/ext/ffi_c/libffi/include/Makefile.in +422 -0
  62. data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  63. data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  64. data/ext/ffi_c/libffi/install-sh +323 -0
  65. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  66. data/ext/ffi_c/libffi/libtool-version +29 -0
  67. data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  68. data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  69. data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  70. data/ext/ffi_c/libffi/ltconfig +2862 -0
  71. data/ext/ffi_c/libffi/ltmain.sh +6930 -0
  72. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  73. data/ext/ffi_c/libffi/man/Makefile.in +395 -0
  74. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  75. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  76. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  77. data/ext/ffi_c/libffi/mdate-sh +201 -0
  78. data/ext/ffi_c/libffi/missing +353 -0
  79. data/ext/ffi_c/libffi/mkinstalldirs +158 -0
  80. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  81. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  82. data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  83. data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  84. data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  85. data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  86. data/ext/ffi_c/libffi/src/closures.c +596 -0
  87. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  88. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  89. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  90. data/ext/ffi_c/libffi/src/debug.c +59 -0
  91. data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  92. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  93. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  94. data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  95. data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  96. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  97. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  98. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  99. data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  100. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  101. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  102. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  103. data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  104. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  105. data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  106. data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  107. data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  108. data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  109. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  110. data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  111. data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  112. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  113. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  114. data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  115. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  116. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  117. data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  118. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  119. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  120. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  121. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  122. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  123. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  124. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  125. data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  126. data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  127. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  128. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  129. data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  130. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  131. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  132. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  133. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  134. data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  135. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  136. data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  137. data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  138. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  139. data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  140. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  141. data/ext/ffi_c/libffi/src/types.c +77 -0
  142. data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  143. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  144. data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  145. data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  146. data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  147. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  148. data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  149. data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  150. data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  151. data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  152. data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  153. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  154. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  155. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  156. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  267. data/ext/ffi_c/libffi/texinfo.tex +7482 -0
  268. data/ext/ffi_c/rbffi.h +23 -0
  269. data/gen/Rakefile +12 -0
  270. data/lib/1.8/ffi_c.so +0 -0
  271. data/lib/1.9/ffi_c.so +0 -0
  272. data/lib/ffi.rb +11 -0
  273. data/lib/ffi/autopointer.rb +61 -0
  274. data/lib/ffi/buffer.rb +0 -0
  275. data/lib/ffi/callback.rb +10 -0
  276. data/lib/ffi/enum.rb +78 -0
  277. data/lib/ffi/errno.rb +8 -0
  278. data/lib/ffi/ffi.rb +96 -0
  279. data/lib/ffi/io.rb +21 -0
  280. data/lib/ffi/library.rb +243 -0
  281. data/lib/ffi/managedstruct.rb +55 -0
  282. data/lib/ffi/memorypointer.rb +73 -0
  283. data/lib/ffi/platform.rb +78 -0
  284. data/lib/ffi/pointer.rb +119 -0
  285. data/lib/ffi/struct.rb +354 -0
  286. data/lib/ffi/tools/const_generator.rb +177 -0
  287. data/lib/ffi/tools/generator.rb +58 -0
  288. data/lib/ffi/tools/generator_task.rb +35 -0
  289. data/lib/ffi/tools/struct_generator.rb +194 -0
  290. data/lib/ffi/tools/types_generator.rb +123 -0
  291. data/lib/ffi/types.rb +153 -0
  292. data/lib/ffi/union.rb +17 -0
  293. data/lib/ffi/variadic.rb +30 -0
  294. data/spec/ffi/bool_spec.rb +24 -0
  295. data/spec/ffi/buffer_spec.rb +196 -0
  296. data/spec/ffi/callback_spec.rb +560 -0
  297. data/spec/ffi/enum_spec.rb +164 -0
  298. data/spec/ffi/errno_spec.rb +13 -0
  299. data/spec/ffi/library_spec.rb +144 -0
  300. data/spec/ffi/managed_struct_spec.rb +56 -0
  301. data/spec/ffi/number_spec.rb +231 -0
  302. data/spec/ffi/pointer_spec.rb +195 -0
  303. data/spec/ffi/rbx/attach_function_spec.rb +27 -0
  304. data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  305. data/spec/ffi/rbx/spec_helper.rb +1 -0
  306. data/spec/ffi/rbx/struct_spec.rb +13 -0
  307. data/spec/ffi/spec_helper.rb +17 -0
  308. data/spec/ffi/string_spec.rb +103 -0
  309. data/spec/ffi/struct_callback_spec.rb +41 -0
  310. data/spec/ffi/struct_initialize_spec.rb +30 -0
  311. data/spec/ffi/struct_spec.rb +476 -0
  312. data/spec/ffi/typedef_spec.rb +48 -0
  313. data/spec/ffi/union_spec.rb +60 -0
  314. data/spec/ffi/variadic_spec.rb +84 -0
  315. data/spec/spec.opts +4 -0
  316. metadata +375 -0
@@ -0,0 +1,89 @@
1
+ /* Area: closure_call
2
+ Purpose: Check multiple values passing from different type.
3
+ Also, exceed the limit of gpr and fpr registers on PowerPC
4
+ Darwin.
5
+ Limitations: none.
6
+ PR: none.
7
+ Originator: <andreast@gcc.gnu.org> 20030828 */
8
+
9
+ /* { dg-do run } */
10
+ #include "ffitest.h"
11
+
12
+ static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
+ void* userdata)
14
+ {
15
+ *(ffi_arg*)resp =
16
+ (int)*(double *)args[0] +(int)(*(double *)args[1]) +
17
+ (int)(*(double *)args[2]) + (int)*(double *)args[3] +
18
+ (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) +
19
+ (int)*(double *)args[6] + (int)(*(int *)args[7]) +
20
+ (int)(*(double *)args[8]) + (int)*(int *)args[9] +
21
+ (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
22
+ (int)*(int *)args[12] + (int)(*(float *)args[13]) +
23
+ (int)(*(int *)args[14]) + *(int *)args[15] + (int)(long)userdata;
24
+
25
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
26
+ (int)*(double *)args[0], (int)(*(double *)args[1]),
27
+ (int)(*(double *)args[2]), (int)*(double *)args[3],
28
+ (int)(*(signed short *)args[4]), (int)(*(double *)args[5]),
29
+ (int)*(double *)args[6], (int)(*(int *)args[7]),
30
+ (int)(*(double*)args[8]), (int)*(int *)args[9],
31
+ (int)(*(int *)args[10]), (int)(*(float *)args[11]),
32
+ (int)*(int *)args[12], (int)(*(float *)args[13]),
33
+ (int)(*(int *)args[14]), *(int *)args[15], (int)(long)userdata,
34
+ (int)*(ffi_arg *)resp);
35
+ }
36
+
37
+ typedef int (*closure_test_type2)(double, double, double, double, signed short,
38
+ double, double, int, double, int, int, float,
39
+ int, float, int, int);
40
+
41
+ int main (void)
42
+ {
43
+ ffi_cif cif;
44
+ #ifndef USING_MMAP
45
+ static ffi_closure cl;
46
+ #endif
47
+ ffi_closure *pcl;
48
+ ffi_type * cl_arg_types[17];
49
+ int res;
50
+
51
+ #ifdef USING_MMAP
52
+ pcl = allocate_mmap (sizeof(ffi_closure));
53
+ #else
54
+ pcl = &cl;
55
+ #endif
56
+
57
+ cl_arg_types[0] = &ffi_type_double;
58
+ cl_arg_types[1] = &ffi_type_double;
59
+ cl_arg_types[2] = &ffi_type_double;
60
+ cl_arg_types[3] = &ffi_type_double;
61
+ cl_arg_types[4] = &ffi_type_sshort;
62
+ cl_arg_types[5] = &ffi_type_double;
63
+ cl_arg_types[6] = &ffi_type_double;
64
+ cl_arg_types[7] = &ffi_type_sint;
65
+ cl_arg_types[8] = &ffi_type_double;
66
+ cl_arg_types[9] = &ffi_type_sint;
67
+ cl_arg_types[10] = &ffi_type_sint;
68
+ cl_arg_types[11] = &ffi_type_float;
69
+ cl_arg_types[12] = &ffi_type_sint;
70
+ cl_arg_types[13] = &ffi_type_float;
71
+ cl_arg_types[14] = &ffi_type_sint;
72
+ cl_arg_types[15] = &ffi_type_sint;
73
+ cl_arg_types[16] = NULL;
74
+
75
+ /* Initialize the cif */
76
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
77
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
78
+
79
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn2,
80
+ (void *) 3 /* userdata */) == FFI_OK);
81
+
82
+ res = (*((closure_test_type2)pcl))
83
+ (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13,
84
+ 19.0, 21, 1);
85
+ /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
86
+ printf("res: %d\n",res);
87
+ /* { dg-output "\nres: 255" } */
88
+ exit(0);
89
+ }
@@ -0,0 +1,90 @@
1
+ /* Area: closure_call
2
+ Purpose: Check multiple values passing from different type.
3
+ Also, exceed the limit of gpr and fpr registers on PowerPC
4
+ Darwin.
5
+ Limitations: none.
6
+ PR: none.
7
+ Originator: <andreast@gcc.gnu.org> 20030828 */
8
+
9
+ /* { dg-do run } */
10
+ #include "ffitest.h"
11
+
12
+ static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
+ void* userdata)
14
+ {
15
+ *(ffi_arg*)resp =
16
+ (int)*(float *)args[0] +(int)(*(float *)args[1]) +
17
+ (int)(*(float *)args[2]) + (int)*(float *)args[3] +
18
+ (int)(*(float *)args[4]) + (int)(*(float *)args[5]) +
19
+ (int)*(float *)args[6] + (int)(*(float *)args[7]) +
20
+ (int)(*(double *)args[8]) + (int)*(int *)args[9] +
21
+ (int)(*(float *)args[10]) + (int)(*(float *)args[11]) +
22
+ (int)*(int *)args[12] + (int)(*(float *)args[13]) +
23
+ (int)(*(float *)args[14]) + *(int *)args[15] + (int)(long)userdata;
24
+
25
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
26
+ (int)*(float *)args[0], (int)(*(float *)args[1]),
27
+ (int)(*(float *)args[2]), (int)*(float *)args[3],
28
+ (int)(*(float *)args[4]), (int)(*(float *)args[5]),
29
+ (int)*(float *)args[6], (int)(*(float *)args[7]),
30
+ (int)(*(double *)args[8]), (int)*(int *)args[9],
31
+ (int)(*(float *)args[10]), (int)(*(float *)args[11]),
32
+ (int)*(int *)args[12], (int)(*(float *)args[13]),
33
+ (int)(*(float *)args[14]), *(int *)args[15], (int)(long)userdata,
34
+ (int)*(ffi_arg *)resp);
35
+
36
+ }
37
+
38
+ typedef int (*closure_test_type3)(float, float, float, float, float, float,
39
+ float, float, double, int, float, float, int,
40
+ float, float, int);
41
+
42
+ int main (void)
43
+ {
44
+ ffi_cif cif;
45
+ #ifndef USING_MMAP
46
+ static ffi_closure cl;
47
+ #endif
48
+ ffi_closure *pcl;
49
+ ffi_type * cl_arg_types[17];
50
+ int res;
51
+
52
+ #ifdef USING_MMAP
53
+ pcl = allocate_mmap (sizeof(ffi_closure));
54
+ #else
55
+ pcl = &cl;
56
+ #endif
57
+
58
+ cl_arg_types[0] = &ffi_type_float;
59
+ cl_arg_types[1] = &ffi_type_float;
60
+ cl_arg_types[2] = &ffi_type_float;
61
+ cl_arg_types[3] = &ffi_type_float;
62
+ cl_arg_types[4] = &ffi_type_float;
63
+ cl_arg_types[5] = &ffi_type_float;
64
+ cl_arg_types[6] = &ffi_type_float;
65
+ cl_arg_types[7] = &ffi_type_float;
66
+ cl_arg_types[8] = &ffi_type_double;
67
+ cl_arg_types[9] = &ffi_type_sint;
68
+ cl_arg_types[10] = &ffi_type_float;
69
+ cl_arg_types[11] = &ffi_type_float;
70
+ cl_arg_types[12] = &ffi_type_sint;
71
+ cl_arg_types[13] = &ffi_type_float;
72
+ cl_arg_types[14] = &ffi_type_float;
73
+ cl_arg_types[15] = &ffi_type_sint;
74
+ cl_arg_types[16] = NULL;
75
+
76
+ /* Initialize the cif */
77
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
78
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
79
+
80
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn3,
81
+ (void *) 3 /* userdata */) == FFI_OK);
82
+
83
+ res = (*((closure_test_type3)pcl))
84
+ (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13,
85
+ 19.19, 21.21, 1);
86
+ /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 19 21 1 3: 135" } */
87
+ printf("res: %d\n",res);
88
+ /* { dg-output "\nres: 135" } */
89
+ exit(0);
90
+ }
@@ -0,0 +1,97 @@
1
+ /* Area: closure_call
2
+ Purpose: Check multiple long long values passing.
3
+ Also, exceed the limit of gpr and fpr registers on PowerPC
4
+ Darwin.
5
+ Limitations: none.
6
+ PR: none.
7
+ Originator: <andreast@gcc.gnu.org> 20031026 */
8
+
9
+ /* { dg-do run } */
10
+
11
+ #include "ffitest.h"
12
+
13
+ static void
14
+ closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
15
+ void* userdata)
16
+ {
17
+ *(ffi_arg*)resp =
18
+ (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
19
+ (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] +
20
+ (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] +
21
+ (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] +
22
+ (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] +
23
+ (int)*(unsigned long long *)args[10] +
24
+ (int)*(unsigned long long *)args[11] +
25
+ (int)*(unsigned long long *)args[12] +
26
+ (int)*(unsigned long long *)args[13] +
27
+ (int)*(unsigned long long *)args[14] +
28
+ *(int *)args[15] + (int)(long)userdata;
29
+
30
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
31
+ (int)*(unsigned long long *)args[0],
32
+ (int)*(unsigned long long *)args[1],
33
+ (int)*(unsigned long long *)args[2],
34
+ (int)*(unsigned long long *)args[3],
35
+ (int)*(unsigned long long *)args[4],
36
+ (int)*(unsigned long long *)args[5],
37
+ (int)*(unsigned long long *)args[6],
38
+ (int)*(unsigned long long *)args[7],
39
+ (int)*(unsigned long long *)args[8],
40
+ (int)*(unsigned long long *)args[9],
41
+ (int)*(unsigned long long *)args[10],
42
+ (int)*(unsigned long long *)args[11],
43
+ (int)*(unsigned long long *)args[12],
44
+ (int)*(unsigned long long *)args[13],
45
+ (int)*(unsigned long long *)args[14],
46
+ *(int *)args[15],
47
+ (int)(long)userdata, (int)*(ffi_arg *)resp);
48
+
49
+ }
50
+
51
+ typedef int (*closure_test_type0)(unsigned long long, unsigned long long,
52
+ unsigned long long, unsigned long long,
53
+ unsigned long long, unsigned long long,
54
+ unsigned long long, unsigned long long,
55
+ unsigned long long, unsigned long long,
56
+ unsigned long long, unsigned long long,
57
+ unsigned long long, unsigned long long,
58
+ unsigned long long, int);
59
+
60
+ int main (void)
61
+ {
62
+ ffi_cif cif;
63
+ #ifndef USING_MMAP
64
+ static ffi_closure cl;
65
+ #endif
66
+ ffi_closure *pcl;
67
+ ffi_type * cl_arg_types[17];
68
+ int i, res;
69
+
70
+ #ifdef USING_MMAP
71
+ pcl = allocate_mmap (sizeof(ffi_closure));
72
+ #else
73
+ pcl = &cl;
74
+ #endif
75
+
76
+ for (i = 0; i < 15; i++) {
77
+ cl_arg_types[i] = &ffi_type_uint64;
78
+ }
79
+ cl_arg_types[15] = &ffi_type_sint;
80
+ cl_arg_types[16] = NULL;
81
+
82
+ /* Initialize the cif */
83
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
84
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
85
+
86
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn0,
87
+ (void *) 3 /* userdata */) == FFI_OK);
88
+
89
+ res = (*((closure_test_type0)pcl))
90
+ (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL,
91
+ 13LL, 19LL, 21LL, 1);
92
+ /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
93
+ printf("res: %d\n",res);
94
+ /* { dg-output "\nres: 680" } */
95
+
96
+ exit(0);
97
+ }
@@ -0,0 +1,99 @@
1
+ /* Area: closure_call
2
+ Purpose: Check multiple long long values passing.
3
+ Exceed the limit of gpr registers on PowerPC
4
+ Darwin.
5
+ Limitations: none.
6
+ PR: none.
7
+ Originator: <andreast@gcc.gnu.org> 20031026 */
8
+
9
+ /* { dg-do run } */
10
+ #include "ffitest.h"
11
+
12
+ static void
13
+ closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args,
14
+ void* userdata)
15
+ {
16
+ *(ffi_arg*)resp =
17
+ (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
18
+ (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] +
19
+ (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] +
20
+ (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] +
21
+ (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] +
22
+ (int)*(int *)args[10] +
23
+ (int)*(unsigned long long *)args[11] +
24
+ (int)*(unsigned long long *)args[12] +
25
+ (int)*(unsigned long long *)args[13] +
26
+ (int)*(unsigned long long *)args[14] +
27
+ *(int *)args[15] + (int)(long)userdata;
28
+
29
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
30
+ (int)*(unsigned long long *)args[0],
31
+ (int)*(unsigned long long *)args[1],
32
+ (int)*(unsigned long long *)args[2],
33
+ (int)*(unsigned long long *)args[3],
34
+ (int)*(unsigned long long *)args[4],
35
+ (int)*(unsigned long long *)args[5],
36
+ (int)*(unsigned long long *)args[6],
37
+ (int)*(unsigned long long *)args[7],
38
+ (int)*(unsigned long long *)args[8],
39
+ (int)*(unsigned long long *)args[9],
40
+ (int)*(int *)args[10],
41
+ (int)*(unsigned long long *)args[11],
42
+ (int)*(unsigned long long *)args[12],
43
+ (int)*(unsigned long long *)args[13],
44
+ (int)*(unsigned long long *)args[14],
45
+ *(int *)args[15],
46
+ (int)(long)userdata, (int)*(ffi_arg *)resp);
47
+
48
+ }
49
+
50
+ typedef int (*closure_test_type0)(unsigned long long, unsigned long long,
51
+ unsigned long long, unsigned long long,
52
+ unsigned long long, unsigned long long,
53
+ unsigned long long, unsigned long long,
54
+ unsigned long long, unsigned long long,
55
+ int, unsigned long long,
56
+ unsigned long long, unsigned long long,
57
+ unsigned long long, int);
58
+
59
+ int main (void)
60
+ {
61
+ ffi_cif cif;
62
+ #ifndef USING_MMAP
63
+ static ffi_closure cl;
64
+ #endif
65
+ ffi_closure *pcl;
66
+ ffi_type * cl_arg_types[17];
67
+ int i, res;
68
+ #ifdef USING_MMAP
69
+ pcl = allocate_mmap (sizeof(ffi_closure));
70
+ #else
71
+ pcl = &cl;
72
+ #endif
73
+
74
+ for (i = 0; i < 10; i++) {
75
+ cl_arg_types[i] = &ffi_type_uint64;
76
+ }
77
+ cl_arg_types[10] = &ffi_type_sint;
78
+ for (i = 11; i < 15; i++) {
79
+ cl_arg_types[i] = &ffi_type_uint64;
80
+ }
81
+ cl_arg_types[15] = &ffi_type_sint;
82
+ cl_arg_types[16] = NULL;
83
+
84
+ /* Initialize the cif */
85
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
86
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
87
+
88
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn5,
89
+ (void *) 3 /* userdata */) == FFI_OK);
90
+
91
+ res = (*((closure_test_type0)pcl))
92
+ (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL,
93
+ 13LL, 19LL, 21LL, 1);
94
+ /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
95
+ printf("res: %d\n",res);
96
+ /* { dg-output "\nres: 680" } */
97
+
98
+ exit(0);
99
+ }
@@ -0,0 +1,98 @@
1
+ /* Area: closure_call
2
+ Purpose: Check multiple values passing from different type.
3
+ Also, exceed the limit of gpr and fpr registers on PowerPC.
4
+ Limitations: none.
5
+ PR: PR23404
6
+ Originator: <andreast@gcc.gnu.org> 20050830 */
7
+
8
+ /* { dg-do run } */
9
+ #include "ffitest.h"
10
+
11
+ static void
12
+ closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
+ void* userdata)
14
+ {
15
+ *(ffi_arg*)resp =
16
+ (int)*(unsigned long long *)args[0] +
17
+ (int)(*(unsigned long long *)args[1]) +
18
+ (int)(*(unsigned long long *)args[2]) +
19
+ (int)*(unsigned long long *)args[3] +
20
+ (int)(*(int *)args[4]) + (int)(*(double *)args[5]) +
21
+ (int)*(double *)args[6] + (int)(*(float *)args[7]) +
22
+ (int)(*(double *)args[8]) + (int)*(double *)args[9] +
23
+ (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
24
+ (int)*(int *)args[12] + (int)(*(int *)args[13]) +
25
+ (int)(*(double *)args[14]) + (int)*(double *)args[15] +
26
+ (int)(long)userdata;
27
+
28
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
29
+ (int)*(unsigned long long *)args[0],
30
+ (int)(*(unsigned long long *)args[1]),
31
+ (int)(*(unsigned long long *)args[2]),
32
+ (int)*(unsigned long long *)args[3],
33
+ (int)(*(int *)args[4]), (int)(*(double *)args[5]),
34
+ (int)*(double *)args[6], (int)(*(float *)args[7]),
35
+ (int)(*(double *)args[8]), (int)*(double *)args[9],
36
+ (int)(*(int *)args[10]), (int)(*(float *)args[11]),
37
+ (int)*(int *)args[12], (int)(*(int *)args[13]),
38
+ (int)(*(double *)args[14]), (int)(*(double *)args[15]),
39
+ (int)(long)userdata, (int)*(ffi_arg *)resp);
40
+
41
+ }
42
+
43
+ typedef int (*closure_test_type0)(unsigned long long,
44
+ unsigned long long,
45
+ unsigned long long,
46
+ unsigned long long,
47
+ int, double, double, float, double, double,
48
+ int, float, int, int, double, double);
49
+
50
+ int main (void)
51
+ {
52
+ ffi_cif cif;
53
+ #ifndef USING_MMAP
54
+ static ffi_closure cl;
55
+ #endif
56
+ ffi_closure *pcl;
57
+ ffi_type * cl_arg_types[17];
58
+ int res;
59
+
60
+ #ifdef USING_MMAP
61
+ pcl = allocate_mmap (sizeof(ffi_closure));
62
+ #else
63
+ pcl = &cl;
64
+ #endif
65
+
66
+ cl_arg_types[0] = &ffi_type_uint64;
67
+ cl_arg_types[1] = &ffi_type_uint64;
68
+ cl_arg_types[2] = &ffi_type_uint64;
69
+ cl_arg_types[3] = &ffi_type_uint64;
70
+ cl_arg_types[4] = &ffi_type_sint;
71
+ cl_arg_types[5] = &ffi_type_double;
72
+ cl_arg_types[6] = &ffi_type_double;
73
+ cl_arg_types[7] = &ffi_type_float;
74
+ cl_arg_types[8] = &ffi_type_double;
75
+ cl_arg_types[9] = &ffi_type_double;
76
+ cl_arg_types[10] = &ffi_type_sint;
77
+ cl_arg_types[11] = &ffi_type_float;
78
+ cl_arg_types[12] = &ffi_type_sint;
79
+ cl_arg_types[13] = &ffi_type_sint;
80
+ cl_arg_types[14] = &ffi_type_double;
81
+ cl_arg_types[15] = &ffi_type_double;
82
+ cl_arg_types[16] = NULL;
83
+
84
+ /* Initialize the cif */
85
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
86
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
87
+
88
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn0,
89
+ (void *) 3 /* userdata */) == FFI_OK);
90
+
91
+ res = (*((closure_test_type0)pcl))
92
+ (1, 2, 3, 4, 127, 429., 7., 8., 9.5, 10., 11, 12., 13,
93
+ 19, 21., 1.);
94
+ /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
95
+ printf("res: %d\n",res);
96
+ /* { dg-output "\nres: 680" } */
97
+ exit(0);
98
+ }