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,448 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>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
|
+
<style type="text/css">
|
|
12
|
+
table.exc {
|
|
13
|
+
line-height: 1.2;
|
|
14
|
+
}
|
|
15
|
+
tr.exchead td {
|
|
16
|
+
font-weight: bold;
|
|
17
|
+
}
|
|
18
|
+
td.excplatform {
|
|
19
|
+
width: 48%;
|
|
20
|
+
}
|
|
21
|
+
td.exccompiler {
|
|
22
|
+
width: 29%;
|
|
23
|
+
}
|
|
24
|
+
td.excinterop {
|
|
25
|
+
width: 23%;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<div id="site">
|
|
31
|
+
<a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
|
|
32
|
+
</div>
|
|
33
|
+
<div id="head">
|
|
34
|
+
<h1>Extensions</h1>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="nav">
|
|
37
|
+
<ul><li>
|
|
38
|
+
<a href="luajit.html">LuaJIT</a>
|
|
39
|
+
<ul><li>
|
|
40
|
+
<a href="http://luajit.org/download.html">Download <span class="ext">»</span></a>
|
|
41
|
+
</li><li>
|
|
42
|
+
<a href="install.html">Installation</a>
|
|
43
|
+
</li><li>
|
|
44
|
+
<a href="running.html">Running</a>
|
|
45
|
+
</li></ul>
|
|
46
|
+
</li><li>
|
|
47
|
+
<a class="current" href="extensions.html">Extensions</a>
|
|
48
|
+
<ul><li>
|
|
49
|
+
<a href="ext_ffi.html">FFI Library</a>
|
|
50
|
+
<ul><li>
|
|
51
|
+
<a href="ext_ffi_tutorial.html">FFI Tutorial</a>
|
|
52
|
+
</li><li>
|
|
53
|
+
<a href="ext_ffi_api.html">ffi.* API</a>
|
|
54
|
+
</li><li>
|
|
55
|
+
<a href="ext_ffi_semantics.html">FFI Semantics</a>
|
|
56
|
+
</li></ul>
|
|
57
|
+
</li><li>
|
|
58
|
+
<a href="ext_jit.html">jit.* Library</a>
|
|
59
|
+
</li><li>
|
|
60
|
+
<a href="ext_c_api.html">Lua/C API</a>
|
|
61
|
+
</li><li>
|
|
62
|
+
<a href="ext_profiler.html">Profiler</a>
|
|
63
|
+
</li></ul>
|
|
64
|
+
</li><li>
|
|
65
|
+
<a href="status.html">Status</a>
|
|
66
|
+
<ul><li>
|
|
67
|
+
<a href="changes.html">Changes</a>
|
|
68
|
+
</li></ul>
|
|
69
|
+
</li><li>
|
|
70
|
+
<a href="faq.html">FAQ</a>
|
|
71
|
+
</li><li>
|
|
72
|
+
<a href="http://luajit.org/performance.html">Performance <span class="ext">»</span></a>
|
|
73
|
+
</li><li>
|
|
74
|
+
<a href="http://wiki.luajit.org/">Wiki <span class="ext">»</span></a>
|
|
75
|
+
</li><li>
|
|
76
|
+
<a href="http://luajit.org/list.html">Mailing List <span class="ext">»</span></a>
|
|
77
|
+
</li></ul>
|
|
78
|
+
</div>
|
|
79
|
+
<div id="main">
|
|
80
|
+
<p>
|
|
81
|
+
LuaJIT is fully upwards-compatible with Lua 5.1. It supports all
|
|
82
|
+
<a href="http://www.lua.org/manual/5.1/manual.html#5"><span class="ext">»</span> standard Lua
|
|
83
|
+
library functions</a> and the full set of
|
|
84
|
+
<a href="http://www.lua.org/manual/5.1/manual.html#3"><span class="ext">»</span> Lua/C API
|
|
85
|
+
functions</a>.
|
|
86
|
+
</p>
|
|
87
|
+
<p>
|
|
88
|
+
LuaJIT is also fully ABI-compatible to Lua 5.1 at the linker/dynamic
|
|
89
|
+
loader level. This means you can compile a C module against the
|
|
90
|
+
standard Lua headers and load the same shared library from either Lua
|
|
91
|
+
or LuaJIT.
|
|
92
|
+
</p>
|
|
93
|
+
<p>
|
|
94
|
+
LuaJIT extends the standard Lua VM with new functionality and adds
|
|
95
|
+
several extension modules. Please note this page is only about
|
|
96
|
+
<em>functional</em> enhancements and not about performance enhancements,
|
|
97
|
+
such as the optimized VM, the faster interpreter or the JIT compiler.
|
|
98
|
+
</p>
|
|
99
|
+
|
|
100
|
+
<h2 id="modules">Extensions Modules</h2>
|
|
101
|
+
<p>
|
|
102
|
+
LuaJIT comes with several built-in extension modules:
|
|
103
|
+
</p>
|
|
104
|
+
|
|
105
|
+
<h3 id="bit"><tt>bit.*</tt> — Bitwise operations</h3>
|
|
106
|
+
<p>
|
|
107
|
+
LuaJIT supports all bitwise operations as defined by
|
|
108
|
+
<a href="http://bitop.luajit.org"><span class="ext">»</span> Lua BitOp</a>:
|
|
109
|
+
</p>
|
|
110
|
+
<pre class="code">
|
|
111
|
+
bit.tobit bit.tohex bit.bnot bit.band bit.bor bit.bxor
|
|
112
|
+
bit.lshift bit.rshift bit.arshift bit.rol bit.ror bit.bswap
|
|
113
|
+
</pre>
|
|
114
|
+
<p>
|
|
115
|
+
This module is a LuaJIT built-in — you don't need to download or
|
|
116
|
+
install Lua BitOp. The Lua BitOp site has full documentation for all
|
|
117
|
+
<a href="http://bitop.luajit.org/api.html"><span class="ext">»</span> Lua BitOp API functions</a>.
|
|
118
|
+
The FFI adds support for
|
|
119
|
+
<a href="ext_ffi_semantics.html#cdata_arith">64 bit bitwise operations</a>,
|
|
120
|
+
using the same API functions.
|
|
121
|
+
</p>
|
|
122
|
+
<p>
|
|
123
|
+
Please make sure to <tt>require</tt> the module before using any of
|
|
124
|
+
its functions:
|
|
125
|
+
</p>
|
|
126
|
+
<pre class="code">
|
|
127
|
+
local bit = require("bit")
|
|
128
|
+
</pre>
|
|
129
|
+
<p>
|
|
130
|
+
An already installed Lua BitOp module is ignored by LuaJIT.
|
|
131
|
+
This way you can use bit operations from both Lua and LuaJIT on a
|
|
132
|
+
shared installation.
|
|
133
|
+
</p>
|
|
134
|
+
|
|
135
|
+
<h3 id="ffi"><tt>ffi.*</tt> — FFI library</h3>
|
|
136
|
+
<p>
|
|
137
|
+
The <a href="ext_ffi.html">FFI library</a> allows calling external
|
|
138
|
+
C functions and the use of C data structures from pure Lua
|
|
139
|
+
code.
|
|
140
|
+
</p>
|
|
141
|
+
|
|
142
|
+
<h3 id="jit"><tt>jit.*</tt> — JIT compiler control</h3>
|
|
143
|
+
<p>
|
|
144
|
+
The functions in this module
|
|
145
|
+
<a href="ext_jit.html">control the behavior of the JIT compiler engine</a>.
|
|
146
|
+
</p>
|
|
147
|
+
|
|
148
|
+
<h3 id="c_api">C API extensions</h3>
|
|
149
|
+
<p>
|
|
150
|
+
LuaJIT adds some
|
|
151
|
+
<a href="ext_c_api.html">extra functions to the Lua/C API</a>.
|
|
152
|
+
</p>
|
|
153
|
+
|
|
154
|
+
<h3 id="profiler">Profiler</h3>
|
|
155
|
+
<p>
|
|
156
|
+
LuaJIT has an <a href="ext_profiler.html">integrated profiler</a>.
|
|
157
|
+
</p>
|
|
158
|
+
|
|
159
|
+
<h2 id="library">Enhanced Standard Library Functions</h2>
|
|
160
|
+
|
|
161
|
+
<h3 id="xpcall"><tt>xpcall(f, err [,args...])</tt> passes arguments</h3>
|
|
162
|
+
<p>
|
|
163
|
+
Unlike the standard implementation in Lua 5.1, <tt>xpcall()</tt>
|
|
164
|
+
passes any arguments after the error function to the function
|
|
165
|
+
which is called in a protected context.
|
|
166
|
+
</p>
|
|
167
|
+
|
|
168
|
+
<h3 id="load"><tt>loadfile()</tt> etc. handle UTF-8 source code</h3>
|
|
169
|
+
<p>
|
|
170
|
+
Non-ASCII characters are handled transparently by the Lua source code parser.
|
|
171
|
+
This allows the use of UTF-8 characters in identifiers and strings.
|
|
172
|
+
A UTF-8 BOM is skipped at the start of the source code.
|
|
173
|
+
</p>
|
|
174
|
+
|
|
175
|
+
<h3 id="tostring"><tt>tostring()</tt> etc. canonicalize NaN and ±Inf</h3>
|
|
176
|
+
<p>
|
|
177
|
+
All number-to-string conversions consistently convert non-finite numbers
|
|
178
|
+
to the same strings on all platforms. NaN results in <tt>"nan"</tt>,
|
|
179
|
+
positive infinity results in <tt>"inf"</tt> and negative infinity results
|
|
180
|
+
in <tt>"-inf"</tt>.
|
|
181
|
+
</p>
|
|
182
|
+
|
|
183
|
+
<h3 id="tonumber"><tt>tonumber()</tt> etc. use builtin string to number conversion</h3>
|
|
184
|
+
<p>
|
|
185
|
+
All string-to-number conversions consistently convert integer and
|
|
186
|
+
floating-point inputs in decimal, hexadecimal and binary on all platforms.
|
|
187
|
+
<tt>strtod()</tt> is <em>not</em> used anymore, which avoids numerous
|
|
188
|
+
problems with poor C library implementations. The builtin conversion
|
|
189
|
+
function provides full precision according to the IEEE-754 standard, it
|
|
190
|
+
works independently of the current locale and it supports hex floating-point
|
|
191
|
+
numbers (e.g. <tt>0x1.5p-3</tt>).
|
|
192
|
+
</p>
|
|
193
|
+
|
|
194
|
+
<h3 id="string_dump"><tt>string.dump(f [,strip])</tt> generates portable bytecode</h3>
|
|
195
|
+
<p>
|
|
196
|
+
An extra argument has been added to <tt>string.dump()</tt>. If set to
|
|
197
|
+
<tt>true</tt>, 'stripped' bytecode without debug information is
|
|
198
|
+
generated. This speeds up later bytecode loading and reduces memory
|
|
199
|
+
usage. See also the
|
|
200
|
+
<a href="running.html#opt_b"><tt>-b</tt> command line option</a>.
|
|
201
|
+
</p>
|
|
202
|
+
<p>
|
|
203
|
+
The generated bytecode is portable and can be loaded on any architecture
|
|
204
|
+
that LuaJIT supports, independent of word size or endianess. However the
|
|
205
|
+
bytecode compatibility versions must match. Bytecode stays compatible
|
|
206
|
+
for dot releases (x.y.0 → x.y.1), but may change with major or
|
|
207
|
+
minor releases (2.0 → 2.1) or between any beta release. Foreign
|
|
208
|
+
bytecode (e.g. from Lua 5.1) is incompatible and cannot be loaded.
|
|
209
|
+
</p>
|
|
210
|
+
<p>
|
|
211
|
+
Note: <tt>LJ_GC64</tt> mode requires a different frame layout, which implies
|
|
212
|
+
a different, incompatible bytecode format for ports that use this mode (e.g.
|
|
213
|
+
ARM64). This may be rectified in the future.
|
|
214
|
+
</p>
|
|
215
|
+
|
|
216
|
+
<h3 id="table_new"><tt>table.new(narray, nhash)</tt> allocates a pre-sized table</h3>
|
|
217
|
+
<p>
|
|
218
|
+
An extra library function <tt>table.new()</tt> can be made available via
|
|
219
|
+
<tt>require("table.new")</tt>. This creates a pre-sized table, just like
|
|
220
|
+
the C API equivalent <tt>lua_createtable()</tt>. This is useful for big
|
|
221
|
+
tables if the final table size is known and automatic table resizing is
|
|
222
|
+
too expensive.
|
|
223
|
+
</p>
|
|
224
|
+
|
|
225
|
+
<h3 id="table_clear"><tt>table.clear(tab)</tt> clears a table</h3>
|
|
226
|
+
<p>
|
|
227
|
+
An extra library function <tt>table.clear()</tt> can be made available
|
|
228
|
+
via <tt>require("table.clear")</tt>. This clears all keys and values
|
|
229
|
+
from a table, but preserves the allocated array/hash sizes. This is
|
|
230
|
+
useful when a table, which is linked from multiple places, needs to be
|
|
231
|
+
cleared and/or when recycling a table for use by the same context. This
|
|
232
|
+
avoids managing backlinks, saves an allocation and the overhead of
|
|
233
|
+
incremental array/hash part growth.
|
|
234
|
+
</p>
|
|
235
|
+
<p>
|
|
236
|
+
Please note this function is meant for very specific situations. In most
|
|
237
|
+
cases it's better to replace the (usually single) link with a new table
|
|
238
|
+
and let the GC do its work.
|
|
239
|
+
</p>
|
|
240
|
+
|
|
241
|
+
<h3 id="math_random">Enhanced PRNG for <tt>math.random()</tt></h3>
|
|
242
|
+
<p>
|
|
243
|
+
LuaJIT uses a Tausworthe PRNG with period 2^223 to implement
|
|
244
|
+
<tt>math.random()</tt> and <tt>math.randomseed()</tt>. The quality of
|
|
245
|
+
the PRNG results is much superior compared to the standard Lua
|
|
246
|
+
implementation which uses the platform-specific ANSI rand().
|
|
247
|
+
</p>
|
|
248
|
+
<p>
|
|
249
|
+
The PRNG generates the same sequences from the same seeds on all
|
|
250
|
+
platforms and makes use of all bits in the seed argument.
|
|
251
|
+
<tt>math.random()</tt> without arguments generates 52 pseudo-random bits
|
|
252
|
+
for every call. The result is uniformly distributed between 0.0 and 1.0.
|
|
253
|
+
It's correctly scaled up and rounded for <tt>math.random(n [,m])</tt> to
|
|
254
|
+
preserve uniformity.
|
|
255
|
+
</p>
|
|
256
|
+
|
|
257
|
+
<h3 id="io"><tt>io.*</tt> functions handle 64 bit file offsets</h3>
|
|
258
|
+
<p>
|
|
259
|
+
The file I/O functions in the standard <tt>io.*</tt> library handle
|
|
260
|
+
64 bit file offsets. In particular this means it's possible
|
|
261
|
+
to open files larger than 2 Gigabytes and to reposition or obtain
|
|
262
|
+
the current file position for offsets beyond 2 GB
|
|
263
|
+
(<tt>fp:seek()</tt> method).
|
|
264
|
+
</p>
|
|
265
|
+
|
|
266
|
+
<h3 id="debug_meta"><tt>debug.*</tt> functions identify metamethods</h3>
|
|
267
|
+
<p>
|
|
268
|
+
<tt>debug.getinfo()</tt> and <tt>lua_getinfo()</tt> also return information
|
|
269
|
+
about invoked metamethods. The <tt>namewhat</tt> field is set to
|
|
270
|
+
<tt>"metamethod"</tt> and the <tt>name</tt> field has the name of
|
|
271
|
+
the corresponding metamethod (e.g. <tt>"__index"</tt>).
|
|
272
|
+
</p>
|
|
273
|
+
|
|
274
|
+
<h2 id="resumable">Fully Resumable VM</h2>
|
|
275
|
+
<p>
|
|
276
|
+
The LuaJIT VM is fully resumable. This means you can yield from a
|
|
277
|
+
coroutine even across contexts, where this would not possible with
|
|
278
|
+
the standard Lua 5.1 VM: e.g. you can yield across <tt>pcall()</tt>
|
|
279
|
+
and <tt>xpcall()</tt>, across iterators and across metamethods.
|
|
280
|
+
</p>
|
|
281
|
+
|
|
282
|
+
<h2 id="lua52">Extensions from Lua 5.2</h2>
|
|
283
|
+
<p>
|
|
284
|
+
LuaJIT supports some language and library extensions from Lua 5.2.
|
|
285
|
+
Features that are unlikely to break existing code are unconditionally
|
|
286
|
+
enabled:
|
|
287
|
+
</p>
|
|
288
|
+
<ul>
|
|
289
|
+
<li><tt>goto</tt> and <tt>::labels::</tt>.</li>
|
|
290
|
+
<li>Hex escapes <tt>'\x3F'</tt> and <tt>'\*'</tt> escape in strings.</li>
|
|
291
|
+
<li><tt>load(string|reader [, chunkname [,mode [,env]]])</tt>.</li>
|
|
292
|
+
<li><tt>loadstring()</tt> is an alias for <tt>load()</tt>.</li>
|
|
293
|
+
<li><tt>loadfile(filename [,mode [,env]])</tt>.</li>
|
|
294
|
+
<li><tt>math.log(x [,base])</tt>.
|
|
295
|
+
<li><tt>string.rep(s, n [,sep])</tt>.
|
|
296
|
+
<li><tt>string.format()</tt>: <tt>%q</tt> reversible.
|
|
297
|
+
<tt>%s</tt> checks <tt>__tostring</tt>.
|
|
298
|
+
<tt>%a</tt> and <tt>"%A</tt> added.</li>
|
|
299
|
+
<li>String matching pattern <tt>%g</tt> added.</li>
|
|
300
|
+
<li><tt>io.read("*L")</tt>.</li>
|
|
301
|
+
<li><tt>io.lines()</tt> and <tt>file:lines()</tt> process
|
|
302
|
+
<tt>io.read()</tt> options.</li>
|
|
303
|
+
<li><tt>os.exit(status|true|false [,close])</tt>.</li>
|
|
304
|
+
<li><tt>package.searchpath(name, path [, sep [, rep]])</tt>.</li>
|
|
305
|
+
<li><tt>package.loadlib(name, "*")</tt>.</li>
|
|
306
|
+
<li><tt>debug.getinfo()</tt> returns <tt>nparams</tt> and <tt>isvararg</tt>
|
|
307
|
+
for option <tt>"u"</tt>.</li>
|
|
308
|
+
<li><tt>debug.getlocal()</tt> accepts function instead of level.</li>
|
|
309
|
+
<li><tt>debug.getlocal()</tt> and <tt>debug.setlocal()</tt> accept negative
|
|
310
|
+
indexes for varargs.</li>
|
|
311
|
+
<li><tt>debug.getupvalue()</tt> and <tt>debug.setupvalue()</tt> handle
|
|
312
|
+
C functions.</li>
|
|
313
|
+
<li><tt>debug.upvalueid()</tt> and <tt>debug.upvaluejoin()</tt>.</li>
|
|
314
|
+
<li>Command line option <tt>-E</tt>.</li>
|
|
315
|
+
<li>Command line checks <tt>__tostring</tt> for errors.</li>
|
|
316
|
+
</ul>
|
|
317
|
+
<p>
|
|
318
|
+
Other features are only enabled, if LuaJIT is built with
|
|
319
|
+
<tt>-DLUAJIT_ENABLE_LUA52COMPAT</tt>:
|
|
320
|
+
</p>
|
|
321
|
+
<ul>
|
|
322
|
+
<li><tt>goto</tt> is a keyword and not a valid variable name anymore.</li>
|
|
323
|
+
<li><tt>break</tt> can be placed anywhere. Empty statements (<tt>;;</tt>)
|
|
324
|
+
are allowed.</li>
|
|
325
|
+
<li><tt>__lt</tt>, <tt>__le</tt> are invoked for mixed types.</li>
|
|
326
|
+
<li><tt>__len</tt> for tables. <tt>rawlen()</tt> library function.</li>
|
|
327
|
+
<li><tt>pairs()</tt> and <tt>ipairs()</tt> check for <tt>__pairs</tt> and
|
|
328
|
+
<tt>__ipairs</tt>.</li>
|
|
329
|
+
<li><tt>coroutine.running()</tt> returns two results.</li>
|
|
330
|
+
<li><tt>table.pack()</tt> and <tt>table.unpack()</tt>
|
|
331
|
+
(same as <tt>unpack()</tt>).</li>
|
|
332
|
+
<li><tt>io.write()</tt> and <tt>file:write()</tt> return file handle
|
|
333
|
+
instead of <tt>true</tt>.</li>
|
|
334
|
+
<li><tt>os.execute()</tt> and <tt>pipe:close()</tt> return detailed
|
|
335
|
+
exit status.</li>
|
|
336
|
+
<li><tt>debug.setmetatable()</tt> returns object.</li>
|
|
337
|
+
<li><tt>debug.getuservalue()</tt> and <tt>debug.setuservalue()</tt>.</li>
|
|
338
|
+
<li>Remove <tt>math.mod()</tt>, <tt>string.gfind()</tt>.
|
|
339
|
+
</ul>
|
|
340
|
+
<p>
|
|
341
|
+
Note: this provides only partial compatibility with Lua 5.2 at the
|
|
342
|
+
language and Lua library level. LuaJIT is API+ABI-compatible with
|
|
343
|
+
Lua 5.1, which prevents implementing features that would otherwise
|
|
344
|
+
break the Lua/C API and ABI (e.g. <tt>_ENV</tt>).
|
|
345
|
+
</p>
|
|
346
|
+
|
|
347
|
+
<h2 id="exceptions">C++ Exception Interoperability</h2>
|
|
348
|
+
<p>
|
|
349
|
+
LuaJIT has built-in support for interoperating with C++ exceptions.
|
|
350
|
+
The available range of features depends on the target platform and
|
|
351
|
+
the toolchain used to compile LuaJIT:
|
|
352
|
+
</p>
|
|
353
|
+
<table class="exc">
|
|
354
|
+
<tr class="exchead">
|
|
355
|
+
<td class="excplatform">Platform</td>
|
|
356
|
+
<td class="exccompiler">Compiler</td>
|
|
357
|
+
<td class="excinterop">Interoperability</td>
|
|
358
|
+
</tr>
|
|
359
|
+
<tr class="odd separate">
|
|
360
|
+
<td class="excplatform">POSIX/x64, DWARF2 unwinding</td>
|
|
361
|
+
<td class="exccompiler">GCC 4.3+</td>
|
|
362
|
+
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
363
|
+
</tr>
|
|
364
|
+
<tr class="even">
|
|
365
|
+
<td class="excplatform">Other platforms, DWARF2 unwinding</td>
|
|
366
|
+
<td class="exccompiler">GCC</td>
|
|
367
|
+
<td class="excinterop"><b style="color: #c06000;">Limited</b></td>
|
|
368
|
+
</tr>
|
|
369
|
+
<tr class="odd">
|
|
370
|
+
<td class="excplatform">Windows/x64</td>
|
|
371
|
+
<td class="exccompiler">MSVC or WinSDK</td>
|
|
372
|
+
<td class="excinterop"><b style="color: #00a000;">Full</b></td>
|
|
373
|
+
</tr>
|
|
374
|
+
<tr class="even">
|
|
375
|
+
<td class="excplatform">Windows/x86</td>
|
|
376
|
+
<td class="exccompiler">Any</td>
|
|
377
|
+
<td class="excinterop"><b style="color: #a00000;">No</b></td>
|
|
378
|
+
</tr>
|
|
379
|
+
<tr class="odd">
|
|
380
|
+
<td class="excplatform">Other platforms</td>
|
|
381
|
+
<td class="exccompiler">Other compilers</td>
|
|
382
|
+
<td class="excinterop"><b style="color: #a00000;">No</b></td>
|
|
383
|
+
</tr>
|
|
384
|
+
</table>
|
|
385
|
+
<p>
|
|
386
|
+
<b style="color: #00a000;">Full interoperability</b> means:
|
|
387
|
+
</p>
|
|
388
|
+
<ul>
|
|
389
|
+
<li>C++ exceptions can be caught on the Lua side with <tt>pcall()</tt>,
|
|
390
|
+
<tt>lua_pcall()</tt> etc.</li>
|
|
391
|
+
<li>C++ exceptions will be converted to the generic Lua error
|
|
392
|
+
<tt>"C++ exception"</tt>, unless you use the
|
|
393
|
+
<a href="ext_c_api.html#mode_wrapcfunc">C call wrapper</a> feature.</li>
|
|
394
|
+
<li>It's safe to throw C++ exceptions across non-protected Lua frames
|
|
395
|
+
on the C stack. The contents of the C++ exception object
|
|
396
|
+
pass through unmodified.</li>
|
|
397
|
+
<li>Lua errors can be caught on the C++ side with <tt>catch(...)</tt>.
|
|
398
|
+
The corresponding Lua error message can be retrieved from the Lua stack.</li>
|
|
399
|
+
<li>Throwing Lua errors across C++ frames is safe. C++ destructors
|
|
400
|
+
will be called.</li>
|
|
401
|
+
</ul>
|
|
402
|
+
<p>
|
|
403
|
+
<b style="color: #c06000;">Limited interoperability</b> means:
|
|
404
|
+
</p>
|
|
405
|
+
<ul>
|
|
406
|
+
<li>C++ exceptions can be caught on the Lua side with <tt>pcall()</tt>,
|
|
407
|
+
<tt>lua_pcall()</tt> etc.</li>
|
|
408
|
+
<li>C++ exceptions will be converted to the generic Lua error
|
|
409
|
+
<tt>"C++ exception"</tt>, unless you use the
|
|
410
|
+
<a href="ext_c_api.html#mode_wrapcfunc">C call wrapper</a> feature.</li>
|
|
411
|
+
<li>C++ exceptions will be caught by non-protected Lua frames and
|
|
412
|
+
are rethrown as a generic Lua error. The C++ exception object will
|
|
413
|
+
be destroyed.</li>
|
|
414
|
+
<li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
|
|
415
|
+
<li>Throwing Lua errors across C++ frames will <b>not</b> call
|
|
416
|
+
C++ destructors.</li>
|
|
417
|
+
</ul>
|
|
418
|
+
|
|
419
|
+
<p>
|
|
420
|
+
<b style="color: #a00000;">No interoperability</b> means:
|
|
421
|
+
</p>
|
|
422
|
+
<ul>
|
|
423
|
+
<li>It's <b>not</b> safe to throw C++ exceptions across Lua frames.</li>
|
|
424
|
+
<li>C++ exceptions <b>cannot</b> be caught on the Lua side.</li>
|
|
425
|
+
<li>Lua errors <b>cannot</b> be caught on the C++ side.</li>
|
|
426
|
+
<li>Throwing Lua errors across C++ frames will <b>not</b> call
|
|
427
|
+
C++ destructors.</li>
|
|
428
|
+
<li>Additionally, on Windows/x86 with SEH-based C++ exceptions:
|
|
429
|
+
it's <b>not</b> safe to throw a Lua error across any frames containing
|
|
430
|
+
a C++ function with any try/catch construct or using variables with
|
|
431
|
+
(implicit) destructors. This also applies to any functions which may be
|
|
432
|
+
inlined in such a function. It doesn't matter whether <tt>lua_error()</tt>
|
|
433
|
+
is called inside or outside of a try/catch or whether any object actually
|
|
434
|
+
needs to be destroyed: the SEH chain is corrupted and this will eventually
|
|
435
|
+
lead to the termination of the process.</li>
|
|
436
|
+
</ul>
|
|
437
|
+
<br class="flush">
|
|
438
|
+
</div>
|
|
439
|
+
<div id="foot">
|
|
440
|
+
<hr class="hide">
|
|
441
|
+
Copyright © 2005-2015 Mike Pall
|
|
442
|
+
<span class="noprint">
|
|
443
|
+
·
|
|
444
|
+
<a href="contact.html">Contact</a>
|
|
445
|
+
</span>
|
|
446
|
+
</div>
|
|
447
|
+
</body>
|
|
448
|
+
</html>
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Frequently Asked Questions (FAQ)</title>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
6
|
+
<meta name="Author" content="Mike Pall">
|
|
7
|
+
<meta name="Copyright" content="Copyright (C) 2005-2015, Mike Pall">
|
|
8
|
+
<meta name="Language" content="en">
|
|
9
|
+
<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
|
|
11
|
+
<style type="text/css">
|
|
12
|
+
dd { margin-left: 1.5em; }
|
|
13
|
+
</style>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<div id="site">
|
|
17
|
+
<a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
|
|
18
|
+
</div>
|
|
19
|
+
<div id="head">
|
|
20
|
+
<h1>Frequently Asked Questions (FAQ)</h1>
|
|
21
|
+
</div>
|
|
22
|
+
<div id="nav">
|
|
23
|
+
<ul><li>
|
|
24
|
+
<a href="luajit.html">LuaJIT</a>
|
|
25
|
+
<ul><li>
|
|
26
|
+
<a href="http://luajit.org/download.html">Download <span class="ext">»</span></a>
|
|
27
|
+
</li><li>
|
|
28
|
+
<a href="install.html">Installation</a>
|
|
29
|
+
</li><li>
|
|
30
|
+
<a href="running.html">Running</a>
|
|
31
|
+
</li></ul>
|
|
32
|
+
</li><li>
|
|
33
|
+
<a href="extensions.html">Extensions</a>
|
|
34
|
+
<ul><li>
|
|
35
|
+
<a href="ext_ffi.html">FFI Library</a>
|
|
36
|
+
<ul><li>
|
|
37
|
+
<a href="ext_ffi_tutorial.html">FFI Tutorial</a>
|
|
38
|
+
</li><li>
|
|
39
|
+
<a href="ext_ffi_api.html">ffi.* API</a>
|
|
40
|
+
</li><li>
|
|
41
|
+
<a href="ext_ffi_semantics.html">FFI Semantics</a>
|
|
42
|
+
</li></ul>
|
|
43
|
+
</li><li>
|
|
44
|
+
<a href="ext_jit.html">jit.* Library</a>
|
|
45
|
+
</li><li>
|
|
46
|
+
<a href="ext_c_api.html">Lua/C API</a>
|
|
47
|
+
</li><li>
|
|
48
|
+
<a href="ext_profiler.html">Profiler</a>
|
|
49
|
+
</li></ul>
|
|
50
|
+
</li><li>
|
|
51
|
+
<a href="status.html">Status</a>
|
|
52
|
+
<ul><li>
|
|
53
|
+
<a href="changes.html">Changes</a>
|
|
54
|
+
</li></ul>
|
|
55
|
+
</li><li>
|
|
56
|
+
<a class="current" href="faq.html">FAQ</a>
|
|
57
|
+
</li><li>
|
|
58
|
+
<a href="http://luajit.org/performance.html">Performance <span class="ext">»</span></a>
|
|
59
|
+
</li><li>
|
|
60
|
+
<a href="http://wiki.luajit.org/">Wiki <span class="ext">»</span></a>
|
|
61
|
+
</li><li>
|
|
62
|
+
<a href="http://luajit.org/list.html">Mailing List <span class="ext">»</span></a>
|
|
63
|
+
</li></ul>
|
|
64
|
+
</div>
|
|
65
|
+
<div id="main">
|
|
66
|
+
<dl>
|
|
67
|
+
<dt>Q: Where can I learn more about LuaJIT and Lua?</dt>
|
|
68
|
+
<dd>
|
|
69
|
+
<ul style="padding: 0;">
|
|
70
|
+
<li>The <a href="http://luajit.org/list.html"><span class="ext">»</span> LuaJIT mailing list</a> focuses on topics
|
|
71
|
+
related to LuaJIT.</li>
|
|
72
|
+
<li>The <a href="http://wiki.luajit.org/"><span class="ext">»</span> LuaJIT wiki</a> gathers community
|
|
73
|
+
resources about LuaJIT.</li>
|
|
74
|
+
<li>News about Lua itself can be found at the
|
|
75
|
+
<a href="http://www.lua.org/lua-l.html"><span class="ext">»</span> Lua mailing list</a>.
|
|
76
|
+
The mailing list archives are worth checking out for older postings
|
|
77
|
+
about LuaJIT.</li>
|
|
78
|
+
<li>The <a href="http://lua.org"><span class="ext">»</span> main Lua.org site</a> has complete
|
|
79
|
+
<a href="http://www.lua.org/docs.html"><span class="ext">»</span> documentation</a> of the language
|
|
80
|
+
and links to books and papers about Lua.</li>
|
|
81
|
+
<li>The community-managed <a href="http://lua-users.org/wiki/"><span class="ext">»</span> Lua Wiki</a>
|
|
82
|
+
has information about diverse topics.</li>
|
|
83
|
+
</ul>
|
|
84
|
+
</dl>
|
|
85
|
+
|
|
86
|
+
<dl>
|
|
87
|
+
<dt>Q: Where can I learn more about the compiler technology used by LuaJIT?</dt>
|
|
88
|
+
<dd>
|
|
89
|
+
I'm planning to write more documentation about the internals of LuaJIT.
|
|
90
|
+
In the meantime, please use the following Google Scholar searches
|
|
91
|
+
to find relevant papers:<br>
|
|
92
|
+
Search for: <a href="http://scholar.google.com/scholar?q=Trace+Compiler"><span class="ext">»</span> Trace Compiler</a><br>
|
|
93
|
+
Search for: <a href="http://scholar.google.com/scholar?q=JIT+Compiler"><span class="ext">»</span> JIT Compiler</a><br>
|
|
94
|
+
Search for: <a href="http://scholar.google.com/scholar?q=Dynamic+Language+Optimizations"><span class="ext">»</span> Dynamic Language Optimizations</a><br>
|
|
95
|
+
Search for: <a href="http://scholar.google.com/scholar?q=SSA+Form"><span class="ext">»</span> SSA Form</a><br>
|
|
96
|
+
Search for: <a href="http://scholar.google.com/scholar?q=Linear+Scan+Register+Allocation"><span class="ext">»</span> Linear Scan Register Allocation</a><br>
|
|
97
|
+
Here is a list of the <a href="http://article.gmane.org/gmane.comp.lang.lua.general/58908"><span class="ext">»</span> innovative features in LuaJIT</a>.<br>
|
|
98
|
+
And, you know, reading the source is of course the only way to enlightenment. :-)
|
|
99
|
+
</dd>
|
|
100
|
+
</dl>
|
|
101
|
+
|
|
102
|
+
<dl>
|
|
103
|
+
<dt>Q: Why do I get this error: "attempt to index global 'arg' (a nil value)"?<br>
|
|
104
|
+
Q: My vararg functions fail after switching to LuaJIT!</dt>
|
|
105
|
+
<dd>LuaJIT is compatible to the Lua 5.1 language standard. It doesn't
|
|
106
|
+
support the implicit <tt>arg</tt> parameter for old-style vararg
|
|
107
|
+
functions from Lua 5.0.<br>Please convert your code to the
|
|
108
|
+
<a href="http://www.lua.org/manual/5.1/manual.html#2.5.9"><span class="ext">»</span> Lua 5.1
|
|
109
|
+
vararg syntax</a>.</dd>
|
|
110
|
+
</dl>
|
|
111
|
+
|
|
112
|
+
<dl>
|
|
113
|
+
<dt>Q: Why do I get this error: "bad FPU precision"?<br>
|
|
114
|
+
<dt>Q: I get weird behavior after initializing Direct3D.<br>
|
|
115
|
+
<dt>Q: Some FPU operations crash after I load a Delphi DLL.<br>
|
|
116
|
+
</dt>
|
|
117
|
+
<dd>
|
|
118
|
+
|
|
119
|
+
DirectX/Direct3D (up to version 9) sets the x87 FPU to single-precision
|
|
120
|
+
mode by default. This violates the Windows ABI and interferes with the
|
|
121
|
+
operation of many programs — LuaJIT is affected, too. Please make
|
|
122
|
+
sure you always use the <tt>D3DCREATE_FPU_PRESERVE</tt> flag when
|
|
123
|
+
initializing Direct3D.<br>
|
|
124
|
+
|
|
125
|
+
Direct3D version 10 or higher do not show this behavior anymore.
|
|
126
|
+
Consider testing your application with older versions, too.<br>
|
|
127
|
+
|
|
128
|
+
Similarly, the Borland/Delphi runtime modifies the FPU control word and
|
|
129
|
+
enables FP exceptions. Of course this violates the Windows ABI, too.
|
|
130
|
+
Please check the Delphi docs for the Set8087CW method.
|
|
131
|
+
|
|
132
|
+
</dl>
|
|
133
|
+
|
|
134
|
+
<dl>
|
|
135
|
+
<dt>Q: Sometimes Ctrl-C fails to stop my Lua program. Why?</dt>
|
|
136
|
+
<dd>The interrupt signal handler sets a Lua debug hook. But this is
|
|
137
|
+
currently ignored by compiled code (this will eventually be fixed). If
|
|
138
|
+
your program is running in a tight loop and never falls back to the
|
|
139
|
+
interpreter, the debug hook never runs and can't throw the
|
|
140
|
+
"interrupted!" error.<br> In the meantime you have to press Ctrl-C
|
|
141
|
+
twice to get stop your program. That's similar to when it's stuck
|
|
142
|
+
running inside a C function under the Lua interpreter.</dd>
|
|
143
|
+
</dl>
|
|
144
|
+
|
|
145
|
+
<dl>
|
|
146
|
+
<dt>Q: Why doesn't my favorite power-patch for Lua apply against LuaJIT?</dt>
|
|
147
|
+
<dd>Because it's a completely redesigned VM and has very little code
|
|
148
|
+
in common with Lua anymore. Also, if the patch introduces changes to
|
|
149
|
+
the Lua semantics, these would need to be reflected everywhere in the
|
|
150
|
+
VM, from the interpreter up to all stages of the compiler.<br> Please
|
|
151
|
+
use only standard Lua language constructs. For many common needs you
|
|
152
|
+
can use source transformations or use wrapper or proxy functions.
|
|
153
|
+
The compiler will happily optimize away such indirections.</dd>
|
|
154
|
+
</dl>
|
|
155
|
+
|
|
156
|
+
<dl>
|
|
157
|
+
<dt>Q: Lua runs everywhere. Why doesn't LuaJIT support my CPU?</dt>
|
|
158
|
+
<dd>Because it's a compiler — it needs to generate native
|
|
159
|
+
machine code. This means the code generator must be ported to each
|
|
160
|
+
architecture. And the fast interpreter is written in assembler and
|
|
161
|
+
must be ported, too. This is quite an undertaking.<br>
|
|
162
|
+
The <a href="install.html">install documentation</a> shows the supported
|
|
163
|
+
architectures. Other architectures will follow based on sufficient user
|
|
164
|
+
demand and/or sponsoring.</dd>
|
|
165
|
+
</dl>
|
|
166
|
+
|
|
167
|
+
<dl>
|
|
168
|
+
<dt>Q: When will feature X be added? When will the next version be released?</dt>
|
|
169
|
+
<dd>When it's ready.<br>
|
|
170
|
+
C'mon, it's open source — I'm doing it on my own time and you're
|
|
171
|
+
getting it for free. You can either contribute a patch or sponsor
|
|
172
|
+
the development of certain features, if they are important to you.
|
|
173
|
+
</dd>
|
|
174
|
+
</dl>
|
|
175
|
+
<br class="flush">
|
|
176
|
+
</div>
|
|
177
|
+
<div id="foot">
|
|
178
|
+
<hr class="hide">
|
|
179
|
+
Copyright © 2005-2015 Mike Pall
|
|
180
|
+
<span class="noprint">
|
|
181
|
+
·
|
|
182
|
+
<a href="contact.html">Contact</a>
|
|
183
|
+
</span>
|
|
184
|
+
</div>
|
|
185
|
+
</body>
|
|
186
|
+
</html>
|