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,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Snapshot handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_SNAP_H
|
|
7
|
+
#define _LJ_SNAP_H
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
#include "lj_jit.h"
|
|
11
|
+
|
|
12
|
+
#if LJ_HASJIT
|
|
13
|
+
LJ_FUNC void lj_snap_add(jit_State *J);
|
|
14
|
+
LJ_FUNC void lj_snap_purge(jit_State *J);
|
|
15
|
+
LJ_FUNC void lj_snap_shrink(jit_State *J);
|
|
16
|
+
LJ_FUNC IRIns *lj_snap_regspmap(GCtrace *T, SnapNo snapno, IRIns *ir);
|
|
17
|
+
LJ_FUNC void lj_snap_replay(jit_State *J, GCtrace *T);
|
|
18
|
+
LJ_FUNC const BCIns *lj_snap_restore(jit_State *J, void *exptr);
|
|
19
|
+
LJ_FUNC void lj_snap_grow_buf_(jit_State *J, MSize need);
|
|
20
|
+
LJ_FUNC void lj_snap_grow_map_(jit_State *J, MSize need);
|
|
21
|
+
|
|
22
|
+
static LJ_AINLINE void lj_snap_grow_buf(jit_State *J, MSize need)
|
|
23
|
+
{
|
|
24
|
+
if (LJ_UNLIKELY(need > J->sizesnap)) lj_snap_grow_buf_(J, need);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static LJ_AINLINE void lj_snap_grow_map(jit_State *J, MSize need)
|
|
28
|
+
{
|
|
29
|
+
if (LJ_UNLIKELY(need > J->sizesnapmap)) lj_snap_grow_map_(J, need);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
#endif
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** State and stack handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
**
|
|
5
|
+
** Portions taken verbatim or adapted from the Lua interpreter.
|
|
6
|
+
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#define lj_state_c
|
|
10
|
+
#define LUA_CORE
|
|
11
|
+
|
|
12
|
+
#include "lj_obj.h"
|
|
13
|
+
#include "lj_gc.h"
|
|
14
|
+
#include "lj_err.h"
|
|
15
|
+
#include "lj_buf.h"
|
|
16
|
+
#include "lj_str.h"
|
|
17
|
+
#include "lj_tab.h"
|
|
18
|
+
#include "lj_func.h"
|
|
19
|
+
#include "lj_meta.h"
|
|
20
|
+
#include "lj_state.h"
|
|
21
|
+
#include "lj_frame.h"
|
|
22
|
+
#if LJ_HASFFI
|
|
23
|
+
#include "lj_ctype.h"
|
|
24
|
+
#endif
|
|
25
|
+
#include "lj_trace.h"
|
|
26
|
+
#include "lj_dispatch.h"
|
|
27
|
+
#include "lj_vm.h"
|
|
28
|
+
#include "lj_lex.h"
|
|
29
|
+
#include "lj_alloc.h"
|
|
30
|
+
#include "luajit.h"
|
|
31
|
+
|
|
32
|
+
/* -- Stack handling ------------------------------------------------------ */
|
|
33
|
+
|
|
34
|
+
/* Stack sizes. */
|
|
35
|
+
#define LJ_STACK_MIN LUA_MINSTACK /* Min. stack size. */
|
|
36
|
+
#define LJ_STACK_MAX LUAI_MAXSTACK /* Max. stack size. */
|
|
37
|
+
#define LJ_STACK_START (2*LJ_STACK_MIN) /* Starting stack size. */
|
|
38
|
+
#define LJ_STACK_MAXEX (LJ_STACK_MAX + 1 + LJ_STACK_EXTRA)
|
|
39
|
+
|
|
40
|
+
/* Explanation of LJ_STACK_EXTRA:
|
|
41
|
+
**
|
|
42
|
+
** Calls to metamethods store their arguments beyond the current top
|
|
43
|
+
** without checking for the stack limit. This avoids stack resizes which
|
|
44
|
+
** would invalidate passed TValue pointers. The stack check is performed
|
|
45
|
+
** later by the function header. This can safely resize the stack or raise
|
|
46
|
+
** an error. Thus we need some extra slots beyond the current stack limit.
|
|
47
|
+
**
|
|
48
|
+
** Most metamethods need 4 slots above top (cont, mobj, arg1, arg2) plus
|
|
49
|
+
** one extra slot if mobj is not a function. Only lj_meta_tset needs 5
|
|
50
|
+
** slots above top, but then mobj is always a function. So we can get by
|
|
51
|
+
** with 5 extra slots.
|
|
52
|
+
** LJ_FR2: We need 2 more slots for the frame PC and the continuation PC.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/* Resize stack slots and adjust pointers in state. */
|
|
56
|
+
static void resizestack(lua_State *L, MSize n)
|
|
57
|
+
{
|
|
58
|
+
TValue *st, *oldst = tvref(L->stack);
|
|
59
|
+
ptrdiff_t delta;
|
|
60
|
+
MSize oldsize = L->stacksize;
|
|
61
|
+
MSize realsize = n + 1 + LJ_STACK_EXTRA;
|
|
62
|
+
GCobj *up;
|
|
63
|
+
lua_assert((MSize)(tvref(L->maxstack)-oldst)==L->stacksize-LJ_STACK_EXTRA-1);
|
|
64
|
+
st = (TValue *)lj_mem_realloc(L, tvref(L->stack),
|
|
65
|
+
(MSize)(oldsize*sizeof(TValue)),
|
|
66
|
+
(MSize)(realsize*sizeof(TValue)));
|
|
67
|
+
setmref(L->stack, st);
|
|
68
|
+
delta = (char *)st - (char *)oldst;
|
|
69
|
+
setmref(L->maxstack, st + n);
|
|
70
|
+
while (oldsize < realsize) /* Clear new slots. */
|
|
71
|
+
setnilV(st + oldsize++);
|
|
72
|
+
L->stacksize = realsize;
|
|
73
|
+
if ((size_t)(mref(G(L)->jit_base, char) - (char *)oldst) < oldsize)
|
|
74
|
+
setmref(G(L)->jit_base, mref(G(L)->jit_base, char) + delta);
|
|
75
|
+
L->base = (TValue *)((char *)L->base + delta);
|
|
76
|
+
L->top = (TValue *)((char *)L->top + delta);
|
|
77
|
+
for (up = gcref(L->openupval); up != NULL; up = gcnext(up))
|
|
78
|
+
setmref(gco2uv(up)->v, (TValue *)((char *)uvval(gco2uv(up)) + delta));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Relimit stack after error, in case the limit was overdrawn. */
|
|
82
|
+
void lj_state_relimitstack(lua_State *L)
|
|
83
|
+
{
|
|
84
|
+
if (L->stacksize > LJ_STACK_MAXEX && L->top-tvref(L->stack) < LJ_STACK_MAX-1)
|
|
85
|
+
resizestack(L, LJ_STACK_MAX);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Try to shrink the stack (called from GC). */
|
|
89
|
+
void lj_state_shrinkstack(lua_State *L, MSize used)
|
|
90
|
+
{
|
|
91
|
+
if (L->stacksize > LJ_STACK_MAXEX)
|
|
92
|
+
return; /* Avoid stack shrinking while handling stack overflow. */
|
|
93
|
+
if (4*used < L->stacksize &&
|
|
94
|
+
2*(LJ_STACK_START+LJ_STACK_EXTRA) < L->stacksize &&
|
|
95
|
+
/* Don't shrink stack of live trace. */
|
|
96
|
+
(tvref(G(L)->jit_base) == NULL || obj2gco(L) != gcref(G(L)->cur_L)))
|
|
97
|
+
resizestack(L, L->stacksize >> 1);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Try to grow stack. */
|
|
101
|
+
void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need)
|
|
102
|
+
{
|
|
103
|
+
MSize n;
|
|
104
|
+
if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */
|
|
105
|
+
lj_err_throw(L, LUA_ERRERR);
|
|
106
|
+
n = L->stacksize + need;
|
|
107
|
+
if (n > LJ_STACK_MAX) {
|
|
108
|
+
n += 2*LUA_MINSTACK;
|
|
109
|
+
} else if (n < 2*L->stacksize) {
|
|
110
|
+
n = 2*L->stacksize;
|
|
111
|
+
if (n >= LJ_STACK_MAX)
|
|
112
|
+
n = LJ_STACK_MAX;
|
|
113
|
+
}
|
|
114
|
+
resizestack(L, n);
|
|
115
|
+
if (L->stacksize > LJ_STACK_MAXEX)
|
|
116
|
+
lj_err_msg(L, LJ_ERR_STKOV);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
void LJ_FASTCALL lj_state_growstack1(lua_State *L)
|
|
120
|
+
{
|
|
121
|
+
lj_state_growstack(L, 1);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* Allocate basic stack for new state. */
|
|
125
|
+
static void stack_init(lua_State *L1, lua_State *L)
|
|
126
|
+
{
|
|
127
|
+
TValue *stend, *st = lj_mem_newvec(L, LJ_STACK_START+LJ_STACK_EXTRA, TValue);
|
|
128
|
+
setmref(L1->stack, st);
|
|
129
|
+
L1->stacksize = LJ_STACK_START + LJ_STACK_EXTRA;
|
|
130
|
+
stend = st + L1->stacksize;
|
|
131
|
+
setmref(L1->maxstack, stend - LJ_STACK_EXTRA - 1);
|
|
132
|
+
setthreadV(L1, st++, L1); /* Needed for curr_funcisL() on empty stack. */
|
|
133
|
+
if (LJ_FR2) setnilV(st++);
|
|
134
|
+
L1->base = L1->top = st;
|
|
135
|
+
while (st < stend) /* Clear new slots. */
|
|
136
|
+
setnilV(st++);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* -- State handling ------------------------------------------------------ */
|
|
140
|
+
|
|
141
|
+
/* Open parts that may cause memory-allocation errors. */
|
|
142
|
+
static TValue *cpluaopen(lua_State *L, lua_CFunction dummy, void *ud)
|
|
143
|
+
{
|
|
144
|
+
global_State *g = G(L);
|
|
145
|
+
UNUSED(dummy);
|
|
146
|
+
UNUSED(ud);
|
|
147
|
+
stack_init(L, L);
|
|
148
|
+
/* NOBARRIER: State initialization, all objects are white. */
|
|
149
|
+
setgcref(L->env, obj2gco(lj_tab_new(L, 0, LJ_MIN_GLOBAL)));
|
|
150
|
+
settabV(L, registry(L), lj_tab_new(L, 0, LJ_MIN_REGISTRY));
|
|
151
|
+
lj_str_resize(L, LJ_MIN_STRTAB-1);
|
|
152
|
+
lj_meta_init(L);
|
|
153
|
+
lj_lex_init(L);
|
|
154
|
+
fixstring(lj_err_str(L, LJ_ERR_ERRMEM)); /* Preallocate memory error msg. */
|
|
155
|
+
g->gc.threshold = 4*g->gc.total;
|
|
156
|
+
lj_trace_initstate(g);
|
|
157
|
+
return NULL;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
static void close_state(lua_State *L)
|
|
161
|
+
{
|
|
162
|
+
global_State *g = G(L);
|
|
163
|
+
lj_func_closeuv(L, tvref(L->stack));
|
|
164
|
+
lj_gc_freeall(g);
|
|
165
|
+
lua_assert(gcref(g->gc.root) == obj2gco(L));
|
|
166
|
+
lua_assert(g->strnum == 0);
|
|
167
|
+
lj_trace_freestate(g);
|
|
168
|
+
#if LJ_HASFFI
|
|
169
|
+
lj_ctype_freestate(g);
|
|
170
|
+
#endif
|
|
171
|
+
lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef);
|
|
172
|
+
lj_buf_free(g, &g->tmpbuf);
|
|
173
|
+
lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue);
|
|
174
|
+
lua_assert(g->gc.total == sizeof(GG_State));
|
|
175
|
+
#ifndef LUAJIT_USE_SYSMALLOC
|
|
176
|
+
if (g->allocf == lj_alloc_f)
|
|
177
|
+
lj_alloc_destroy(g->allocd);
|
|
178
|
+
else
|
|
179
|
+
#endif
|
|
180
|
+
g->allocf(g->allocd, G2GG(g), sizeof(GG_State), 0);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
#if LJ_64 && !(defined(LUAJIT_USE_VALGRIND) && defined(LUAJIT_USE_SYSMALLOC))
|
|
184
|
+
lua_State *lj_state_newstate(lua_Alloc f, void *ud)
|
|
185
|
+
#else
|
|
186
|
+
LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)
|
|
187
|
+
#endif
|
|
188
|
+
{
|
|
189
|
+
GG_State *GG = (GG_State *)f(ud, NULL, 0, sizeof(GG_State));
|
|
190
|
+
lua_State *L = &GG->L;
|
|
191
|
+
global_State *g = &GG->g;
|
|
192
|
+
if (GG == NULL || !checkptrGC(GG)) return NULL;
|
|
193
|
+
memset(GG, 0, sizeof(GG_State));
|
|
194
|
+
L->gct = ~LJ_TTHREAD;
|
|
195
|
+
L->marked = LJ_GC_WHITE0 | LJ_GC_FIXED | LJ_GC_SFIXED; /* Prevent free. */
|
|
196
|
+
L->dummy_ffid = FF_C;
|
|
197
|
+
setmref(L->glref, g);
|
|
198
|
+
g->gc.currentwhite = LJ_GC_WHITE0 | LJ_GC_FIXED;
|
|
199
|
+
g->strempty.marked = LJ_GC_WHITE0;
|
|
200
|
+
g->strempty.gct = ~LJ_TSTR;
|
|
201
|
+
g->allocf = f;
|
|
202
|
+
g->allocd = ud;
|
|
203
|
+
setgcref(g->mainthref, obj2gco(L));
|
|
204
|
+
setgcref(g->uvhead.prev, obj2gco(&g->uvhead));
|
|
205
|
+
setgcref(g->uvhead.next, obj2gco(&g->uvhead));
|
|
206
|
+
g->strmask = ~(MSize)0;
|
|
207
|
+
setnilV(registry(L));
|
|
208
|
+
setnilV(&g->nilnode.val);
|
|
209
|
+
setnilV(&g->nilnode.key);
|
|
210
|
+
#if !LJ_GC64
|
|
211
|
+
setmref(g->nilnode.freetop, &g->nilnode);
|
|
212
|
+
#endif
|
|
213
|
+
lj_buf_init(NULL, &g->tmpbuf);
|
|
214
|
+
g->gc.state = GCSpause;
|
|
215
|
+
setgcref(g->gc.root, obj2gco(L));
|
|
216
|
+
setmref(g->gc.sweep, &g->gc.root);
|
|
217
|
+
g->gc.total = sizeof(GG_State);
|
|
218
|
+
g->gc.pause = LUAI_GCPAUSE;
|
|
219
|
+
g->gc.stepmul = LUAI_GCMUL;
|
|
220
|
+
lj_dispatch_init((GG_State *)L);
|
|
221
|
+
L->status = LUA_ERRERR+1; /* Avoid touching the stack upon memory error. */
|
|
222
|
+
if (lj_vm_cpcall(L, NULL, NULL, cpluaopen) != 0) {
|
|
223
|
+
/* Memory allocation error: free partial state. */
|
|
224
|
+
close_state(L);
|
|
225
|
+
return NULL;
|
|
226
|
+
}
|
|
227
|
+
L->status = 0;
|
|
228
|
+
return L;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static TValue *cpfinalize(lua_State *L, lua_CFunction dummy, void *ud)
|
|
232
|
+
{
|
|
233
|
+
UNUSED(dummy);
|
|
234
|
+
UNUSED(ud);
|
|
235
|
+
lj_gc_finalize_cdata(L);
|
|
236
|
+
lj_gc_finalize_udata(L);
|
|
237
|
+
/* Frame pop omitted. */
|
|
238
|
+
return NULL;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
LUA_API void lua_close(lua_State *L)
|
|
242
|
+
{
|
|
243
|
+
global_State *g = G(L);
|
|
244
|
+
int i;
|
|
245
|
+
L = mainthread(g); /* Only the main thread can be closed. */
|
|
246
|
+
#if LJ_HASPROFILE
|
|
247
|
+
luaJIT_profile_stop(L);
|
|
248
|
+
#endif
|
|
249
|
+
setgcrefnull(g->cur_L);
|
|
250
|
+
lj_func_closeuv(L, tvref(L->stack));
|
|
251
|
+
lj_gc_separateudata(g, 1); /* Separate udata which have GC metamethods. */
|
|
252
|
+
#if LJ_HASJIT
|
|
253
|
+
G2J(g)->flags &= ~JIT_F_ON;
|
|
254
|
+
G2J(g)->state = LJ_TRACE_IDLE;
|
|
255
|
+
lj_dispatch_update(g);
|
|
256
|
+
#endif
|
|
257
|
+
for (i = 0;;) {
|
|
258
|
+
hook_enter(g);
|
|
259
|
+
L->status = 0;
|
|
260
|
+
L->base = L->top = tvref(L->stack) + 1 + LJ_FR2;
|
|
261
|
+
L->cframe = NULL;
|
|
262
|
+
if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) {
|
|
263
|
+
if (++i >= 10) break;
|
|
264
|
+
lj_gc_separateudata(g, 1); /* Separate udata again. */
|
|
265
|
+
if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
close_state(L);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
lua_State *lj_state_new(lua_State *L)
|
|
273
|
+
{
|
|
274
|
+
lua_State *L1 = lj_mem_newobj(L, lua_State);
|
|
275
|
+
L1->gct = ~LJ_TTHREAD;
|
|
276
|
+
L1->dummy_ffid = FF_C;
|
|
277
|
+
L1->status = 0;
|
|
278
|
+
L1->stacksize = 0;
|
|
279
|
+
setmref(L1->stack, NULL);
|
|
280
|
+
L1->cframe = NULL;
|
|
281
|
+
/* NOBARRIER: The lua_State is new (marked white). */
|
|
282
|
+
setgcrefnull(L1->openupval);
|
|
283
|
+
setmrefr(L1->glref, L->glref);
|
|
284
|
+
setgcrefr(L1->env, L->env);
|
|
285
|
+
stack_init(L1, L); /* init stack */
|
|
286
|
+
lua_assert(iswhite(obj2gco(L1)));
|
|
287
|
+
return L1;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L)
|
|
291
|
+
{
|
|
292
|
+
lua_assert(L != mainthread(g));
|
|
293
|
+
if (obj2gco(L) == gcref(g->cur_L))
|
|
294
|
+
setgcrefnull(g->cur_L);
|
|
295
|
+
lj_func_closeuv(L, tvref(L->stack));
|
|
296
|
+
lua_assert(gcref(L->openupval) == NULL);
|
|
297
|
+
lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue);
|
|
298
|
+
lj_mem_freet(g, L);
|
|
299
|
+
}
|
|
300
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** State and stack handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#ifndef _LJ_STATE_H
|
|
7
|
+
#define _LJ_STATE_H
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
|
|
11
|
+
#define incr_top(L) \
|
|
12
|
+
(++L->top >= tvref(L->maxstack) && (lj_state_growstack1(L), 0))
|
|
13
|
+
|
|
14
|
+
#define savestack(L, p) ((char *)(p) - mref(L->stack, char))
|
|
15
|
+
#define restorestack(L, n) ((TValue *)(mref(L->stack, char) + (n)))
|
|
16
|
+
|
|
17
|
+
LJ_FUNC void lj_state_relimitstack(lua_State *L);
|
|
18
|
+
LJ_FUNC void lj_state_shrinkstack(lua_State *L, MSize used);
|
|
19
|
+
LJ_FUNCA void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need);
|
|
20
|
+
LJ_FUNC void LJ_FASTCALL lj_state_growstack1(lua_State *L);
|
|
21
|
+
|
|
22
|
+
static LJ_AINLINE void lj_state_checkstack(lua_State *L, MSize need)
|
|
23
|
+
{
|
|
24
|
+
if ((mref(L->maxstack, char) - (char *)L->top) <=
|
|
25
|
+
(ptrdiff_t)need*(ptrdiff_t)sizeof(TValue))
|
|
26
|
+
lj_state_growstack(L, need);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
LJ_FUNC lua_State *lj_state_new(lua_State *L);
|
|
30
|
+
LJ_FUNC void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L);
|
|
31
|
+
#if LJ_64
|
|
32
|
+
LJ_FUNC lua_State *lj_state_newstate(lua_Alloc f, void *ud);
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#endif
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** String handling.
|
|
3
|
+
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#define lj_str_c
|
|
7
|
+
#define LUA_CORE
|
|
8
|
+
|
|
9
|
+
#include "lj_obj.h"
|
|
10
|
+
#include "lj_gc.h"
|
|
11
|
+
#include "lj_err.h"
|
|
12
|
+
#include "lj_str.h"
|
|
13
|
+
#include "lj_char.h"
|
|
14
|
+
|
|
15
|
+
/* -- String helpers ------------------------------------------------------ */
|
|
16
|
+
|
|
17
|
+
/* Ordered compare of strings. Assumes string data is 4-byte aligned. */
|
|
18
|
+
int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b)
|
|
19
|
+
{
|
|
20
|
+
MSize i, n = a->len > b->len ? b->len : a->len;
|
|
21
|
+
for (i = 0; i < n; i += 4) {
|
|
22
|
+
/* Note: innocuous access up to end of string + 3. */
|
|
23
|
+
uint32_t va = *(const uint32_t *)(strdata(a)+i);
|
|
24
|
+
uint32_t vb = *(const uint32_t *)(strdata(b)+i);
|
|
25
|
+
if (va != vb) {
|
|
26
|
+
#if LJ_LE
|
|
27
|
+
va = lj_bswap(va); vb = lj_bswap(vb);
|
|
28
|
+
#endif
|
|
29
|
+
i -= n;
|
|
30
|
+
if ((int32_t)i >= -3) {
|
|
31
|
+
va >>= 32+(i<<3); vb >>= 32+(i<<3);
|
|
32
|
+
if (va == vb) break;
|
|
33
|
+
}
|
|
34
|
+
return va < vb ? -1 : 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return (int32_t)(a->len - b->len);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Fast string data comparison. Caveat: unaligned access to 1st string! */
|
|
41
|
+
static LJ_AINLINE int str_fastcmp(const char *a, const char *b, MSize len)
|
|
42
|
+
{
|
|
43
|
+
MSize i = 0;
|
|
44
|
+
lua_assert(len > 0);
|
|
45
|
+
lua_assert((((uintptr_t)a+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4);
|
|
46
|
+
do { /* Note: innocuous access up to end of string + 3. */
|
|
47
|
+
uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i);
|
|
48
|
+
if (v) {
|
|
49
|
+
i -= len;
|
|
50
|
+
#if LJ_LE
|
|
51
|
+
return (int32_t)i >= -3 ? (v << (32+(i<<3))) : 1;
|
|
52
|
+
#else
|
|
53
|
+
return (int32_t)i >= -3 ? (v >> (32+(i<<3))) : 1;
|
|
54
|
+
#endif
|
|
55
|
+
}
|
|
56
|
+
i += 4;
|
|
57
|
+
} while (i < len);
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Find fixed string p inside string s. */
|
|
62
|
+
const char *lj_str_find(const char *s, const char *p, MSize slen, MSize plen)
|
|
63
|
+
{
|
|
64
|
+
if (plen <= slen) {
|
|
65
|
+
if (plen == 0) {
|
|
66
|
+
return s;
|
|
67
|
+
} else {
|
|
68
|
+
int c = *(const uint8_t *)p++;
|
|
69
|
+
plen--; slen -= plen;
|
|
70
|
+
while (slen) {
|
|
71
|
+
const char *q = (const char *)memchr(s, c, slen);
|
|
72
|
+
if (!q) break;
|
|
73
|
+
if (memcmp(q+1, p, plen) == 0) return q;
|
|
74
|
+
q++; slen -= (MSize)(q-s); s = q;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return NULL;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Check whether a string has a pattern matching character. */
|
|
82
|
+
int lj_str_haspattern(GCstr *s)
|
|
83
|
+
{
|
|
84
|
+
const char *p = strdata(s), *q = p + s->len;
|
|
85
|
+
while (p < q) {
|
|
86
|
+
int c = *(const uint8_t *)p++;
|
|
87
|
+
if (lj_char_ispunct(c) && strchr("^$*+?.([%-", c))
|
|
88
|
+
return 1; /* Found a pattern matching char. */
|
|
89
|
+
}
|
|
90
|
+
return 0; /* No pattern matching chars found. */
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* -- String interning ---------------------------------------------------- */
|
|
94
|
+
|
|
95
|
+
/* Resize the string hash table (grow and shrink). */
|
|
96
|
+
void lj_str_resize(lua_State *L, MSize newmask)
|
|
97
|
+
{
|
|
98
|
+
global_State *g = G(L);
|
|
99
|
+
GCRef *newhash;
|
|
100
|
+
MSize i;
|
|
101
|
+
if (g->gc.state == GCSsweepstring || newmask >= LJ_MAX_STRTAB-1)
|
|
102
|
+
return; /* No resizing during GC traversal or if already too big. */
|
|
103
|
+
newhash = lj_mem_newvec(L, newmask+1, GCRef);
|
|
104
|
+
memset(newhash, 0, (newmask+1)*sizeof(GCRef));
|
|
105
|
+
for (i = g->strmask; i != ~(MSize)0; i--) { /* Rehash old table. */
|
|
106
|
+
GCobj *p = gcref(g->strhash[i]);
|
|
107
|
+
while (p) { /* Follow each hash chain and reinsert all strings. */
|
|
108
|
+
MSize h = gco2str(p)->hash & newmask;
|
|
109
|
+
GCobj *next = gcnext(p);
|
|
110
|
+
/* NOBARRIER: The string table is a GC root. */
|
|
111
|
+
setgcrefr(p->gch.nextgc, newhash[h]);
|
|
112
|
+
setgcref(newhash[h], p);
|
|
113
|
+
p = next;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef);
|
|
117
|
+
g->strmask = newmask;
|
|
118
|
+
g->strhash = newhash;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Intern a string and return string object. */
|
|
122
|
+
GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
|
|
123
|
+
{
|
|
124
|
+
global_State *g;
|
|
125
|
+
GCstr *s;
|
|
126
|
+
GCobj *o;
|
|
127
|
+
MSize len = (MSize)lenx;
|
|
128
|
+
MSize a, b, h = len;
|
|
129
|
+
if (lenx >= LJ_MAX_STR)
|
|
130
|
+
lj_err_msg(L, LJ_ERR_STROV);
|
|
131
|
+
g = G(L);
|
|
132
|
+
/* Compute string hash. Constants taken from lookup3 hash by Bob Jenkins. */
|
|
133
|
+
if (len >= 4) { /* Caveat: unaligned access! */
|
|
134
|
+
a = lj_getu32(str);
|
|
135
|
+
h ^= lj_getu32(str+len-4);
|
|
136
|
+
b = lj_getu32(str+(len>>1)-2);
|
|
137
|
+
h ^= b; h -= lj_rol(b, 14);
|
|
138
|
+
b += lj_getu32(str+(len>>2)-1);
|
|
139
|
+
} else if (len > 0) {
|
|
140
|
+
a = *(const uint8_t *)str;
|
|
141
|
+
h ^= *(const uint8_t *)(str+len-1);
|
|
142
|
+
b = *(const uint8_t *)(str+(len>>1));
|
|
143
|
+
h ^= b; h -= lj_rol(b, 14);
|
|
144
|
+
} else {
|
|
145
|
+
return &g->strempty;
|
|
146
|
+
}
|
|
147
|
+
a ^= h; a -= lj_rol(h, 11);
|
|
148
|
+
b ^= a; b -= lj_rol(a, 25);
|
|
149
|
+
h ^= b; h -= lj_rol(b, 16);
|
|
150
|
+
/* Check if the string has already been interned. */
|
|
151
|
+
o = gcref(g->strhash[h & g->strmask]);
|
|
152
|
+
if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
|
|
153
|
+
while (o != NULL) {
|
|
154
|
+
GCstr *sx = gco2str(o);
|
|
155
|
+
if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) {
|
|
156
|
+
/* Resurrect if dead. Can only happen with fixstring() (keywords). */
|
|
157
|
+
if (isdead(g, o)) flipwhite(o);
|
|
158
|
+
return sx; /* Return existing string. */
|
|
159
|
+
}
|
|
160
|
+
o = gcnext(o);
|
|
161
|
+
}
|
|
162
|
+
} else { /* Slow path: end of string is too close to a page boundary. */
|
|
163
|
+
while (o != NULL) {
|
|
164
|
+
GCstr *sx = gco2str(o);
|
|
165
|
+
if (sx->len == len && memcmp(str, strdata(sx), len) == 0) {
|
|
166
|
+
/* Resurrect if dead. Can only happen with fixstring() (keywords). */
|
|
167
|
+
if (isdead(g, o)) flipwhite(o);
|
|
168
|
+
return sx; /* Return existing string. */
|
|
169
|
+
}
|
|
170
|
+
o = gcnext(o);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/* Nope, create a new string. */
|
|
174
|
+
s = lj_mem_newt(L, sizeof(GCstr)+len+1, GCstr);
|
|
175
|
+
newwhite(g, s);
|
|
176
|
+
s->gct = ~LJ_TSTR;
|
|
177
|
+
s->len = len;
|
|
178
|
+
s->hash = h;
|
|
179
|
+
s->reserved = 0;
|
|
180
|
+
memcpy(strdatawr(s), str, len);
|
|
181
|
+
strdatawr(s)[len] = '\0'; /* Zero-terminate string. */
|
|
182
|
+
/* Add it to string hash table. */
|
|
183
|
+
h &= g->strmask;
|
|
184
|
+
s->nextgc = g->strhash[h];
|
|
185
|
+
/* NOBARRIER: The string table is a GC root. */
|
|
186
|
+
setgcref(g->strhash[h], obj2gco(s));
|
|
187
|
+
if (g->strnum++ > g->strmask) /* Allow a 100% load factor. */
|
|
188
|
+
lj_str_resize(L, (g->strmask<<1)+1); /* Grow string table. */
|
|
189
|
+
return s; /* Return newly interned string. */
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s)
|
|
193
|
+
{
|
|
194
|
+
g->strnum--;
|
|
195
|
+
lj_mem_free(g, s, sizestring(s));
|
|
196
|
+
}
|
|
197
|
+
|