immunio 0.15.4 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
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,104 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Contact</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
+ </head>
12
+ <body>
13
+ <div id="site">
14
+ <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
15
+ </div>
16
+ <div id="head">
17
+ <h1>Contact</h1>
18
+ </div>
19
+ <div id="nav">
20
+ <ul><li>
21
+ <a href="luajit.html">LuaJIT</a>
22
+ <ul><li>
23
+ <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24
+ </li><li>
25
+ <a href="install.html">Installation</a>
26
+ </li><li>
27
+ <a href="running.html">Running</a>
28
+ </li></ul>
29
+ </li><li>
30
+ <a href="extensions.html">Extensions</a>
31
+ <ul><li>
32
+ <a href="ext_ffi.html">FFI Library</a>
33
+ <ul><li>
34
+ <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
35
+ </li><li>
36
+ <a href="ext_ffi_api.html">ffi.* API</a>
37
+ </li><li>
38
+ <a href="ext_ffi_semantics.html">FFI Semantics</a>
39
+ </li></ul>
40
+ </li><li>
41
+ <a href="ext_jit.html">jit.* Library</a>
42
+ </li><li>
43
+ <a href="ext_c_api.html">Lua/C API</a>
44
+ </li><li>
45
+ <a href="ext_profiler.html">Profiler</a>
46
+ </li></ul>
47
+ </li><li>
48
+ <a href="status.html">Status</a>
49
+ <ul><li>
50
+ <a href="changes.html">Changes</a>
51
+ </li></ul>
52
+ </li><li>
53
+ <a href="faq.html">FAQ</a>
54
+ </li><li>
55
+ <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
56
+ </li><li>
57
+ <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
58
+ </li><li>
59
+ <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
60
+ </li></ul>
61
+ </div>
62
+ <div id="main">
63
+ <p>
64
+ Please send general questions to the
65
+ <a href="http://luajit.org/list.html"><span class="ext">&raquo;</span>&nbsp;LuaJIT mailing list</a>.
66
+ You can also send any questions you have directly to me:
67
+ </p>
68
+
69
+ <script type="text/javascript">
70
+ <!--
71
+ var xS="@-:\" .0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ<abc>defghijklmnopqrstuvwxyz";function xD(s)
72
+ {var len=s.length;var r="";for(var i=0;i<len;i++)
73
+ {var c=s.charAt(i);var n=xS.indexOf(c);if(n!=-1)c=xS.charAt(69-n);r+=c;}
74
+ document.write("<"+"p>"+r+"<"+"/p>\n");}
75
+ //-->
76
+ </script>
77
+ <script type="text/javascript">
78
+ <!--
79
+ xD("fyZKB8xv\"FJytmz8.KAB0u52D")
80
+ //--></script>
81
+ <noscript>
82
+ <p><img src="img/contact.png" alt="Contact info in image" width="170" height="13">
83
+ </p>
84
+ </noscript>
85
+
86
+ <h2>Copyright</h2>
87
+ <p>
88
+ All documentation is
89
+ Copyright &copy; 2005-2015 Mike Pall.
90
+ </p>
91
+
92
+
93
+ <br class="flush">
94
+ </div>
95
+ <div id="foot">
96
+ <hr class="hide">
97
+ Copyright &copy; 2005-2015 Mike Pall
98
+ <span class="noprint">
99
+ &middot;
100
+ <a href="contact.html">Contact</a>
101
+ </span>
102
+ </div>
103
+ </body>
104
+ </html>
@@ -0,0 +1,189 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Lua/C API Extensions</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
+ </head>
12
+ <body>
13
+ <div id="site">
14
+ <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
15
+ </div>
16
+ <div id="head">
17
+ <h1>Lua/C API Extensions</h1>
18
+ </div>
19
+ <div id="nav">
20
+ <ul><li>
21
+ <a href="luajit.html">LuaJIT</a>
22
+ <ul><li>
23
+ <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24
+ </li><li>
25
+ <a href="install.html">Installation</a>
26
+ </li><li>
27
+ <a href="running.html">Running</a>
28
+ </li></ul>
29
+ </li><li>
30
+ <a href="extensions.html">Extensions</a>
31
+ <ul><li>
32
+ <a href="ext_ffi.html">FFI Library</a>
33
+ <ul><li>
34
+ <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
35
+ </li><li>
36
+ <a href="ext_ffi_api.html">ffi.* API</a>
37
+ </li><li>
38
+ <a href="ext_ffi_semantics.html">FFI Semantics</a>
39
+ </li></ul>
40
+ </li><li>
41
+ <a href="ext_jit.html">jit.* Library</a>
42
+ </li><li>
43
+ <a class="current" href="ext_c_api.html">Lua/C API</a>
44
+ </li><li>
45
+ <a href="ext_profiler.html">Profiler</a>
46
+ </li></ul>
47
+ </li><li>
48
+ <a href="status.html">Status</a>
49
+ <ul><li>
50
+ <a href="changes.html">Changes</a>
51
+ </li></ul>
52
+ </li><li>
53
+ <a href="faq.html">FAQ</a>
54
+ </li><li>
55
+ <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
56
+ </li><li>
57
+ <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
58
+ </li><li>
59
+ <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
60
+ </li></ul>
61
+ </div>
62
+ <div id="main">
63
+ <p>
64
+ LuaJIT adds some extensions to the standard Lua/C API. The LuaJIT include
65
+ directory must be in the compiler search path (<tt>-I<i>path</i></tt>)
66
+ to be able to include the required header for C code:
67
+ </p>
68
+ <pre class="code">
69
+ #include "luajit.h"
70
+ </pre>
71
+ <p>
72
+ Or for C++ code:
73
+ </p>
74
+ <pre class="code">
75
+ #include "lua.hpp"
76
+ </pre>
77
+
78
+ <h2 id="luaJIT_setmode"><tt>luaJIT_setmode(L, idx, mode)</tt>
79
+ &mdash; Control VM</h2>
80
+ <p>
81
+ This is a C API extension to allow control of the VM from C code. The
82
+ full prototype of <tt>LuaJIT_setmode</tt> is:
83
+ </p>
84
+ <pre class="code">
85
+ LUA_API int luaJIT_setmode(lua_State *L, int idx, int mode);
86
+ </pre>
87
+ <p>
88
+ The returned status is either success (<tt>1</tt>) or failure (<tt>0</tt>).
89
+ The second argument is either <tt>0</tt> or a stack index (similar to the
90
+ other Lua/C API functions).
91
+ </p>
92
+ <p>
93
+ The third argument specifies the mode, which is 'or'ed with a flag.
94
+ The flag can be <tt>LUAJIT_MODE_OFF</tt> to turn a feature on,
95
+ <tt>LUAJIT_MODE_ON</tt> to turn a feature off, or
96
+ <tt>LUAJIT_MODE_FLUSH</tt> to flush cached code.
97
+ </p>
98
+ <p>
99
+ The following modes are defined:
100
+ </p>
101
+
102
+ <h3 id="mode_engine"><tt>luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE|flag)</tt></h3>
103
+ <p>
104
+ Turn the whole JIT compiler on or off or flush the whole cache of compiled code.
105
+ </p>
106
+
107
+ <h3 id="mode_func"><tt>luaJIT_setmode(L, idx, LUAJIT_MODE_FUNC|flag)</tt><br>
108
+ <tt>luaJIT_setmode(L, idx, LUAJIT_MODE_ALLFUNC|flag)</tt><br>
109
+ <tt>luaJIT_setmode(L, idx, LUAJIT_MODE_ALLSUBFUNC|flag)</tt></h3>
110
+ <p>
111
+ This sets the mode for the function at the stack index <tt>idx</tt> or
112
+ the parent of the calling function (<tt>idx = 0</tt>). It either
113
+ enables JIT compilation for a function, disables it and flushes any
114
+ already compiled code or only flushes already compiled code. This
115
+ applies recursively to all sub-functions of the function with
116
+ <tt>LUAJIT_MODE_ALLFUNC</tt> or only to the sub-functions with
117
+ <tt>LUAJIT_MODE_ALLSUBFUNC</tt>.
118
+ </p>
119
+
120
+ <h3 id="mode_trace"><tt>luaJIT_setmode(L, trace,<br>
121
+ &nbsp;&nbsp;LUAJIT_MODE_TRACE|LUAJIT_MODE_FLUSH)</tt></h3>
122
+ <p>
123
+ Flushes the specified root trace and all of its side traces from the cache.
124
+ The code for the trace will be retained as long as there are any other
125
+ traces which link to it.
126
+ </p>
127
+
128
+ <h3 id="mode_wrapcfunc"><tt>luaJIT_setmode(L, idx, LUAJIT_MODE_WRAPCFUNC|flag)</tt></h3>
129
+ <p>
130
+ This mode defines a wrapper function for calls to C functions. If
131
+ called with <tt>LUAJIT_MODE_ON</tt>, the stack index at <tt>idx</tt>
132
+ must be a <tt>lightuserdata</tt> object holding a pointer to the wrapper
133
+ function. From now on all C functions are called through the wrapper
134
+ function. If called with <tt>LUAJIT_MODE_OFF</tt> this mode is turned
135
+ off and all C functions are directly called.
136
+ </p>
137
+ <p>
138
+ The wrapper function can be used for debugging purposes or to catch
139
+ and convert foreign exceptions. But please read the section on
140
+ <a href="extensions.html#exceptions">C++&nbsp;exception interoperability</a>
141
+ first. Recommended usage can be seen in this C++ code excerpt:
142
+ </p>
143
+ <pre class="code">
144
+ #include &lt;exception&gt;
145
+ #include "lua.hpp"
146
+
147
+ // Catch C++ exceptions and convert them to Lua error messages.
148
+ // Customize as needed for your own exception classes.
149
+ static int wrap_exceptions(lua_State *L, lua_CFunction f)
150
+ {
151
+ try {
152
+ return f(L); // Call wrapped function and return result.
153
+ } catch (const char *s) { // Catch and convert exceptions.
154
+ lua_pushstring(L, s);
155
+ } catch (std::exception& e) {
156
+ lua_pushstring(L, e.what());
157
+ } catch (...) {
158
+ lua_pushliteral(L, "caught (...)");
159
+ }
160
+ return lua_error(L); // Rethrow as a Lua error.
161
+ }
162
+
163
+ static int myinit(lua_State *L)
164
+ {
165
+ ...
166
+ // Define wrapper function and enable it.
167
+ lua_pushlightuserdata(L, (void *)wrap_exceptions);
168
+ luaJIT_setmode(L, -1, LUAJIT_MODE_WRAPCFUNC|LUAJIT_MODE_ON);
169
+ lua_pop(L, 1);
170
+ ...
171
+ }
172
+ </pre>
173
+ <p>
174
+ Note that you can only define <b>a single global wrapper function</b>,
175
+ so be careful when using this mechanism from multiple C++ modules.
176
+ Also note that this mechanism is not without overhead.
177
+ </p>
178
+ <br class="flush">
179
+ </div>
180
+ <div id="foot">
181
+ <hr class="hide">
182
+ Copyright &copy; 2005-2015 Mike Pall
183
+ <span class="noprint">
184
+ &middot;
185
+ <a href="contact.html">Contact</a>
186
+ </span>
187
+ </div>
188
+ </body>
189
+ </html>
@@ -0,0 +1,332 @@
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 Library</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
+ </head>
12
+ <body>
13
+ <div id="site">
14
+ <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
15
+ </div>
16
+ <div id="head">
17
+ <h1>FFI Library</h1>
18
+ </div>
19
+ <div id="nav">
20
+ <ul><li>
21
+ <a href="luajit.html">LuaJIT</a>
22
+ <ul><li>
23
+ <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24
+ </li><li>
25
+ <a href="install.html">Installation</a>
26
+ </li><li>
27
+ <a href="running.html">Running</a>
28
+ </li></ul>
29
+ </li><li>
30
+ <a href="extensions.html">Extensions</a>
31
+ <ul><li>
32
+ <a class="current" href="ext_ffi.html">FFI Library</a>
33
+ <ul><li>
34
+ <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
35
+ </li><li>
36
+ <a href="ext_ffi_api.html">ffi.* API</a>
37
+ </li><li>
38
+ <a href="ext_ffi_semantics.html">FFI Semantics</a>
39
+ </li></ul>
40
+ </li><li>
41
+ <a href="ext_jit.html">jit.* Library</a>
42
+ </li><li>
43
+ <a href="ext_c_api.html">Lua/C API</a>
44
+ </li><li>
45
+ <a href="ext_profiler.html">Profiler</a>
46
+ </li></ul>
47
+ </li><li>
48
+ <a href="status.html">Status</a>
49
+ <ul><li>
50
+ <a href="changes.html">Changes</a>
51
+ </li></ul>
52
+ </li><li>
53
+ <a href="faq.html">FAQ</a>
54
+ </li><li>
55
+ <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
56
+ </li><li>
57
+ <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
58
+ </li><li>
59
+ <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
60
+ </li></ul>
61
+ </div>
62
+ <div id="main">
63
+ <p>
64
+
65
+ The FFI library allows <b>calling external C&nbsp;functions</b> and
66
+ <b>using C&nbsp;data structures</b> from pure Lua code.
67
+
68
+ </p>
69
+ <p>
70
+
71
+ The FFI library largely obviates the need to write tedious manual
72
+ Lua/C bindings in C. No need to learn a separate binding language
73
+ &mdash; <b>it parses plain C&nbsp;declarations!</b> These can be
74
+ cut-n-pasted from C&nbsp;header files or reference manuals. It's up to
75
+ the task of binding large libraries without the need for dealing with
76
+ fragile binding generators.
77
+
78
+ </p>
79
+ <p>
80
+ The FFI library is tightly integrated into LuaJIT (it's not available
81
+ as a separate module). The code generated by the JIT-compiler for
82
+ accesses to C&nbsp;data structures from Lua code is on par with the
83
+ code a C&nbsp;compiler would generate. Calls to C&nbsp;functions can
84
+ be inlined in JIT-compiled code, unlike calls to functions bound via
85
+ the classic Lua/C API.
86
+ </p>
87
+ <p>
88
+ This page gives a short introduction to the usage of the FFI library.
89
+ <em>Please use the FFI sub-topics in the navigation bar to learn more.</em>
90
+ </p>
91
+
92
+ <h2 id="call">Motivating Example: Calling External C Functions</h2>
93
+ <p>
94
+ It's really easy to call an external C&nbsp;library function:
95
+ </p>
96
+ <pre class="code mark">
97
+ <span class="codemark">&#9312;
98
+ &#9313;
99
+
100
+
101
+ &#9314;</span>local ffi = require("ffi")
102
+ ffi.cdef[[
103
+ <span style="color:#00a000;">int printf(const char *fmt, ...);</span>
104
+ ]]
105
+ ffi.C.printf("Hello %s!", "world")
106
+ </pre>
107
+ <p>
108
+ So, let's pick that apart:
109
+ </p>
110
+ <p>
111
+ <span class="mark">&#9312;</span> Load the FFI library.
112
+ </p>
113
+ <p>
114
+ <span class="mark">&#9313;</span> Add a C&nbsp;declaration
115
+ for the function. The part inside the double-brackets (in green) is
116
+ just standard C&nbsp;syntax.
117
+ </p>
118
+ <p>
119
+ <span class="mark">&#9314;</span> Call the named
120
+ C&nbsp;function &mdash; Yes, it's that simple!
121
+ </p>
122
+ <p style="font-size: 8pt;">
123
+ Actually, what goes on behind the scenes is far from simple: <span
124
+ style="color:#4040c0;">&#9314;</span> makes use of the standard
125
+ C&nbsp;library namespace <tt>ffi.C</tt>. Indexing this namespace with
126
+ a symbol name (<tt>"printf"</tt>) automatically binds it to the
127
+ standard C&nbsp;library. The result is a special kind of object which,
128
+ when called, runs the <tt>printf</tt> function. The arguments passed
129
+ to this function are automatically converted from Lua objects to the
130
+ corresponding C&nbsp;types.
131
+ </p>
132
+ <p>
133
+ Ok, so maybe the use of <tt>printf()</tt> wasn't such a spectacular
134
+ example. You could have done that with <tt>io.write()</tt> and
135
+ <tt>string.format()</tt>, too. But you get the idea ...
136
+ </p>
137
+ <p>
138
+ So here's something to pop up a message box on Windows:
139
+ </p>
140
+ <pre class="code">
141
+ local ffi = require("ffi")
142
+ ffi.cdef[[
143
+ <span style="color:#00a000;">int MessageBoxA(void *w, const char *txt, const char *cap, int type);</span>
144
+ ]]
145
+ ffi.C.MessageBoxA(nil, "Hello world!", "Test", 0)
146
+ </pre>
147
+ <p>
148
+ Bing! Again, that was far too easy, no?
149
+ </p>
150
+ <p style="font-size: 8pt;">
151
+ Compare this with the effort required to bind that function using the
152
+ classic Lua/C API: create an extra C&nbsp;file, add a C&nbsp;function
153
+ that retrieves and checks the argument types passed from Lua and calls
154
+ the actual C&nbsp;function, add a list of module functions and their
155
+ names, add a <tt>luaopen_*</tt> function and register all module
156
+ functions, compile and link it into a shared library (DLL), move it to
157
+ the proper path, add Lua code that loads the module aaaand ... finally
158
+ call the binding function. Phew!
159
+ </p>
160
+
161
+ <h2 id="cdata">Motivating Example: Using C Data Structures</h2>
162
+ <p>
163
+ The FFI library allows you to create and access C&nbsp;data
164
+ structures. Of course the main use for this is for interfacing with
165
+ C&nbsp;functions. But they can be used stand-alone, too.
166
+ </p>
167
+ <p>
168
+ Lua is built upon high-level data types. They are flexible, extensible
169
+ and dynamic. That's why we all love Lua so much. Alas, this can be
170
+ inefficient for certain tasks, where you'd really want a low-level
171
+ data type. E.g. a large array of a fixed structure needs to be
172
+ implemented with a big table holding lots of tiny tables. This imposes
173
+ both a substantial memory overhead as well as a performance overhead.
174
+ </p>
175
+ <p>
176
+ Here's a sketch of a library that operates on color images plus a
177
+ simple benchmark. First, the plain Lua version:
178
+ </p>
179
+ <pre class="code">
180
+ local floor = math.floor
181
+
182
+ local function image_ramp_green(n)
183
+ local img = {}
184
+ local f = 255/(n-1)
185
+ for i=1,n do
186
+ img[i] = { red = 0, green = floor((i-1)*f), blue = 0, alpha = 255 }
187
+ end
188
+ return img
189
+ end
190
+
191
+ local function image_to_grey(img, n)
192
+ for i=1,n do
193
+ local y = floor(0.3*img[i].red + 0.59*img[i].green + 0.11*img[i].blue)
194
+ img[i].red = y; img[i].green = y; img[i].blue = y
195
+ end
196
+ end
197
+
198
+ local N = 400*400
199
+ local img = image_ramp_green(N)
200
+ for i=1,1000 do
201
+ image_to_grey(img, N)
202
+ end
203
+ </pre>
204
+ <p>
205
+ This creates a table with 160.000 pixels, each of which is a table
206
+ holding four number values in the range of 0-255. First an image with
207
+ a green ramp is created (1D for simplicity), then the image is
208
+ converted to greyscale 1000 times. Yes, that's silly, but I was in
209
+ need of a simple example ...
210
+ </p>
211
+ <p>
212
+ And here's the FFI version. The modified parts have been marked in
213
+ bold:
214
+ </p>
215
+ <pre class="code mark">
216
+ <span class="codemark">&#9312;
217
+
218
+
219
+
220
+
221
+
222
+ &#9313;
223
+
224
+ &#9314;
225
+ &#9315;
226
+
227
+
228
+
229
+
230
+
231
+
232
+ &#9314;
233
+ &#9316;</span><b>local ffi = require("ffi")
234
+ ffi.cdef[[
235
+ </b><span style="color:#00a000;">typedef struct { uint8_t red, green, blue, alpha; } rgba_pixel;</span><b>
236
+ ]]</b>
237
+
238
+ local function image_ramp_green(n)
239
+ <b>local img = ffi.new("rgba_pixel[?]", n)</b>
240
+ local f = 255/(n-1)
241
+ for i=<b>0,n-1</b> do
242
+ <b>img[i].green = i*f</b>
243
+ <b>img[i].alpha = 255</b>
244
+ end
245
+ return img
246
+ end
247
+
248
+ local function image_to_grey(img, n)
249
+ for i=<b>0,n-1</b> do
250
+ local y = <b>0.3*img[i].red + 0.59*img[i].green + 0.11*img[i].blue</b>
251
+ img[i].red = y; img[i].green = y; img[i].blue = y
252
+ end
253
+ end
254
+
255
+ local N = 400*400
256
+ local img = image_ramp_green(N)
257
+ for i=1,1000 do
258
+ image_to_grey(img, N)
259
+ end
260
+ </pre>
261
+ <p>
262
+ Ok, so that wasn't too difficult:
263
+ </p>
264
+ <p>
265
+ <span class="mark">&#9312;</span> First, load the FFI
266
+ library and declare the low-level data type. Here we choose a
267
+ <tt>struct</tt> which holds four byte fields, one for each component
268
+ of a 4x8&nbsp;bit RGBA pixel.
269
+ </p>
270
+ <p>
271
+ <span class="mark">&#9313;</span> Creating the data
272
+ structure with <tt>ffi.new()</tt> is straightforward &mdash; the
273
+ <tt>'?'</tt> is a placeholder for the number of elements of a
274
+ variable-length array.
275
+ </p>
276
+ <p>
277
+ <span class="mark">&#9314;</span> C&nbsp;arrays are
278
+ zero-based, so the indexes have to run from <tt>0</tt> to
279
+ <tt>n-1</tt>. One might want to allocate one more element instead to
280
+ simplify converting legacy code.
281
+ </p>
282
+ <p>
283
+ <span class="mark">&#9315;</span> Since <tt>ffi.new()</tt>
284
+ zero-fills the array by default, we only need to set the green and the
285
+ alpha fields.
286
+ </p>
287
+ <p>
288
+ <span class="mark">&#9316;</span> The calls to
289
+ <tt>math.floor()</tt> can be omitted here, because floating-point
290
+ numbers are already truncated towards zero when converting them to an
291
+ integer. This happens implicitly when the number is stored in the
292
+ fields of each pixel.
293
+ </p>
294
+ <p>
295
+ Now let's have a look at the impact of the changes: first, memory
296
+ consumption for the image is down from 22&nbsp;Megabytes to
297
+ 640&nbsp;Kilobytes (400*400*4 bytes). That's a factor of 35x less! So,
298
+ yes, tables do have a noticeable overhead. BTW: The original program
299
+ would consume 40&nbsp;Megabytes in plain Lua (on x64).
300
+ </p>
301
+ <p>
302
+ Next, performance: the pure Lua version runs in 9.57 seconds (52.9
303
+ seconds with the Lua interpreter) and the FFI version runs in 0.48
304
+ seconds on my machine (YMMV). That's a factor of 20x faster (110x
305
+ faster than the Lua interpreter).
306
+ </p>
307
+ <p style="font-size: 8pt;">
308
+ The avid reader may notice that converting the pure Lua version over
309
+ to use array indexes for the colors (<tt>[1]</tt> instead of
310
+ <tt>.red</tt>, <tt>[2]</tt> instead of <tt>.green</tt> etc.) ought to
311
+ be more compact and faster. This is certainly true (by a factor of
312
+ ~1.7x). Switching to a struct-of-arrays would help, too.
313
+ </p>
314
+ <p style="font-size: 8pt;">
315
+ However the resulting code would be less idiomatic and rather
316
+ error-prone. And it still doesn't get even close to the performance of
317
+ the FFI version of the code. Also, high-level data structures cannot
318
+ be easily passed to other C&nbsp;functions, especially I/O functions,
319
+ without undue conversion penalties.
320
+ </p>
321
+ <br class="flush">
322
+ </div>
323
+ <div id="foot">
324
+ <hr class="hide">
325
+ Copyright &copy; 2005-2015 Mike Pall
326
+ <span class="noprint">
327
+ &middot;
328
+ <a href="contact.html">Contact</a>
329
+ </span>
330
+ </div>
331
+ </body>
332
+ </html>