immunio 1.2.1 → 2.0.2
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/README.md +13 -5
- data/ext/immunio/Rakefile +14 -6
- data/lib/immunio/context.rb +2 -0
- data/lib/immunio/plugins/action_view.rb +7 -668
- data/lib/immunio/plugins/action_view/action_view.rb +22 -0
- data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
- data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
- data/lib/immunio/plugins/action_view/erubi.rb +38 -0
- data/lib/immunio/plugins/action_view/erubis.rb +39 -0
- data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
- data/lib/immunio/plugins/action_view/haml.rb +46 -0
- data/lib/immunio/plugins/action_view/slim.rb +42 -0
- data/lib/immunio/plugins/action_view/template.rb +431 -0
- data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
- data/lib/immunio/plugins/http_tracker.rb +2 -0
- data/lib/immunio/plugins/io.rb +34 -0
- data/lib/immunio/version.rb +1 -1
- data/lua-hooks/Makefile +36 -9
- data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
- data/lua-hooks/ext/luajit/Makefile +22 -15
- data/lua-hooks/ext/luajit/README +2 -2
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
- data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
- data/lua-hooks/ext/luajit/doc/changes.html +69 -3
- data/lua-hooks/ext/luajit/doc/contact.html +10 -3
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
- data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
- data/lua-hooks/ext/luajit/doc/faq.html +2 -2
- data/lua-hooks/ext/luajit/doc/install.html +74 -45
- data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
- data/lua-hooks/ext/luajit/doc/running.html +3 -3
- data/lua-hooks/ext/luajit/doc/status.html +13 -8
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
- data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
- data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
- data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
- data/lua-hooks/ext/luajit/src/Makefile +15 -11
- data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
- data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
- data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
- data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
- data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
- data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
- data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
- data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
- data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
- data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
- data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
- data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
- data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
- data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
- data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
- data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
- data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
- data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
- data/lua-hooks/ext/luajit/src/lj.supp +3 -3
- data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
- data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
- data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
- data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
- data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
- data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
- data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
- data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
- data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
- data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
- data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
- data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
- data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
- data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
- data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
- data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
- data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
- data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
- data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
- data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
- data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
- data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
- data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
- data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
- data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
- data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
- data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
- data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
- data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
- data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
- data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
- data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
- data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
- data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
- data/lua-hooks/ext/luajit/src/lua.h +9 -1
- data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
- data/lua-hooks/ext/luajit/src/luajit.c +69 -54
- data/lua-hooks/ext/luajit/src/luajit.h +4 -4
- data/lua-hooks/ext/luajit/src/lualib.h +1 -1
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
- data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
- data/lua-hooks/libluahooks.darwin.a +0 -0
- data/lua-hooks/libluahooks.linux.a +0 -0
- data/lua-hooks/options.mk +1 -1
- metadata +37 -77
- data/lua-hooks/ext/all.c +0 -69
- data/lua-hooks/ext/libinjection/COPYING +0 -37
- data/lua-hooks/ext/libinjection/libinjection.h +0 -65
- data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
- data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
- data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
- data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
- data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
- data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
- data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
- data/lua-hooks/ext/libinjection/lualib.c +0 -145
- data/lua-hooks/ext/libinjection/module.mk +0 -5
- data/lua-hooks/ext/lpeg/HISTORY +0 -96
- data/lua-hooks/ext/lpeg/lpcap.c +0 -537
- data/lua-hooks/ext/lpeg/lpcap.h +0 -56
- data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
- data/lua-hooks/ext/lpeg/lpcode.h +0 -40
- data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
- data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
- data/lua-hooks/ext/lpeg/lpprint.c +0 -244
- data/lua-hooks/ext/lpeg/lpprint.h +0 -36
- data/lua-hooks/ext/lpeg/lptree.c +0 -1303
- data/lua-hooks/ext/lpeg/lptree.h +0 -82
- data/lua-hooks/ext/lpeg/lptypes.h +0 -149
- data/lua-hooks/ext/lpeg/lpvm.c +0 -364
- data/lua-hooks/ext/lpeg/lpvm.h +0 -58
- data/lua-hooks/ext/lpeg/makefile +0 -55
- data/lua-hooks/ext/lpeg/module.mk +0 -6
- data/lua-hooks/ext/lpeg/re.html +0 -498
- data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
- data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
- data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
- data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
- data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
- data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
- data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
- data/lua-hooks/ext/lua-snapshot/README.md +0 -18
- data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
- data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
- data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
- data/lua-hooks/ext/luautf8/README.md +0 -152
- data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
- data/lua-hooks/ext/luautf8/module.mk +0 -2
- data/lua-hooks/ext/luautf8/unidata.h +0 -3064
- data/lua-hooks/ext/module.mk +0 -15
- data/lua-hooks/ext/modules.h +0 -17
- data/lua-hooks/ext/perf/luacpu.c +0 -114
- data/lua-hooks/ext/perf/lualoadavg.c +0 -40
- data/lua-hooks/ext/perf/luameminfo.c +0 -38
- data/lua-hooks/ext/perf/luaoslib.c +0 -203
- data/lua-hooks/ext/perf/module.mk +0 -5
- data/lua-hooks/ext/sha1/luasha1.c +0 -74
- data/lua-hooks/ext/sha1/module.mk +0 -5
- data/lua-hooks/ext/sha1/sha1.c +0 -145
- data/lua-hooks/ext/sha2/luasha256.c +0 -77
- data/lua-hooks/ext/sha2/module.mk +0 -5
- data/lua-hooks/ext/sha2/sha256.c +0 -196
- data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
- data/lua-hooks/ext/sysutils/module.mk +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Auxiliary library for the Lua/C API.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major parts taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -107,38 +107,36 @@ LUALIB_API const char *luaL_findtable(lua_State *L, int idx,
|
|
|
107
107
|
static int libsize(const luaL_Reg *l)
|
|
108
108
|
{
|
|
109
109
|
int size = 0;
|
|
110
|
-
for (; l->name; l++) size++;
|
|
110
|
+
for (; l && l->name; l++) size++;
|
|
111
111
|
return size;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
+
LUALIB_API void luaL_pushmodule(lua_State *L, const char *modname, int sizehint)
|
|
115
|
+
{
|
|
116
|
+
luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16);
|
|
117
|
+
lua_getfield(L, -1, modname);
|
|
118
|
+
if (!lua_istable(L, -1)) {
|
|
119
|
+
lua_pop(L, 1);
|
|
120
|
+
if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, sizehint) != NULL)
|
|
121
|
+
lj_err_callerv(L, LJ_ERR_BADMODN, modname);
|
|
122
|
+
lua_pushvalue(L, -1);
|
|
123
|
+
lua_setfield(L, -3, modname); /* _LOADED[modname] = new table. */
|
|
124
|
+
}
|
|
125
|
+
lua_remove(L, -2); /* Remove _LOADED table. */
|
|
126
|
+
}
|
|
127
|
+
|
|
114
128
|
LUALIB_API void luaL_openlib(lua_State *L, const char *libname,
|
|
115
129
|
const luaL_Reg *l, int nup)
|
|
116
130
|
{
|
|
117
131
|
lj_lib_checkfpu(L);
|
|
118
132
|
if (libname) {
|
|
119
|
-
|
|
120
|
-
/*
|
|
121
|
-
luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16);
|
|
122
|
-
lua_getfield(L, -1, libname); /* get _LOADED[libname] */
|
|
123
|
-
if (!lua_istable(L, -1)) { /* not found? */
|
|
124
|
-
lua_pop(L, 1); /* remove previous result */
|
|
125
|
-
/* try global variable (and create one if it does not exist) */
|
|
126
|
-
if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, size) != NULL)
|
|
127
|
-
lj_err_callerv(L, LJ_ERR_BADMODN, libname);
|
|
128
|
-
lua_pushvalue(L, -1);
|
|
129
|
-
lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */
|
|
130
|
-
}
|
|
131
|
-
lua_remove(L, -2); /* remove _LOADED table */
|
|
132
|
-
lua_insert(L, -(nup+1)); /* move library table to below upvalues */
|
|
133
|
-
}
|
|
134
|
-
for (; l->name; l++) {
|
|
135
|
-
int i;
|
|
136
|
-
for (i = 0; i < nup; i++) /* copy upvalues to the top */
|
|
137
|
-
lua_pushvalue(L, -nup);
|
|
138
|
-
lua_pushcclosure(L, l->func, nup);
|
|
139
|
-
lua_setfield(L, -(nup+2), l->name);
|
|
133
|
+
luaL_pushmodule(L, libname, libsize(l));
|
|
134
|
+
lua_insert(L, -(nup + 1)); /* Move module table below upvalues. */
|
|
140
135
|
}
|
|
141
|
-
|
|
136
|
+
if (l)
|
|
137
|
+
luaL_setfuncs(L, l, nup);
|
|
138
|
+
else
|
|
139
|
+
lua_pop(L, nup); /* Remove upvalues. */
|
|
142
140
|
}
|
|
143
141
|
|
|
144
142
|
LUALIB_API void luaL_register(lua_State *L, const char *libname,
|
|
@@ -147,6 +145,19 @@ LUALIB_API void luaL_register(lua_State *L, const char *libname,
|
|
|
147
145
|
luaL_openlib(L, libname, l, 0);
|
|
148
146
|
}
|
|
149
147
|
|
|
148
|
+
LUALIB_API void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup)
|
|
149
|
+
{
|
|
150
|
+
luaL_checkstack(L, nup, "too many upvalues");
|
|
151
|
+
for (; l->name; l++) {
|
|
152
|
+
int i;
|
|
153
|
+
for (i = 0; i < nup; i++) /* Copy upvalues to the top. */
|
|
154
|
+
lua_pushvalue(L, -nup);
|
|
155
|
+
lua_pushcclosure(L, l->func, nup);
|
|
156
|
+
lua_setfield(L, -(nup + 2), l->name);
|
|
157
|
+
}
|
|
158
|
+
lua_pop(L, nup); /* Remove upvalues. */
|
|
159
|
+
}
|
|
160
|
+
|
|
150
161
|
LUALIB_API const char *luaL_gsub(lua_State *L, const char *s,
|
|
151
162
|
const char *p, const char *r)
|
|
152
163
|
{
|
|
@@ -302,7 +313,7 @@ static int panic(lua_State *L)
|
|
|
302
313
|
|
|
303
314
|
#ifdef LUAJIT_USE_SYSMALLOC
|
|
304
315
|
|
|
305
|
-
#if LJ_64 && !defined(LUAJIT_USE_VALGRIND)
|
|
316
|
+
#if LJ_64 && !LJ_GC64 && !defined(LUAJIT_USE_VALGRIND)
|
|
306
317
|
#error "Must use builtin allocator for 64 bit target"
|
|
307
318
|
#endif
|
|
308
319
|
|
|
@@ -334,7 +345,7 @@ LUALIB_API lua_State *luaL_newstate(void)
|
|
|
334
345
|
lua_State *L;
|
|
335
346
|
void *ud = lj_alloc_create();
|
|
336
347
|
if (ud == NULL) return NULL;
|
|
337
|
-
#if LJ_64
|
|
348
|
+
#if LJ_64 && !LJ_GC64
|
|
338
349
|
L = lj_state_newstate(lj_alloc_f, ud);
|
|
339
350
|
#else
|
|
340
351
|
L = lua_newstate(lj_alloc_f, ud);
|
|
@@ -343,7 +354,7 @@ LUALIB_API lua_State *luaL_newstate(void)
|
|
|
343
354
|
return L;
|
|
344
355
|
}
|
|
345
356
|
|
|
346
|
-
#if LJ_64
|
|
357
|
+
#if LJ_64 && !LJ_GC64
|
|
347
358
|
LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)
|
|
348
359
|
{
|
|
349
360
|
UNUSED(f); UNUSED(ud);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Base and coroutine library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
#include "lj_tab.h"
|
|
24
24
|
#include "lj_meta.h"
|
|
25
25
|
#include "lj_state.h"
|
|
26
|
+
#include "lj_frame.h"
|
|
26
27
|
#if LJ_HASFFI
|
|
27
28
|
#include "lj_ctype.h"
|
|
28
29
|
#include "lj_cconv.h"
|
|
@@ -345,7 +346,7 @@ LJLIB_ASM_(xpcall) LJLIB_REC(.)
|
|
|
345
346
|
|
|
346
347
|
static int load_aux(lua_State *L, int status, int envarg)
|
|
347
348
|
{
|
|
348
|
-
if (status ==
|
|
349
|
+
if (status == LUA_OK) {
|
|
349
350
|
if (tvistab(L->base+envarg-1)) {
|
|
350
351
|
GCfunc *fn = funcV(L->top-1);
|
|
351
352
|
GCtab *t = tabV(L->base+envarg-1);
|
|
@@ -418,7 +419,7 @@ LJLIB_CF(dofile)
|
|
|
418
419
|
GCstr *fname = lj_lib_optstr(L, 1);
|
|
419
420
|
setnilV(L->top);
|
|
420
421
|
L->top = L->base+1;
|
|
421
|
-
if (luaL_loadfile(L, fname ? strdata(fname) : NULL) !=
|
|
422
|
+
if (luaL_loadfile(L, fname ? strdata(fname) : NULL) != LUA_OK)
|
|
422
423
|
lua_error(L);
|
|
423
424
|
lua_call(L, 0, LUA_MULTRET);
|
|
424
425
|
return (int)(L->top - L->base) - 1;
|
|
@@ -536,7 +537,7 @@ LJLIB_CF(coroutine_status)
|
|
|
536
537
|
co = threadV(L->base);
|
|
537
538
|
if (co == L) s = "running";
|
|
538
539
|
else if (co->status == LUA_YIELD) s = "suspended";
|
|
539
|
-
else if (co->status !=
|
|
540
|
+
else if (co->status != LUA_OK) s = "dead";
|
|
540
541
|
else if (co->base > tvref(co->stack)+1+LJ_FR2) s = "normal";
|
|
541
542
|
else if (co->top == co->base) s = "dead";
|
|
542
543
|
else s = "suspended";
|
|
@@ -557,6 +558,12 @@ LJLIB_CF(coroutine_running)
|
|
|
557
558
|
#endif
|
|
558
559
|
}
|
|
559
560
|
|
|
561
|
+
LJLIB_CF(coroutine_isyieldable)
|
|
562
|
+
{
|
|
563
|
+
setboolV(L->top++, cframe_canyield(L->cframe));
|
|
564
|
+
return 1;
|
|
565
|
+
}
|
|
566
|
+
|
|
560
567
|
LJLIB_CF(coroutine_create)
|
|
561
568
|
{
|
|
562
569
|
lua_State *L1;
|
|
@@ -576,7 +583,7 @@ LJLIB_ASM(coroutine_yield)
|
|
|
576
583
|
static int ffh_resume(lua_State *L, lua_State *co, int wrap)
|
|
577
584
|
{
|
|
578
585
|
if (co->cframe != NULL || co->status > LUA_YIELD ||
|
|
579
|
-
(co->status ==
|
|
586
|
+
(co->status == LUA_OK && co->top == co->base)) {
|
|
580
587
|
ErrMsg em = co->cframe ? LJ_ERR_CORUN : LJ_ERR_CODEAD;
|
|
581
588
|
if (wrap) lj_err_caller(L, em);
|
|
582
589
|
setboolV(L->base-1-LJ_FR2, 0);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Debug library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -283,13 +283,13 @@ LJLIB_CF(debug_setuservalue)
|
|
|
283
283
|
|
|
284
284
|
/* ------------------------------------------------------------------------ */
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
#define KEY_HOOK ((void *)0x3004)
|
|
287
287
|
|
|
288
288
|
static void hookf(lua_State *L, lua_Debug *ar)
|
|
289
289
|
{
|
|
290
290
|
static const char *const hooknames[] =
|
|
291
291
|
{"call", "return", "line", "count", "tail return"};
|
|
292
|
-
lua_pushlightuserdata(L,
|
|
292
|
+
lua_pushlightuserdata(L, KEY_HOOK);
|
|
293
293
|
lua_rawget(L, LUA_REGISTRYINDEX);
|
|
294
294
|
if (lua_isfunction(L, -1)) {
|
|
295
295
|
lua_pushstring(L, hooknames[(int)ar->event]);
|
|
@@ -334,7 +334,7 @@ LJLIB_CF(debug_sethook)
|
|
|
334
334
|
count = luaL_optint(L, arg+3, 0);
|
|
335
335
|
func = hookf; mask = makemask(smask, count);
|
|
336
336
|
}
|
|
337
|
-
lua_pushlightuserdata(L,
|
|
337
|
+
lua_pushlightuserdata(L, KEY_HOOK);
|
|
338
338
|
lua_pushvalue(L, arg+1);
|
|
339
339
|
lua_rawset(L, LUA_REGISTRYINDEX);
|
|
340
340
|
lua_sethook(L, func, mask, count);
|
|
@@ -349,7 +349,7 @@ LJLIB_CF(debug_gethook)
|
|
|
349
349
|
if (hook != NULL && hook != hookf) { /* external hook? */
|
|
350
350
|
lua_pushliteral(L, "external hook");
|
|
351
351
|
} else {
|
|
352
|
-
lua_pushlightuserdata(L,
|
|
352
|
+
lua_pushlightuserdata(L, KEY_HOOK);
|
|
353
353
|
lua_rawget(L, LUA_REGISTRYINDEX); /* get hook */
|
|
354
354
|
}
|
|
355
355
|
lua_pushstring(L, unmakemask(mask, buff));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** FFI library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#define lib_ffi_c
|
|
@@ -829,7 +829,7 @@ static GCtab *ffi_finalizer(lua_State *L)
|
|
|
829
829
|
settabV(L, L->top++, t);
|
|
830
830
|
setgcref(t->metatable, obj2gco(t));
|
|
831
831
|
setstrV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "__mode")),
|
|
832
|
-
lj_str_newlit(L, "
|
|
832
|
+
lj_str_newlit(L, "k"));
|
|
833
833
|
t->nomm = (uint8_t)(~(1u<<MM_mode));
|
|
834
834
|
return t;
|
|
835
835
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Library initialization.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major parts taken verbatim from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -20,24 +20,24 @@ This file is commented to prevent duplicated symbols.
|
|
|
20
20
|
#include "lj_arch.h"
|
|
21
21
|
|
|
22
22
|
static const luaL_Reg lj_lib_load[] = {
|
|
23
|
-
{ "",
|
|
24
|
-
{ LUA_LOADLIBNAME,
|
|
25
|
-
{ LUA_TABLIBNAME,
|
|
26
|
-
{ LUA_IOLIBNAME,
|
|
27
|
-
{ LUA_OSLIBNAME,
|
|
28
|
-
{ LUA_STRLIBNAME,
|
|
29
|
-
{ LUA_MATHLIBNAME,
|
|
30
|
-
{ LUA_DBLIBNAME,
|
|
31
|
-
{ LUA_BITLIBNAME,
|
|
32
|
-
{ LUA_JITLIBNAME,
|
|
33
|
-
{ NULL,
|
|
23
|
+
{ "", luaopen_base },
|
|
24
|
+
{ LUA_LOADLIBNAME, luaopen_package },
|
|
25
|
+
{ LUA_TABLIBNAME, luaopen_table },
|
|
26
|
+
{ LUA_IOLIBNAME, luaopen_io },
|
|
27
|
+
{ LUA_OSLIBNAME, luaopen_os },
|
|
28
|
+
{ LUA_STRLIBNAME, luaopen_string },
|
|
29
|
+
{ LUA_MATHLIBNAME, luaopen_math },
|
|
30
|
+
{ LUA_DBLIBNAME, luaopen_debug },
|
|
31
|
+
{ LUA_BITLIBNAME, luaopen_bit },
|
|
32
|
+
{ LUA_JITLIBNAME, luaopen_jit },
|
|
33
|
+
{ NULL, NULL }
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
static const luaL_Reg lj_lib_preload[] = {
|
|
37
37
|
#if LJ_HASFFI
|
|
38
|
-
{ LUA_FFILIBNAME,
|
|
38
|
+
{ LUA_FFILIBNAME, luaopen_ffi },
|
|
39
39
|
#endif
|
|
40
|
-
{ NULL,
|
|
40
|
+
{ NULL, NULL }
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
LUALIB_API void luaL_openlibs(lua_State *L)
|
|
@@ -49,11 +49,11 @@ LUALIB_API void luaL_openlibs(lua_State *L)
|
|
|
49
49
|
lua_call(L, 1, 0);
|
|
50
50
|
}
|
|
51
51
|
luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD",
|
|
52
|
-
|
|
52
|
+
sizeof(lj_lib_preload)/sizeof(lj_lib_preload[0])-1);
|
|
53
53
|
for (lib = lj_lib_preload; lib->func; lib++) {
|
|
54
54
|
lua_pushcfunction(L, lib->func);
|
|
55
55
|
lua_setfield(L, -2, lib->name);
|
|
56
56
|
}
|
|
57
57
|
lua_pop(L, 1);
|
|
58
58
|
}
|
|
59
|
-
*/
|
|
59
|
+
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** I/O library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -203,13 +203,12 @@ static int io_file_read(lua_State *L, FILE *fp, int start)
|
|
|
203
203
|
for (n = start; nargs-- && ok; n++) {
|
|
204
204
|
if (tvisstr(L->base+n)) {
|
|
205
205
|
const char *p = strVdata(L->base+n);
|
|
206
|
-
if (p[0]
|
|
207
|
-
|
|
208
|
-
if (p[1] == 'n')
|
|
206
|
+
if (p[0] == '*') p++;
|
|
207
|
+
if (p[0] == 'n')
|
|
209
208
|
ok = io_file_readnum(L, fp);
|
|
210
|
-
else if ((p[
|
|
211
|
-
ok = io_file_readline(L, fp, (p[
|
|
212
|
-
else if (p[
|
|
209
|
+
else if ((p[0] & ~0x20) == 'L')
|
|
210
|
+
ok = io_file_readline(L, fp, (p[0] == 'l'));
|
|
211
|
+
else if (p[0] == 'a')
|
|
213
212
|
io_file_readall(L, fp);
|
|
214
213
|
else
|
|
215
214
|
lj_err_arg(L, n+1, LJ_ERR_INVFMT);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** JIT library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#define lib_jit_c
|
|
@@ -204,6 +204,7 @@ LJLIB_CF(jit_util_funcinfo)
|
|
|
204
204
|
lua_setfield(L, -2, "source");
|
|
205
205
|
lj_debug_pushloc(L, pt, pc);
|
|
206
206
|
lua_setfield(L, -2, "loc");
|
|
207
|
+
setprotoV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "proto")), pt);
|
|
207
208
|
} else {
|
|
208
209
|
GCfunc *fn = funcV(L->base);
|
|
209
210
|
GCtab *t;
|
|
@@ -668,6 +669,11 @@ static uint32_t jit_cpudetect(lua_State *L)
|
|
|
668
669
|
if (fam >= 0x00000f00) /* K8, K10. */
|
|
669
670
|
flags |= JIT_F_PREFER_IMUL;
|
|
670
671
|
}
|
|
672
|
+
if (vendor[0] >= 7) {
|
|
673
|
+
uint32_t xfeatures[4];
|
|
674
|
+
lj_vm_cpuid(7, xfeatures);
|
|
675
|
+
flags |= ((xfeatures[1] >> 8)&1) * JIT_F_BMI2;
|
|
676
|
+
}
|
|
671
677
|
#endif
|
|
672
678
|
}
|
|
673
679
|
/* Check for required instruction set support on x86 (unnecessary on x64). */
|
|
@@ -710,15 +716,19 @@ static uint32_t jit_cpudetect(lua_State *L)
|
|
|
710
716
|
#if LJ_HASJIT
|
|
711
717
|
/* Compile-time MIPS CPU detection. */
|
|
712
718
|
#if LJ_ARCH_VERSION >= 20
|
|
713
|
-
flags |=
|
|
719
|
+
flags |= JIT_F_MIPSXXR2;
|
|
714
720
|
#endif
|
|
715
721
|
/* Runtime MIPS CPU detection. */
|
|
716
722
|
#if defined(__GNUC__)
|
|
717
|
-
if (!(flags &
|
|
723
|
+
if (!(flags & JIT_F_MIPSXXR2)) {
|
|
718
724
|
int x;
|
|
725
|
+
#ifdef __mips16
|
|
726
|
+
x = 0; /* Runtime detection is difficult. Ensure optimal -march flags. */
|
|
727
|
+
#else
|
|
719
728
|
/* On MIPS32R1 rotr is treated as srl. rotr r2,r2,1 -> srl r2,r2,1. */
|
|
720
729
|
__asm__("li $2, 1\n\t.long 0x00221042\n\tmove %0, $2" : "=r"(x) : : "$2");
|
|
721
|
-
|
|
730
|
+
#endif
|
|
731
|
+
if (x) flags |= JIT_F_MIPSXXR2; /* Either 0x80000000 (R2) or 0 (R1). */
|
|
722
732
|
}
|
|
723
733
|
#endif
|
|
724
734
|
#endif
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Math library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include <math.h>
|
|
@@ -221,10 +221,6 @@ LUALIB_API int luaopen_math(lua_State *L)
|
|
|
221
221
|
rs = (RandomState *)lua_newuserdata(L, sizeof(RandomState));
|
|
222
222
|
rs->valid = 0; /* Use lazy initialization to save some time on startup. */
|
|
223
223
|
LJ_LIB_REG(L, LUA_MATHLIBNAME, math);
|
|
224
|
-
#if defined(LUA_COMPAT_MOD) && !LJ_52
|
|
225
|
-
lua_getfield(L, -1, "fmod");
|
|
226
|
-
lua_setfield(L, -2, "mod");
|
|
227
|
-
#endif
|
|
228
224
|
return 1;
|
|
229
225
|
}
|
|
230
226
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** OS library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Package library.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2012 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|
|
@@ -193,8 +193,7 @@ static void **ll_register(lua_State *L, const char *path)
|
|
|
193
193
|
lua_pop(L, 1);
|
|
194
194
|
plib = (void **)lua_newuserdata(L, sizeof(void *));
|
|
195
195
|
*plib = NULL;
|
|
196
|
-
|
|
197
|
-
lua_setmetatable(L, -2);
|
|
196
|
+
luaL_setmetatable(L, "_LOADLIB");
|
|
198
197
|
lua_pushfstring(L, "LOADLIB: %s", path);
|
|
199
198
|
lua_pushvalue(L, -2);
|
|
200
199
|
lua_settable(L, LUA_REGISTRYINDEX);
|
|
@@ -399,8 +398,7 @@ static int lj_cf_package_loader_preload(lua_State *L)
|
|
|
399
398
|
|
|
400
399
|
/* ------------------------------------------------------------------------ */
|
|
401
400
|
|
|
402
|
-
|
|
403
|
-
#define sentinel ((void *)&sentinel_)
|
|
401
|
+
#define sentinel ((void *)0x4004)
|
|
404
402
|
|
|
405
403
|
static int lj_cf_package_require(lua_State *L)
|
|
406
404
|
{
|
|
@@ -490,29 +488,19 @@ static void modinit(lua_State *L, const char *modname)
|
|
|
490
488
|
static int lj_cf_package_module(lua_State *L)
|
|
491
489
|
{
|
|
492
490
|
const char *modname = luaL_checkstring(L, 1);
|
|
493
|
-
int
|
|
494
|
-
|
|
495
|
-
lua_getfield(L, loaded, modname); /* get _LOADED[modname] */
|
|
496
|
-
if (!lua_istable(L, -1)) { /* not found? */
|
|
497
|
-
lua_pop(L, 1); /* remove previous result */
|
|
498
|
-
/* try global variable (and create one if it does not exist) */
|
|
499
|
-
if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL)
|
|
500
|
-
lj_err_callerv(L, LJ_ERR_BADMODN, modname);
|
|
501
|
-
lua_pushvalue(L, -1);
|
|
502
|
-
lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */
|
|
503
|
-
}
|
|
504
|
-
/* check whether table already has a _NAME field */
|
|
491
|
+
int lastarg = (int)(L->top - L->base);
|
|
492
|
+
luaL_pushmodule(L, modname, 1);
|
|
505
493
|
lua_getfield(L, -1, "_NAME");
|
|
506
|
-
if (!lua_isnil(L, -1)) { /*
|
|
494
|
+
if (!lua_isnil(L, -1)) { /* Module already initialized? */
|
|
507
495
|
lua_pop(L, 1);
|
|
508
|
-
} else {
|
|
496
|
+
} else {
|
|
509
497
|
lua_pop(L, 1);
|
|
510
498
|
modinit(L, modname);
|
|
511
499
|
}
|
|
512
500
|
lua_pushvalue(L, -1);
|
|
513
501
|
setfenv(L);
|
|
514
|
-
dooptions(L,
|
|
515
|
-
return
|
|
502
|
+
dooptions(L, lastarg);
|
|
503
|
+
return LJ_52;
|
|
516
504
|
}
|
|
517
505
|
|
|
518
506
|
static int lj_cf_package_seeall(lua_State *L)
|
|
@@ -583,13 +571,16 @@ LUALIB_API int luaopen_package(lua_State *L)
|
|
|
583
571
|
lj_lib_pushcf(L, lj_cf_package_unloadlib, 1);
|
|
584
572
|
lua_setfield(L, -2, "__gc");
|
|
585
573
|
luaL_register(L, LUA_LOADLIBNAME, package_lib);
|
|
586
|
-
|
|
587
|
-
lua_replace(L, LUA_ENVIRONINDEX);
|
|
574
|
+
lua_copy(L, -1, LUA_ENVIRONINDEX);
|
|
588
575
|
lua_createtable(L, sizeof(package_loaders)/sizeof(package_loaders[0])-1, 0);
|
|
589
576
|
for (i = 0; package_loaders[i] != NULL; i++) {
|
|
590
577
|
lj_lib_pushcf(L, package_loaders[i], 1);
|
|
591
578
|
lua_rawseti(L, -2, i+1);
|
|
592
579
|
}
|
|
580
|
+
#if LJ_52
|
|
581
|
+
lua_pushvalue(L, -1);
|
|
582
|
+
lua_setfield(L, -3, "searchers");
|
|
583
|
+
#endif
|
|
593
584
|
lua_setfield(L, -2, "loaders");
|
|
594
585
|
lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV");
|
|
595
586
|
noenv = lua_toboolean(L, -1);
|