immunio 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,570 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <title>ffi.* API Functions</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6
+ <meta name="Author" content="Mike Pall">
7
+ <meta name="Copyright" content="Copyright (C) 2005-2015, Mike Pall">
8
+ <meta name="Language" content="en">
9
+ <link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
10
+ <link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
11
+ <style type="text/css">
12
+ table.abitable { width: 30em; line-height: 1.2; }
13
+ tr.abihead td { font-weight: bold; }
14
+ td.abiparam { font-weight: bold; width: 6em; }
15
+ </style>
16
+ </head>
17
+ <body>
18
+ <div id="site">
19
+ <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
20
+ </div>
21
+ <div id="head">
22
+ <h1><tt>ffi.*</tt> API Functions</h1>
23
+ </div>
24
+ <div id="nav">
25
+ <ul><li>
26
+ <a href="luajit.html">LuaJIT</a>
27
+ <ul><li>
28
+ <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
29
+ </li><li>
30
+ <a href="install.html">Installation</a>
31
+ </li><li>
32
+ <a href="running.html">Running</a>
33
+ </li></ul>
34
+ </li><li>
35
+ <a href="extensions.html">Extensions</a>
36
+ <ul><li>
37
+ <a href="ext_ffi.html">FFI Library</a>
38
+ <ul><li>
39
+ <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
40
+ </li><li>
41
+ <a class="current" href="ext_ffi_api.html">ffi.* API</a>
42
+ </li><li>
43
+ <a href="ext_ffi_semantics.html">FFI Semantics</a>
44
+ </li></ul>
45
+ </li><li>
46
+ <a href="ext_jit.html">jit.* Library</a>
47
+ </li><li>
48
+ <a href="ext_c_api.html">Lua/C API</a>
49
+ </li><li>
50
+ <a href="ext_profiler.html">Profiler</a>
51
+ </li></ul>
52
+ </li><li>
53
+ <a href="status.html">Status</a>
54
+ <ul><li>
55
+ <a href="changes.html">Changes</a>
56
+ </li></ul>
57
+ </li><li>
58
+ <a href="faq.html">FAQ</a>
59
+ </li><li>
60
+ <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
61
+ </li><li>
62
+ <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
63
+ </li><li>
64
+ <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
65
+ </li></ul>
66
+ </div>
67
+ <div id="main">
68
+ <p>
69
+ This page describes the API functions provided by the FFI library in
70
+ detail. It's recommended to read through the
71
+ <a href="ext_ffi.html">introduction</a> and the
72
+ <a href="ext_ffi_tutorial.html">FFI tutorial</a> first.
73
+ </p>
74
+
75
+ <h2 id="glossary">Glossary</h2>
76
+ <ul>
77
+ <li><b>cdecl</b> &mdash; An abstract C&nbsp;type declaration (a Lua
78
+ string).</li>
79
+ <li><b>ctype</b> &mdash; A C&nbsp;type object. This is a special kind of
80
+ <b>cdata</b> returned by <tt>ffi.typeof()</tt>. It serves as a
81
+ <b>cdata</b> <a href="#ffi_new">constructor</a> when called.</li>
82
+ <li><b>cdata</b> &mdash; A C&nbsp;data object. It holds a value of the
83
+ corresponding <b>ctype</b>.</li>
84
+ <li><b>ct</b> &mdash; A C&nbsp;type specification which can be used for
85
+ most of the API functions. Either a <b>cdecl</b>, a <b>ctype</b> or a
86
+ <b>cdata</b> serving as a template type.</li>
87
+ <li><b>cb</b> &mdash; A callback object. This is a C&nbsp;data object
88
+ holding a special function pointer. Calling this function from
89
+ C&nbsp;code runs an associated Lua function.</li>
90
+ <li><b>VLA</b> &mdash; A variable-length array is declared with a
91
+ <tt>?</tt> instead of the number of elements, e.g. <tt>"int[?]"</tt>.
92
+ The number of elements (<tt>nelem</tt>) must be given when it's
93
+ <a href="#ffi_new">created</a>.</li>
94
+ <li><b>VLS</b> &mdash; A variable-length struct is a <tt>struct</tt> C
95
+ type where the last element is a <b>VLA</b>. The same rules for
96
+ declaration and creation apply.</li>
97
+ </ul>
98
+
99
+ <h2 id="decl">Declaring and Accessing External Symbols</h2>
100
+ <p>
101
+ External symbols must be declared first and can then be accessed by
102
+ indexing a <a href="ext_ffi_semantics.html#clib">C&nbsp;library
103
+ namespace</a>, which automatically binds the symbol to a specific
104
+ library.
105
+ </p>
106
+
107
+ <h3 id="ffi_cdef"><tt>ffi.cdef(def)</tt></h3>
108
+ <p>
109
+ Adds multiple C&nbsp;declarations for types or external symbols (named
110
+ variables or functions). <tt>def</tt> must be a Lua string. It's
111
+ recommended to use the syntactic sugar for string arguments as
112
+ follows:
113
+ </p>
114
+ <pre class="code">
115
+ ffi.cdef[[
116
+ <span style="color:#00a000;">typedef struct foo { int a, b; } foo_t; // Declare a struct and typedef.
117
+ int dofoo(foo_t *f, int n); /* Declare an external C function. */</span>
118
+ ]]
119
+ </pre>
120
+ <p>
121
+ The contents of the string (the part in green above) must be a
122
+ sequence of
123
+ <a href="ext_ffi_semantics.html#clang">C&nbsp;declarations</a>,
124
+ separated by semicolons. The trailing semicolon for a single
125
+ declaration may be omitted.
126
+ </p>
127
+ <p>
128
+ Please note that external symbols are only <em>declared</em>, but they
129
+ are <em>not bound</em> to any specific address, yet. Binding is
130
+ achieved with C&nbsp;library namespaces (see below).
131
+ </p>
132
+ <p style="color: #c00000;">
133
+ C&nbsp;declarations are not passed through a C&nbsp;pre-processor,
134
+ yet. No pre-processor tokens are allowed, except for
135
+ <tt>#pragma&nbsp;pack</tt>. Replace <tt>#define</tt> in existing
136
+ C&nbsp;header files with <tt>enum</tt>, <tt>static&nbsp;const</tt>
137
+ or <tt>typedef</tt> and/or pass the files through an external
138
+ C&nbsp;pre-processor (once). Be careful not to include unneeded or
139
+ redundant declarations from unrelated header files.
140
+ </p>
141
+
142
+ <h3 id="ffi_C"><tt>ffi.C</tt></h3>
143
+ <p>
144
+ This is the default C&nbsp;library namespace &mdash; note the
145
+ uppercase <tt>'C'</tt>. It binds to the default set of symbols or
146
+ libraries on the target system. These are more or less the same as a
147
+ C&nbsp;compiler would offer by default, without specifying extra link
148
+ libraries.
149
+ </p>
150
+ <p>
151
+ On POSIX systems, this binds to symbols in the default or global
152
+ namespace. This includes all exported symbols from the executable and
153
+ any libraries loaded into the global namespace. This includes at least
154
+ <tt>libc</tt>, <tt>libm</tt>, <tt>libdl</tt> (on Linux),
155
+ <tt>libgcc</tt> (if compiled with GCC), as well as any exported
156
+ symbols from the Lua/C&nbsp;API provided by LuaJIT itself.
157
+ </p>
158
+ <p>
159
+ On Windows systems, this binds to symbols exported from the
160
+ <tt>*.exe</tt>, the <tt>lua51.dll</tt> (i.e. the Lua/C&nbsp;API
161
+ provided by LuaJIT itself), the C&nbsp;runtime library LuaJIT was linked
162
+ with (<tt>msvcrt*.dll</tt>), <tt>kernel32.dll</tt>,
163
+ <tt>user32.dll</tt> and <tt>gdi32.dll</tt>.
164
+ </p>
165
+
166
+ <h3 id="ffi_load"><tt>clib = ffi.load(name [,global])</tt></h3>
167
+ <p>
168
+ This loads the dynamic library given by <tt>name</tt> and returns
169
+ a new C&nbsp;library namespace which binds to its symbols. On POSIX
170
+ systems, if <tt>global</tt> is <tt>true</tt>, the library symbols are
171
+ loaded into the global namespace, too.
172
+ </p>
173
+ <p>
174
+ If <tt>name</tt> is a path, the library is loaded from this path.
175
+ Otherwise <tt>name</tt> is canonicalized in a system-dependent way and
176
+ searched in the default search path for dynamic libraries:
177
+ </p>
178
+ <p>
179
+ On POSIX systems, if the name contains no dot, the extension
180
+ <tt>.so</tt> is appended. Also, the <tt>lib</tt> prefix is prepended
181
+ if necessary. So <tt>ffi.load("z")</tt> looks for <tt>"libz.so"</tt>
182
+ in the default shared library search path.
183
+ </p>
184
+ <p>
185
+ On Windows systems, if the name contains no dot, the extension
186
+ <tt>.dll</tt> is appended. So <tt>ffi.load("ws2_32")</tt> looks for
187
+ <tt>"ws2_32.dll"</tt> in the default DLL search path.
188
+ </p>
189
+
190
+ <h2 id="create">Creating cdata Objects</h2>
191
+ <p>
192
+ The following API functions create cdata objects (<tt>type()</tt>
193
+ returns <tt>"cdata"</tt>). All created cdata objects are
194
+ <a href="ext_ffi_semantics.html#gc">garbage collected</a>.
195
+ </p>
196
+
197
+ <h3 id="ffi_new"><tt>cdata = ffi.new(ct [,nelem] [,init...])<br>
198
+ cdata = <em>ctype</em>([nelem,] [init...])</tt></h3>
199
+ <p>
200
+ Creates a cdata object for the given <tt>ct</tt>. VLA/VLS types
201
+ require the <tt>nelem</tt> argument. The second syntax uses a ctype as
202
+ a constructor and is otherwise fully equivalent.
203
+ </p>
204
+ <p>
205
+ The cdata object is initialized according to the
206
+ <a href="ext_ffi_semantics.html#init">rules for initializers</a>,
207
+ using the optional <tt>init</tt> arguments. Excess initializers cause
208
+ an error.
209
+ </p>
210
+ <p>
211
+ Performance notice: if you want to create many objects of one kind,
212
+ parse the cdecl only once and get its ctype with
213
+ <tt>ffi.typeof()</tt>. Then use the ctype as a constructor repeatedly.
214
+ </p>
215
+ <p style="font-size: 8pt;">
216
+ Please note that an anonymous <tt>struct</tt> declaration implicitly
217
+ creates a new and distinguished ctype every time you use it for
218
+ <tt>ffi.new()</tt>. This is probably <b>not</b> what you want,
219
+ especially if you create more than one cdata object. Different anonymous
220
+ <tt>structs</tt> are not considered assignment-compatible by the
221
+ C&nbsp;standard, even though they may have the same fields! Also, they
222
+ are considered different types by the JIT-compiler, which may cause an
223
+ excessive number of traces. It's strongly suggested to either declare
224
+ a named <tt>struct</tt> or <tt>typedef</tt> with <tt>ffi.cdef()</tt>
225
+ or to create a single ctype object for an anonymous <tt>struct</tt>
226
+ with <tt>ffi.typeof()</tt>.
227
+ </p>
228
+
229
+ <h3 id="ffi_typeof"><tt>ctype = ffi.typeof(ct)</tt></h3>
230
+ <p>
231
+ Creates a ctype object for the given <tt>ct</tt>.
232
+ </p>
233
+ <p>
234
+ This function is especially useful to parse a cdecl only once and then
235
+ use the resulting ctype object as a <a href="#ffi_new">constructor</a>.
236
+ </p>
237
+
238
+ <h3 id="ffi_cast"><tt>cdata = ffi.cast(ct, init)</tt></h3>
239
+ <p>
240
+ Creates a scalar cdata object for the given <tt>ct</tt>. The cdata
241
+ object is initialized with <tt>init</tt> using the "cast" variant of
242
+ the <a href="ext_ffi_semantics.html#convert">C&nbsp;type conversion
243
+ rules</a>.
244
+ </p>
245
+ <p>
246
+ This functions is mainly useful to override the pointer compatibility
247
+ checks or to convert pointers to addresses or vice versa.
248
+ </p>
249
+
250
+ <h3 id="ffi_metatype"><tt>ctype = ffi.metatype(ct, metatable)</tt></h3>
251
+ <p>
252
+ Creates a ctype object for the given <tt>ct</tt> and associates it with
253
+ a metatable. Only <tt>struct</tt>/<tt>union</tt> types, complex numbers
254
+ and vectors are allowed. Other types may be wrapped in a
255
+ <tt>struct</tt>, if needed.
256
+ </p>
257
+ <p>
258
+ The association with a metatable is permanent and cannot be changed
259
+ afterwards. Neither the contents of the <tt>metatable</tt> nor the
260
+ contents of an <tt>__index</tt> table (if any) may be modified
261
+ afterwards. The associated metatable automatically applies to all uses
262
+ of this type, no matter how the objects are created or where they
263
+ originate from. Note that pre-defined operations on types have
264
+ precedence (e.g. declared field names cannot be overriden).
265
+ </p>
266
+ <p>
267
+ All standard Lua metamethods are implemented. These are called directly,
268
+ without shortcuts and on any mix of types. For binary operations, the
269
+ left operand is checked first for a valid ctype metamethod. The
270
+ <tt>__gc</tt> metamethod only applies to <tt>struct</tt>/<tt>union</tt>
271
+ types and performs an implicit <a href="#ffi_gc"><tt>ffi.gc()</tt></a>
272
+ call during creation of an instance.
273
+ </p>
274
+
275
+ <h3 id="ffi_gc"><tt>cdata = ffi.gc(cdata, finalizer)</tt></h3>
276
+ <p>
277
+ Associates a finalizer with a pointer or aggregate cdata object. The
278
+ cdata object is returned unchanged.
279
+ </p>
280
+ <p>
281
+ This function allows safe integration of unmanaged resources into the
282
+ automatic memory management of the LuaJIT garbage collector. Typical
283
+ usage:
284
+ </p>
285
+ <pre class="code">
286
+ local p = ffi.gc(ffi.C.malloc(n), ffi.C.free)
287
+ ...
288
+ p = nil -- Last reference to p is gone.
289
+ -- GC will eventually run finalizer: ffi.C.free(p)
290
+ </pre>
291
+ <p>
292
+ A cdata finalizer works like the <tt>__gc</tt> metamethod for userdata
293
+ objects: when the last reference to a cdata object is gone, the
294
+ associated finalizer is called with the cdata object as an argument. The
295
+ finalizer can be a Lua function or a cdata function or cdata function
296
+ pointer. An existing finalizer can be removed by setting a <tt>nil</tt>
297
+ finalizer, e.g. right before explicitly deleting a resource:
298
+ </p>
299
+ <pre class="code">
300
+ ffi.C.free(ffi.gc(p, nil)) -- Manually free the memory.
301
+ </pre>
302
+
303
+ <h2 id="info">C&nbsp;Type Information</h2>
304
+ <p>
305
+ The following API functions return information about C&nbsp;types.
306
+ They are most useful for inspecting cdata objects.
307
+ </p>
308
+
309
+ <h3 id="ffi_sizeof"><tt>size = ffi.sizeof(ct [,nelem])</tt></h3>
310
+ <p>
311
+ Returns the size of <tt>ct</tt> in bytes. Returns <tt>nil</tt> if
312
+ the size is not known (e.g. for <tt>"void"</tt> or function types).
313
+ Requires <tt>nelem</tt> for VLA/VLS types, except for cdata objects.
314
+ </p>
315
+
316
+ <h3 id="ffi_alignof"><tt>align = ffi.alignof(ct)</tt></h3>
317
+ <p>
318
+ Returns the minimum required alignment for <tt>ct</tt> in bytes.
319
+ </p>
320
+
321
+ <h3 id="ffi_offsetof"><tt>ofs [,bpos,bsize] = ffi.offsetof(ct, field)</tt></h3>
322
+ <p>
323
+ Returns the offset (in bytes) of <tt>field</tt> relative to the start
324
+ of <tt>ct</tt>, which must be a <tt>struct</tt>. Additionally returns
325
+ the position and the field size (in bits) for bit fields.
326
+ </p>
327
+
328
+ <h3 id="ffi_istype"><tt>status = ffi.istype(ct, obj)</tt></h3>
329
+ <p>
330
+ Returns <tt>true</tt> if <tt>obj</tt> has the C&nbsp;type given by
331
+ <tt>ct</tt>. Returns <tt>false</tt> otherwise.
332
+ </p>
333
+ <p>
334
+ C&nbsp;type qualifiers (<tt>const</tt> etc.) are ignored. Pointers are
335
+ checked with the standard pointer compatibility rules, but without any
336
+ special treatment for <tt>void&nbsp;*</tt>. If <tt>ct</tt> specifies a
337
+ <tt>struct</tt>/<tt>union</tt>, then a pointer to this type is accepted,
338
+ too. Otherwise the types must match exactly.
339
+ </p>
340
+ <p>
341
+ Note: this function accepts all kinds of Lua objects for the
342
+ <tt>obj</tt> argument, but always returns <tt>false</tt> for non-cdata
343
+ objects.
344
+ </p>
345
+
346
+ <h2 id="util">Utility Functions</h2>
347
+
348
+ <h3 id="ffi_errno"><tt>err = ffi.errno([newerr])</tt></h3>
349
+ <p>
350
+ Returns the error number set by the last C&nbsp;function call which
351
+ indicated an error condition. If the optional <tt>newerr</tt> argument
352
+ is present, the error number is set to the new value and the previous
353
+ value is returned.
354
+ </p>
355
+ <p>
356
+ This function offers a portable and OS-independent way to get and set the
357
+ error number. Note that only <em>some</em> C&nbsp;functions set the error
358
+ number. And it's only significant if the function actually indicated an
359
+ error condition (e.g. with a return value of <tt>-1</tt> or
360
+ <tt>NULL</tt>). Otherwise, it may or may not contain any previously set
361
+ value.
362
+ </p>
363
+ <p>
364
+ You're advised to call this function only when needed and as close as
365
+ possible after the return of the related C&nbsp;function. The
366
+ <tt>errno</tt> value is preserved across hooks, memory allocations,
367
+ invocations of the JIT compiler and other internal VM activity. The same
368
+ applies to the value returned by <tt>GetLastError()</tt> on Windows, but
369
+ you need to declare and call it yourself.
370
+ </p>
371
+
372
+ <h3 id="ffi_string"><tt>str = ffi.string(ptr [,len])</tt></h3>
373
+ <p>
374
+ Creates an interned Lua string from the data pointed to by
375
+ <tt>ptr</tt>.
376
+ </p>
377
+ <p>
378
+ If the optional argument <tt>len</tt> is missing, <tt>ptr</tt> is
379
+ converted to a <tt>"char&nbsp;*"</tt> and the data is assumed to be
380
+ zero-terminated. The length of the string is computed with
381
+ <tt>strlen()</tt>.
382
+ </p>
383
+ <p>
384
+ Otherwise <tt>ptr</tt> is converted to a <tt>"void&nbsp;*"</tt> and
385
+ <tt>len</tt> gives the length of the data. The data may contain
386
+ embedded zeros and need not be byte-oriented (though this may cause
387
+ endianess issues).
388
+ </p>
389
+ <p>
390
+ This function is mainly useful to convert (temporary)
391
+ <tt>"const&nbsp;char&nbsp;*"</tt> pointers returned by
392
+ C&nbsp;functions to Lua strings and store them or pass them to other
393
+ functions expecting a Lua string. The Lua string is an (interned) copy
394
+ of the data and bears no relation to the original data area anymore.
395
+ Lua strings are 8&nbsp;bit clean and may be used to hold arbitrary,
396
+ non-character data.
397
+ </p>
398
+ <p>
399
+ Performance notice: it's faster to pass the length of the string, if
400
+ it's known. E.g. when the length is returned by a C&nbsp;call like
401
+ <tt>sprintf()</tt>.
402
+ </p>
403
+
404
+ <h3 id="ffi_copy"><tt>ffi.copy(dst, src, len)<br>
405
+ ffi.copy(dst, str)</tt></h3>
406
+ <p>
407
+ Copies the data pointed to by <tt>src</tt> to <tt>dst</tt>.
408
+ <tt>dst</tt> is converted to a <tt>"void&nbsp;*"</tt> and <tt>src</tt>
409
+ is converted to a <tt>"const void&nbsp;*"</tt>.
410
+ </p>
411
+ <p>
412
+ In the first syntax, <tt>len</tt> gives the number of bytes to copy.
413
+ Caveat: if <tt>src</tt> is a Lua string, then <tt>len</tt> must not
414
+ exceed <tt>#src+1</tt>.
415
+ </p>
416
+ <p>
417
+ In the second syntax, the source of the copy must be a Lua string. All
418
+ bytes of the string <em>plus a zero-terminator</em> are copied to
419
+ <tt>dst</tt> (i.e. <tt>#src+1</tt> bytes).
420
+ </p>
421
+ <p>
422
+ Performance notice: <tt>ffi.copy()</tt> may be used as a faster
423
+ (inlinable) replacement for the C&nbsp;library functions
424
+ <tt>memcpy()</tt>, <tt>strcpy()</tt> and <tt>strncpy()</tt>.
425
+ </p>
426
+
427
+ <h3 id="ffi_fill"><tt>ffi.fill(dst, len [,c])</tt></h3>
428
+ <p>
429
+ Fills the data pointed to by <tt>dst</tt> with <tt>len</tt> constant
430
+ bytes, given by <tt>c</tt>. If <tt>c</tt> is omitted, the data is
431
+ zero-filled.
432
+ </p>
433
+ <p>
434
+ Performance notice: <tt>ffi.fill()</tt> may be used as a faster
435
+ (inlinable) replacement for the C&nbsp;library function
436
+ <tt>memset(dst,&nbsp;c,&nbsp;len)</tt>. Please note the different
437
+ order of arguments!
438
+ </p>
439
+
440
+ <h2 id="target">Target-specific Information</h2>
441
+
442
+ <h3 id="ffi_abi"><tt>status = ffi.abi(param)</tt></h3>
443
+ <p>
444
+ Returns <tt>true</tt> if <tt>param</tt> (a Lua string) applies for the
445
+ target ABI (Application Binary Interface). Returns <tt>false</tt>
446
+ otherwise. The following parameters are currently defined:
447
+ </p>
448
+ <table class="abitable">
449
+ <tr class="abihead">
450
+ <td class="abiparam">Parameter</td>
451
+ <td class="abidesc">Description</td>
452
+ </tr>
453
+ <tr class="odd separate">
454
+ <td class="abiparam">32bit</td><td class="abidesc">32 bit architecture</td></tr>
455
+ <tr class="even">
456
+ <td class="abiparam">64bit</td><td class="abidesc">64 bit architecture</td></tr>
457
+ <tr class="odd separate">
458
+ <td class="abiparam">le</td><td class="abidesc">Little-endian architecture</td></tr>
459
+ <tr class="even">
460
+ <td class="abiparam">be</td><td class="abidesc">Big-endian architecture</td></tr>
461
+ <tr class="odd separate">
462
+ <td class="abiparam">fpu</td><td class="abidesc">Target has a hardware FPU</td></tr>
463
+ <tr class="even">
464
+ <td class="abiparam">softfp</td><td class="abidesc">softfp calling conventions</td></tr>
465
+ <tr class="odd">
466
+ <td class="abiparam">hardfp</td><td class="abidesc">hardfp calling conventions</td></tr>
467
+ <tr class="even separate">
468
+ <td class="abiparam">eabi</td><td class="abidesc">EABI variant of the standard ABI</td></tr>
469
+ <tr class="odd">
470
+ <td class="abiparam">win</td><td class="abidesc">Windows variant of the standard ABI</td></tr>
471
+ <tr class="even">
472
+ <td class="abiparam">gc64</td><td class="abidesc">64 bit GC references</td></tr>
473
+ </table>
474
+
475
+ <h3 id="ffi_os"><tt>ffi.os</tt></h3>
476
+ <p>
477
+ Contains the target OS name. Same contents as
478
+ <a href="ext_jit.html#jit_os"><tt>jit.os</tt></a>.
479
+ </p>
480
+
481
+ <h3 id="ffi_arch"><tt>ffi.arch</tt></h3>
482
+ <p>
483
+ Contains the target architecture name. Same contents as
484
+ <a href="ext_jit.html#jit_arch"><tt>jit.arch</tt></a>.
485
+ </p>
486
+
487
+ <h2 id="callback">Methods for Callbacks</h2>
488
+ <p>
489
+ The C&nbsp;types for <a href="ext_ffi_semantics.html#callback">callbacks</a>
490
+ have some extra methods:
491
+ </p>
492
+
493
+ <h3 id="callback_free"><tt>cb:free()</tt></h3>
494
+ <p>
495
+ Free the resources associated with a callback. The associated Lua
496
+ function is unanchored and may be garbage collected. The callback
497
+ function pointer is no longer valid and must not be called anymore
498
+ (it may be reused by a subsequently created callback).
499
+ </p>
500
+
501
+ <h3 id="callback_set"><tt>cb:set(func)</tt></h3>
502
+ <p>
503
+ Associate a new Lua function with a callback. The C&nbsp;type of the
504
+ callback and the callback function pointer are unchanged.
505
+ </p>
506
+ <p>
507
+ This method is useful to dynamically switch the receiver of callbacks
508
+ without creating a new callback each time and registering it again (e.g.
509
+ with a GUI library).
510
+ </p>
511
+
512
+ <h2 id="extended">Extended Standard Library Functions</h2>
513
+ <p>
514
+ The following standard library functions have been extended to work
515
+ with cdata objects:
516
+ </p>
517
+
518
+ <h3 id="tonumber"><tt>n = tonumber(cdata)</tt></h3>
519
+ <p>
520
+ Converts a number cdata object to a <tt>double</tt> and returns it as
521
+ a Lua number. This is particularly useful for boxed 64&nbsp;bit
522
+ integer values. Caveat: this conversion may incur a precision loss.
523
+ </p>
524
+
525
+ <h3 id="tostring"><tt>s = tostring(cdata)</tt></h3>
526
+ <p>
527
+ Returns a string representation of the value of 64&nbsp;bit integers
528
+ (<tt><b>"</b>nnn<b>LL"</b></tt> or <tt><b>"</b>nnn<b>ULL"</b></tt>) or
529
+ complex numbers (<tt><b>"</b>re&plusmn;im<b>i"</b></tt>). Otherwise
530
+ returns a string representation of the C&nbsp;type of a ctype object
531
+ (<tt><b>"ctype&lt;</b>type<b>&gt;"</b></tt>) or a cdata object
532
+ (<tt><b>"cdata&lt;</b>type<b>&gt;:&nbsp;</b>address"</tt>), unless you
533
+ override it with a <tt>__tostring</tt> metamethod (see
534
+ <a href="#ffi_metatype"><tt>ffi.metatype()</tt></a>).
535
+ </p>
536
+
537
+ <h3 id="pairs"><tt>iter, obj, start = pairs(cdata)<br>
538
+ iter, obj, start = ipairs(cdata)<br></tt></h3>
539
+ <p>
540
+ Calls the <tt>__pairs</tt> or <tt>__ipairs</tt> metamethod of the
541
+ corresponding ctype.
542
+ </p>
543
+
544
+ <h2 id="literals">Extensions to the Lua Parser</h2>
545
+ <p>
546
+ The parser for Lua source code treats numeric literals with the
547
+ suffixes <tt>LL</tt> or <tt>ULL</tt> as signed or unsigned 64&nbsp;bit
548
+ integers. Case doesn't matter, but uppercase is recommended for
549
+ readability. It handles decimal (<tt>42LL</tt>), hexadecimal
550
+ (<tt>0x2aLL</tt>) and binary (<tt>0b101010LL</tt>) literals.
551
+ </p>
552
+ <p>
553
+ The imaginary part of complex numbers can be specified by suffixing
554
+ number literals with <tt>i</tt> or <tt>I</tt>, e.g. <tt>12.5i</tt>.
555
+ Caveat: you'll need to use <tt>1i</tt> to get an imaginary part with
556
+ the value one, since <tt>i</tt> itself still refers to a variable
557
+ named <tt>i</tt>.
558
+ </p>
559
+ <br class="flush">
560
+ </div>
561
+ <div id="foot">
562
+ <hr class="hide">
563
+ Copyright &copy; 2005-2015 Mike Pall
564
+ <span class="noprint">
565
+ &middot;
566
+ <a href="contact.html">Contact</a>
567
+ </span>
568
+ </div>
569
+ </body>
570
+ </html>