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.
- checksums.yaml +4 -4
- data/LICENSE +0 -27
- data/ext/immunio/Rakefile +9 -0
- data/lib/immunio/plugins/active_record.rb +1 -1
- data/lib/immunio/plugins/active_record_relation.rb +1 -1
- data/lib/immunio/plugins/environment_reporter.rb +20 -0
- data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
- data/lib/immunio/version.rb +1 -1
- data/lib/immunio/vm.rb +1 -2
- data/lua-hooks/Makefile +97 -0
- data/lua-hooks/ext/all.c +41 -52
- data/lua-hooks/ext/all.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
- data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
- data/lua-hooks/ext/libinjection/lualib.c +2 -2
- data/lua-hooks/ext/lpeg/lpcap.c +2 -2
- data/lua-hooks/ext/lpeg/lpcap.o +0 -0
- data/lua-hooks/ext/lpeg/lpcode.c +2 -2
- data/lua-hooks/ext/lpeg/lpcode.h +1 -1
- data/lua-hooks/ext/lpeg/lpcode.o +0 -0
- data/lua-hooks/ext/lpeg/lpprint.o +0 -0
- data/lua-hooks/ext/lpeg/lptree.c +2 -2
- data/lua-hooks/ext/lpeg/lptypes.h +1 -1
- data/lua-hooks/ext/lpeg/lpvm.c +2 -2
- data/lua-hooks/ext/lpeg/lpvm.o +0 -0
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
- data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
- data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
- data/lua-hooks/ext/luajit/Makefile +159 -0
- data/lua-hooks/ext/luajit/README +16 -0
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
- data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
- data/lua-hooks/ext/luajit/doc/changes.html +804 -0
- data/lua-hooks/ext/luajit/doc/contact.html +104 -0
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
- data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
- data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
- data/lua-hooks/ext/luajit/doc/faq.html +186 -0
- data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
- data/lua-hooks/ext/luajit/doc/install.html +659 -0
- data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
- data/lua-hooks/ext/luajit/doc/running.html +309 -0
- data/lua-hooks/ext/luajit/doc/status.html +118 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
- data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
- data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
- data/lua-hooks/ext/luajit/src/Makefile +697 -0
- data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
- data/lua-hooks/ext/luajit/src/host/README +4 -0
- data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
- data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
- data/lua-hooks/ext/luajit/src/host/minilua +0 -0
- data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
- data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
- data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
- data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
- data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
- data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
- data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
- data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
- data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
- data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
- data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
- data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
- data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
- data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
- data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
- data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
- data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
- data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
- data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
- data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
- data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
- data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
- data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
- data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
- data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
- data/lua-hooks/ext/luajit/src/lj.supp +26 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
- data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
- data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
- data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
- data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
- data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
- data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
- data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
- data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
- data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
- data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
- data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
- data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
- data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
- data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
- data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
- data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
- data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
- data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
- data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
- data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
- data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
- data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
- data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
- data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
- data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
- data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
- data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
- data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
- data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
- data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
- data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
- data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
- data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
- data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
- data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
- data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
- data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
- data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
- data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
- data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
- data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
- data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
- data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
- data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
- data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
- data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
- data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
- data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
- data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
- data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
- data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
- data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
- data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
- data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
- data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
- data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
- data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
- data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
- data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
- data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
- data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
- data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
- data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
- data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
- data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
- data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
- data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
- data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
- data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
- data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
- data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
- data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
- data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
- data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
- data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
- data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
- data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
- data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
- data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
- data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
- data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
- data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
- data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
- data/lua-hooks/ext/luajit/src/luajit +0 -0
- data/lua-hooks/ext/luajit/src/luajit.c +570 -0
- data/lua-hooks/ext/luajit/src/luajit.h +79 -0
- data/lua-hooks/ext/luajit/src/luajit.o +0 -0
- data/lua-hooks/ext/luajit/src/lualib.h +43 -0
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
- data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
- data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
- data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
- data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
- data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
- data/lua-hooks/lib/boot.lua +37 -2
- metadata +372 -69
- data/lua-hooks/ext/bitop/README +0 -22
- data/lua-hooks/ext/bitop/bit.c +0 -189
- data/lua-hooks/ext/extconf.rb +0 -38
- data/lua-hooks/ext/lua/COPYRIGHT +0 -34
- data/lua-hooks/ext/lua/lapi.c +0 -1087
- data/lua-hooks/ext/lua/lapi.h +0 -16
- data/lua-hooks/ext/lua/lauxlib.c +0 -652
- data/lua-hooks/ext/lua/lbaselib.c +0 -659
- data/lua-hooks/ext/lua/lcode.c +0 -831
- data/lua-hooks/ext/lua/lcode.h +0 -76
- data/lua-hooks/ext/lua/ldblib.c +0 -398
- data/lua-hooks/ext/lua/ldebug.c +0 -638
- data/lua-hooks/ext/lua/ldebug.h +0 -33
- data/lua-hooks/ext/lua/ldo.c +0 -519
- data/lua-hooks/ext/lua/ldo.h +0 -57
- data/lua-hooks/ext/lua/ldump.c +0 -164
- data/lua-hooks/ext/lua/lfunc.c +0 -174
- data/lua-hooks/ext/lua/lfunc.h +0 -34
- data/lua-hooks/ext/lua/lgc.c +0 -710
- data/lua-hooks/ext/lua/lgc.h +0 -110
- data/lua-hooks/ext/lua/linit.c +0 -38
- data/lua-hooks/ext/lua/liolib.c +0 -556
- data/lua-hooks/ext/lua/llex.c +0 -463
- data/lua-hooks/ext/lua/llex.h +0 -81
- data/lua-hooks/ext/lua/llimits.h +0 -128
- data/lua-hooks/ext/lua/lmathlib.c +0 -263
- data/lua-hooks/ext/lua/lmem.c +0 -86
- data/lua-hooks/ext/lua/lmem.h +0 -49
- data/lua-hooks/ext/lua/loadlib.c +0 -705
- data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
- data/lua-hooks/ext/lua/lobject.c +0 -214
- data/lua-hooks/ext/lua/lobject.h +0 -381
- data/lua-hooks/ext/lua/lopcodes.c +0 -102
- data/lua-hooks/ext/lua/lopcodes.h +0 -268
- data/lua-hooks/ext/lua/loslib.c +0 -243
- data/lua-hooks/ext/lua/lparser.c +0 -1339
- data/lua-hooks/ext/lua/lparser.h +0 -82
- data/lua-hooks/ext/lua/lstate.c +0 -214
- data/lua-hooks/ext/lua/lstate.h +0 -169
- data/lua-hooks/ext/lua/lstring.c +0 -111
- data/lua-hooks/ext/lua/lstring.h +0 -31
- data/lua-hooks/ext/lua/lstrlib.c +0 -871
- data/lua-hooks/ext/lua/ltable.c +0 -588
- data/lua-hooks/ext/lua/ltable.h +0 -40
- data/lua-hooks/ext/lua/ltablib.c +0 -287
- data/lua-hooks/ext/lua/ltm.c +0 -75
- data/lua-hooks/ext/lua/ltm.h +0 -54
- data/lua-hooks/ext/lua/lua.c +0 -392
- data/lua-hooks/ext/lua/lua.def +0 -131
- data/lua-hooks/ext/lua/lua.rc +0 -28
- data/lua-hooks/ext/lua/lua_dll.rc +0 -26
- data/lua-hooks/ext/lua/luac.c +0 -200
- data/lua-hooks/ext/lua/luac.rc +0 -1
- data/lua-hooks/ext/lua/luaconf.h +0 -763
- data/lua-hooks/ext/lua/luaconf.h.in +0 -724
- data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
- data/lua-hooks/ext/lua/lualib.h +0 -53
- data/lua-hooks/ext/lua/lundump.c +0 -227
- data/lua-hooks/ext/lua/lundump.h +0 -36
- data/lua-hooks/ext/lua/lvm.c +0 -767
- data/lua-hooks/ext/lua/lvm.h +0 -36
- data/lua-hooks/ext/lua/lzio.c +0 -82
- data/lua-hooks/ext/lua/lzio.h +0 -67
- 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">»</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">»</span></a>
|
|
56
|
+
</li><li>
|
|
57
|
+
<a href="http://wiki.luajit.org/">Wiki <span class="ext">»</span></a>
|
|
58
|
+
</li><li>
|
|
59
|
+
<a href="http://luajit.org/list.html">Mailing List <span class="ext">»</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">»</span> 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 © 2005-2015 Mike Pall.
|
|
90
|
+
</p>
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
<br class="flush">
|
|
94
|
+
</div>
|
|
95
|
+
<div id="foot">
|
|
96
|
+
<hr class="hide">
|
|
97
|
+
Copyright © 2005-2015 Mike Pall
|
|
98
|
+
<span class="noprint">
|
|
99
|
+
·
|
|
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">»</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">»</span></a>
|
|
56
|
+
</li><li>
|
|
57
|
+
<a href="http://wiki.luajit.org/">Wiki <span class="ext">»</span></a>
|
|
58
|
+
</li><li>
|
|
59
|
+
<a href="http://luajit.org/list.html">Mailing List <span class="ext">»</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
|
+
— 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
|
+
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++ exception interoperability</a>
|
|
141
|
+
first. Recommended usage can be seen in this C++ code excerpt:
|
|
142
|
+
</p>
|
|
143
|
+
<pre class="code">
|
|
144
|
+
#include <exception>
|
|
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 © 2005-2015 Mike Pall
|
|
183
|
+
<span class="noprint">
|
|
184
|
+
·
|
|
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">»</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">»</span></a>
|
|
56
|
+
</li><li>
|
|
57
|
+
<a href="http://wiki.luajit.org/">Wiki <span class="ext">»</span></a>
|
|
58
|
+
</li><li>
|
|
59
|
+
<a href="http://luajit.org/list.html">Mailing List <span class="ext">»</span></a>
|
|
60
|
+
</li></ul>
|
|
61
|
+
</div>
|
|
62
|
+
<div id="main">
|
|
63
|
+
<p>
|
|
64
|
+
|
|
65
|
+
The FFI library allows <b>calling external C functions</b> and
|
|
66
|
+
<b>using C 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
|
+
— <b>it parses plain C declarations!</b> These can be
|
|
74
|
+
cut-n-pasted from C 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 data structures from Lua code is on par with the
|
|
83
|
+
code a C compiler would generate. Calls to C 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 library function:
|
|
95
|
+
</p>
|
|
96
|
+
<pre class="code mark">
|
|
97
|
+
<span class="codemark">①
|
|
98
|
+
②
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
③</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">①</span> Load the FFI library.
|
|
112
|
+
</p>
|
|
113
|
+
<p>
|
|
114
|
+
<span class="mark">②</span> Add a C declaration
|
|
115
|
+
for the function. The part inside the double-brackets (in green) is
|
|
116
|
+
just standard C syntax.
|
|
117
|
+
</p>
|
|
118
|
+
<p>
|
|
119
|
+
<span class="mark">③</span> Call the named
|
|
120
|
+
C function — 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;">③</span> makes use of the standard
|
|
125
|
+
C 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 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 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 file, add a C function
|
|
153
|
+
that retrieves and checks the argument types passed from Lua and calls
|
|
154
|
+
the actual C 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 data
|
|
164
|
+
structures. Of course the main use for this is for interfacing with
|
|
165
|
+
C 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">①
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
②
|
|
223
|
+
|
|
224
|
+
③
|
|
225
|
+
④
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
③
|
|
233
|
+
⑤</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">①</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 bit RGBA pixel.
|
|
269
|
+
</p>
|
|
270
|
+
<p>
|
|
271
|
+
<span class="mark">②</span> Creating the data
|
|
272
|
+
structure with <tt>ffi.new()</tt> is straightforward — 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">③</span> C 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">④</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">⑤</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 Megabytes to
|
|
297
|
+
640 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 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 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 © 2005-2015 Mike Pall
|
|
326
|
+
<span class="noprint">
|
|
327
|
+
·
|
|
328
|
+
<a href="contact.html">Contact</a>
|
|
329
|
+
</span>
|
|
330
|
+
</div>
|
|
331
|
+
</body>
|
|
332
|
+
</html>
|