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
|
** C type conversions.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include "lj_obj.h"
|
|
@@ -448,8 +448,10 @@ int lj_cconv_tv_bf(CTState *cts, CType *s, TValue *o, uint8_t *sp)
|
|
|
448
448
|
setintV(o, (int32_t)val);
|
|
449
449
|
}
|
|
450
450
|
} else {
|
|
451
|
+
uint32_t b = (val >> pos) & 1;
|
|
451
452
|
lua_assert(bsz == 1);
|
|
452
|
-
setboolV(o,
|
|
453
|
+
setboolV(o, b);
|
|
454
|
+
setboolV(&cts->g->tmptv2, b); /* Remember for trace recorder. */
|
|
453
455
|
}
|
|
454
456
|
return 0; /* No GC step needed. */
|
|
455
457
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** C data management.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include "lj_obj.h"
|
|
@@ -93,11 +93,13 @@ void lj_cdata_setfin(lua_State *L, GCcdata *cd, GCobj *obj, uint32_t it)
|
|
|
93
93
|
setcdataV(L, &tmp, cd);
|
|
94
94
|
lj_gc_anybarriert(L, t);
|
|
95
95
|
tv = lj_tab_set(L, t, &tmp);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
cd->marked |= LJ_GC_CDATA_FIN;
|
|
99
|
-
else
|
|
96
|
+
if (it == LJ_TNIL) {
|
|
97
|
+
setnilV(tv);
|
|
100
98
|
cd->marked &= ~LJ_GC_CDATA_FIN;
|
|
99
|
+
} else {
|
|
100
|
+
setgcV(L, tv, obj, it);
|
|
101
|
+
cd->marked |= LJ_GC_CDATA_FIN;
|
|
102
|
+
}
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** FFI C library loader.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include "lj_obj.h"
|
|
@@ -40,7 +40,7 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
|
40
40
|
|
|
41
41
|
#define clib_error(L, fmt, name) clib_error_(L)
|
|
42
42
|
|
|
43
|
-
#if
|
|
43
|
+
#if LJ_TARGET_CYGWIN
|
|
44
44
|
#define CLIB_SOPREFIX "cyg"
|
|
45
45
|
#else
|
|
46
46
|
#define CLIB_SOPREFIX "lib"
|
|
@@ -48,7 +48,7 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
|
48
48
|
|
|
49
49
|
#if LJ_TARGET_OSX
|
|
50
50
|
#define CLIB_SOEXT "%s.dylib"
|
|
51
|
-
#elif
|
|
51
|
+
#elif LJ_TARGET_CYGWIN
|
|
52
52
|
#define CLIB_SOEXT "%s.dll"
|
|
53
53
|
#else
|
|
54
54
|
#define CLIB_SOEXT "%s.so"
|
|
@@ -57,14 +57,14 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L)
|
|
|
57
57
|
static const char *clib_extname(lua_State *L, const char *name)
|
|
58
58
|
{
|
|
59
59
|
if (!strchr(name, '/')
|
|
60
|
-
#
|
|
60
|
+
#if LJ_TARGET_CYGWIN
|
|
61
61
|
&& !strchr(name, '\\')
|
|
62
62
|
#endif
|
|
63
63
|
) {
|
|
64
64
|
if (!strchr(name, '.')) {
|
|
65
65
|
name = lj_strfmt_pushf(L, CLIB_SOEXT, name);
|
|
66
66
|
L->top--;
|
|
67
|
-
#
|
|
67
|
+
#if LJ_TARGET_CYGWIN
|
|
68
68
|
} else {
|
|
69
69
|
return name;
|
|
70
70
|
#endif
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** C declaration parser.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#include "lj_obj.h"
|
|
@@ -297,13 +297,17 @@ static CPToken cp_next_(CPState *cp)
|
|
|
297
297
|
else return '/';
|
|
298
298
|
break;
|
|
299
299
|
case '|':
|
|
300
|
-
if (cp_get(cp) != '|') return '|';
|
|
300
|
+
if (cp_get(cp) != '|') return '|';
|
|
301
|
+
cp_get(cp); return CTOK_OROR;
|
|
301
302
|
case '&':
|
|
302
|
-
if (cp_get(cp) != '&') return '&';
|
|
303
|
+
if (cp_get(cp) != '&') return '&';
|
|
304
|
+
cp_get(cp); return CTOK_ANDAND;
|
|
303
305
|
case '=':
|
|
304
|
-
if (cp_get(cp) != '=') return '=';
|
|
306
|
+
if (cp_get(cp) != '=') return '=';
|
|
307
|
+
cp_get(cp); return CTOK_EQ;
|
|
305
308
|
case '!':
|
|
306
|
-
if (cp_get(cp) != '=') return '!';
|
|
309
|
+
if (cp_get(cp) != '=') return '!';
|
|
310
|
+
cp_get(cp); return CTOK_NE;
|
|
307
311
|
case '<':
|
|
308
312
|
if (cp_get(cp) == '=') { cp_get(cp); return CTOK_LE; }
|
|
309
313
|
else if (cp->c == '<') { cp_get(cp); return CTOK_SHL; }
|
|
@@ -313,7 +317,8 @@ static CPToken cp_next_(CPState *cp)
|
|
|
313
317
|
else if (cp->c == '>') { cp_get(cp); return CTOK_SHR; }
|
|
314
318
|
return '>';
|
|
315
319
|
case '-':
|
|
316
|
-
if (cp_get(cp) != '>') return '-';
|
|
320
|
+
if (cp_get(cp) != '>') return '-';
|
|
321
|
+
cp_get(cp); return CTOK_DEREF;
|
|
317
322
|
case '$':
|
|
318
323
|
return cp_param(cp);
|
|
319
324
|
case '\0': return CTOK_EOF;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Trace recorder for C data operations.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#define lj_ffrecord_c
|
|
@@ -712,6 +712,19 @@ static TRef crec_reassoc_ofs(jit_State *J, TRef tr, ptrdiff_t *ofsp, MSize sz)
|
|
|
712
712
|
return tr;
|
|
713
713
|
}
|
|
714
714
|
|
|
715
|
+
/* Tailcall to function. */
|
|
716
|
+
static void crec_tailcall(jit_State *J, RecordFFData *rd, cTValue *tv)
|
|
717
|
+
{
|
|
718
|
+
TRef kfunc = lj_ir_kfunc(J, funcV(tv));
|
|
719
|
+
#if LJ_FR2
|
|
720
|
+
J->base[-2] = kfunc;
|
|
721
|
+
J->base[-1] = TREF_FRAME;
|
|
722
|
+
#else
|
|
723
|
+
J->base[-1] = kfunc | TREF_FRAME;
|
|
724
|
+
#endif
|
|
725
|
+
rd->nres = -1; /* Pending tailcall. */
|
|
726
|
+
}
|
|
727
|
+
|
|
715
728
|
/* Record ctype __index/__newindex metamethods. */
|
|
716
729
|
static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
|
717
730
|
RecordFFData *rd)
|
|
@@ -721,8 +734,7 @@ static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
|
|
721
734
|
if (!tv)
|
|
722
735
|
lj_trace_err(J, LJ_TRERR_BADTYPE);
|
|
723
736
|
if (tvisfunc(tv)) {
|
|
724
|
-
|
|
725
|
-
rd->nres = -1; /* Pending tailcall. */
|
|
737
|
+
crec_tailcall(J, rd, tv);
|
|
726
738
|
} else if (rd->data == 0 && tvistab(tv) && tref_isstr(J->base[1])) {
|
|
727
739
|
/* Specialize to result of __index lookup. */
|
|
728
740
|
cTValue *o = lj_tab_get(J->L, tabV(tv), &rd->argv[1]);
|
|
@@ -739,6 +751,48 @@ static void crec_index_meta(jit_State *J, CTState *cts, CType *ct,
|
|
|
739
751
|
}
|
|
740
752
|
}
|
|
741
753
|
|
|
754
|
+
/* Record bitfield load/store. */
|
|
755
|
+
static void crec_index_bf(jit_State *J, RecordFFData *rd, TRef ptr, CTInfo info)
|
|
756
|
+
{
|
|
757
|
+
IRType t = IRT_I8 + 2*lj_fls(ctype_bitcsz(info)) + ((info&CTF_UNSIGNED)?1:0);
|
|
758
|
+
TRef tr = emitir(IRT(IR_XLOAD, t), ptr, 0);
|
|
759
|
+
CTSize pos = ctype_bitpos(info), bsz = ctype_bitbsz(info), shift = 32 - bsz;
|
|
760
|
+
lua_assert(t <= IRT_U32); /* NYI: 64 bit bitfields. */
|
|
761
|
+
if (rd->data == 0) { /* __index metamethod. */
|
|
762
|
+
if ((info & CTF_BOOL)) {
|
|
763
|
+
tr = emitir(IRTI(IR_BAND), tr, lj_ir_kint(J, (int32_t)((1u << pos))));
|
|
764
|
+
/* Assume not equal to zero. Fixup and emit pending guard later. */
|
|
765
|
+
lj_ir_set(J, IRTGI(IR_NE), tr, lj_ir_kint(J, 0));
|
|
766
|
+
J->postproc = LJ_POST_FIXGUARD;
|
|
767
|
+
tr = TREF_TRUE;
|
|
768
|
+
} else if (!(info & CTF_UNSIGNED)) {
|
|
769
|
+
tr = emitir(IRTI(IR_BSHL), tr, lj_ir_kint(J, shift - pos));
|
|
770
|
+
tr = emitir(IRTI(IR_BSAR), tr, lj_ir_kint(J, shift));
|
|
771
|
+
} else {
|
|
772
|
+
lua_assert(bsz < 32); /* Full-size fields cannot end up here. */
|
|
773
|
+
tr = emitir(IRTI(IR_BSHR), tr, lj_ir_kint(J, pos));
|
|
774
|
+
tr = emitir(IRTI(IR_BAND), tr, lj_ir_kint(J, (int32_t)((1u << bsz)-1)));
|
|
775
|
+
/* We can omit the U32 to NUM conversion, since bsz < 32. */
|
|
776
|
+
}
|
|
777
|
+
J->base[0] = tr;
|
|
778
|
+
} else { /* __newindex metamethod. */
|
|
779
|
+
CTState *cts = ctype_ctsG(J2G(J));
|
|
780
|
+
CType *ct = ctype_get(cts,
|
|
781
|
+
(info & CTF_BOOL) ? CTID_BOOL :
|
|
782
|
+
(info & CTF_UNSIGNED) ? CTID_UINT32 : CTID_INT32);
|
|
783
|
+
int32_t mask = (int32_t)(((1u << bsz)-1) << pos);
|
|
784
|
+
TRef sp = crec_ct_tv(J, ct, 0, J->base[2], &rd->argv[2]);
|
|
785
|
+
sp = emitir(IRTI(IR_BSHL), sp, lj_ir_kint(J, pos));
|
|
786
|
+
/* Use of the target type avoids forwarding conversions. */
|
|
787
|
+
sp = emitir(IRT(IR_BAND, t), sp, lj_ir_kint(J, mask));
|
|
788
|
+
tr = emitir(IRT(IR_BAND, t), tr, lj_ir_kint(J, (int32_t)~mask));
|
|
789
|
+
tr = emitir(IRT(IR_BOR, t), tr, sp);
|
|
790
|
+
emitir(IRT(IR_XSTORE, t), ptr, tr);
|
|
791
|
+
rd->nres = 0;
|
|
792
|
+
J->needsnap = 1;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
|
|
742
796
|
void LJ_FASTCALL recff_cdata_index(jit_State *J, RecordFFData *rd)
|
|
743
797
|
{
|
|
744
798
|
TRef idx, ptr = J->base[0];
|
|
@@ -813,6 +867,7 @@ again:
|
|
|
813
867
|
CType *fct;
|
|
814
868
|
fct = lj_ctype_getfield(cts, ct, name, &fofs);
|
|
815
869
|
if (fct) {
|
|
870
|
+
ofs += (ptrdiff_t)fofs;
|
|
816
871
|
/* Always specialize to the field name. */
|
|
817
872
|
emitir(IRTG(IR_EQ, IRT_STR), idx, lj_ir_kstr(J, name));
|
|
818
873
|
if (ctype_isconstval(fct->info)) {
|
|
@@ -824,12 +879,14 @@ again:
|
|
|
824
879
|
J->base[0] = lj_ir_kint(J, (int32_t)fct->size);
|
|
825
880
|
return; /* Interpreter will throw for newindex. */
|
|
826
881
|
} else if (ctype_isbitfield(fct->info)) {
|
|
827
|
-
|
|
882
|
+
if (ofs)
|
|
883
|
+
ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs));
|
|
884
|
+
crec_index_bf(J, rd, ptr, fct->info);
|
|
885
|
+
return;
|
|
828
886
|
} else {
|
|
829
887
|
lua_assert(ctype_isfield(fct->info));
|
|
830
888
|
sid = ctype_cid(fct->info);
|
|
831
889
|
}
|
|
832
|
-
ofs += (ptrdiff_t)fofs;
|
|
833
890
|
}
|
|
834
891
|
} else if (ctype_iscomplex(ct->info)) {
|
|
835
892
|
if (name->len == 2 &&
|
|
@@ -1119,20 +1176,20 @@ static void crec_snap_caller(jit_State *J)
|
|
|
1119
1176
|
lua_State *L = J->L;
|
|
1120
1177
|
TValue *base = L->base, *top = L->top;
|
|
1121
1178
|
const BCIns *pc = J->pc;
|
|
1122
|
-
TRef ftr = J->base[-1];
|
|
1179
|
+
TRef ftr = J->base[-1-LJ_FR2];
|
|
1123
1180
|
ptrdiff_t delta;
|
|
1124
1181
|
if (!frame_islua(base-1) || J->framedepth <= 0)
|
|
1125
1182
|
lj_trace_err(J, LJ_TRERR_NYICALL);
|
|
1126
1183
|
J->pc = frame_pc(base-1); delta = 1+LJ_FR2+bc_a(J->pc[-1]);
|
|
1127
1184
|
L->top = base; L->base = base - delta;
|
|
1128
|
-
J->base[-1] = TREF_FALSE;
|
|
1185
|
+
J->base[-1-LJ_FR2] = TREF_FALSE;
|
|
1129
1186
|
J->base -= delta; J->baseslot -= (BCReg)delta;
|
|
1130
|
-
J->maxslot = (BCReg)delta; J->framedepth--;
|
|
1187
|
+
J->maxslot = (BCReg)delta-LJ_FR2; J->framedepth--;
|
|
1131
1188
|
lj_snap_add(J);
|
|
1132
1189
|
L->base = base; L->top = top;
|
|
1133
1190
|
J->framedepth++; J->maxslot = 1;
|
|
1134
1191
|
J->base += delta; J->baseslot += (BCReg)delta;
|
|
1135
|
-
J->base[-1] = ftr; J->pc = pc;
|
|
1192
|
+
J->base[-1-LJ_FR2] = ftr; J->pc = pc;
|
|
1136
1193
|
}
|
|
1137
1194
|
|
|
1138
1195
|
/* Record function call. */
|
|
@@ -1224,8 +1281,7 @@ void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd)
|
|
|
1224
1281
|
tv = lj_ctype_meta(cts, ctype_isptr(ct->info) ? ctype_cid(ct->info) : id, mm);
|
|
1225
1282
|
if (tv) {
|
|
1226
1283
|
if (tvisfunc(tv)) {
|
|
1227
|
-
|
|
1228
|
-
rd->nres = -1; /* Pending tailcall. */
|
|
1284
|
+
crec_tailcall(J, rd, tv);
|
|
1229
1285
|
return;
|
|
1230
1286
|
}
|
|
1231
1287
|
} else if (mm == MM_new) {
|
|
@@ -1238,7 +1294,7 @@ void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd)
|
|
|
1238
1294
|
|
|
1239
1295
|
static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm)
|
|
1240
1296
|
{
|
|
1241
|
-
if (ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) {
|
|
1297
|
+
if (sp[0] && sp[1] && ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) {
|
|
1242
1298
|
IRType dt;
|
|
1243
1299
|
CTypeID id;
|
|
1244
1300
|
TRef tr;
|
|
@@ -1296,6 +1352,7 @@ static TRef crec_arith_ptr(jit_State *J, TRef *sp, CType **s, MMS mm)
|
|
|
1296
1352
|
{
|
|
1297
1353
|
CTState *cts = ctype_ctsG(J2G(J));
|
|
1298
1354
|
CType *ctp = s[0];
|
|
1355
|
+
if (!(sp[0] && sp[1])) return 0;
|
|
1299
1356
|
if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) {
|
|
1300
1357
|
if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) &&
|
|
1301
1358
|
(ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) {
|
|
@@ -1373,8 +1430,7 @@ static TRef crec_arith_meta(jit_State *J, TRef *sp, CType **s, CTState *cts,
|
|
|
1373
1430
|
}
|
|
1374
1431
|
if (tv) {
|
|
1375
1432
|
if (tvisfunc(tv)) {
|
|
1376
|
-
|
|
1377
|
-
rd->nres = -1; /* Pending tailcall. */
|
|
1433
|
+
crec_tailcall(J, rd, tv);
|
|
1378
1434
|
return 0;
|
|
1379
1435
|
} /* NYI: non-function metamethods. */
|
|
1380
1436
|
} else if ((MMS)rd->data == MM_eq) { /* Fallback cdata pointer comparison. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** C type management.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_CTYPE_H
|
|
@@ -42,18 +42,18 @@ LJ_STATIC_ASSERT(((int)CT_STRUCT & (int)CT_ARRAY) == CT_STRUCT);
|
|
|
42
42
|
** ---------- info ------------
|
|
43
43
|
** |type flags... A cid | size | sib | next | name |
|
|
44
44
|
** +----------------------------+--------+-------+-------+-------+--
|
|
45
|
-
** |NUM
|
|
46
|
-
** |STRUCT ..
|
|
47
|
-
** |PTR ..
|
|
48
|
-
** |ARRAY
|
|
49
|
-
** |VOID ..
|
|
45
|
+
** |NUM BFcvUL.. A | size | | type | |
|
|
46
|
+
** |STRUCT ..cvU..V A | size | field | name? | name? |
|
|
47
|
+
** |PTR ..cvR... A cid | size | | type | |
|
|
48
|
+
** |ARRAY VCcv...V A cid | size | | type | |
|
|
49
|
+
** |VOID ..cv.... A | size | | type | |
|
|
50
50
|
** |ENUM A cid | size | const | name? | name? |
|
|
51
51
|
** |FUNC ....VS.. cc cid | nargs | field | name? | name? |
|
|
52
52
|
** |TYPEDEF cid | | | name | name |
|
|
53
53
|
** |ATTRIB attrnum cid | attr | sib? | type? | |
|
|
54
54
|
** |FIELD cid | offset | field | | name? |
|
|
55
|
-
** |BITFIELD B.
|
|
56
|
-
** |CONSTVAL
|
|
55
|
+
** |BITFIELD B.cvU csz bsz pos | offset | field | | name? |
|
|
56
|
+
** |CONSTVAL c cid | value | const | name | name |
|
|
57
57
|
** |EXTERN cid | | sib? | name | name |
|
|
58
58
|
** |KW tok | size | | name | name |
|
|
59
59
|
** +----------------------------+--------+-------+-------+-------+--
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** LuaJIT common internal definitions.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_DEF_H
|
|
@@ -95,6 +95,9 @@ typedef unsigned int uintptr_t;
|
|
|
95
95
|
#define U64x(hi, lo) (((uint64_t)0x##hi << 32) + (uint64_t)0x##lo)
|
|
96
96
|
#define i32ptr(p) ((int32_t)(intptr_t)(void *)(p))
|
|
97
97
|
#define u32ptr(p) ((uint32_t)(intptr_t)(void *)(p))
|
|
98
|
+
#define i64ptr(p) ((int64_t)(intptr_t)(void *)(p))
|
|
99
|
+
#define u64ptr(p) ((uint64_t)(intptr_t)(void *)(p))
|
|
100
|
+
#define igcptr(p) (LJ_GC64 ? i64ptr(p) : i32ptr(p))
|
|
98
101
|
|
|
99
102
|
#define checki8(x) ((x) == (int32_t)(int8_t)(x))
|
|
100
103
|
#define checku8(x) ((x) == (int32_t)(uint8_t)(x))
|
|
@@ -103,14 +106,8 @@ typedef unsigned int uintptr_t;
|
|
|
103
106
|
#define checki32(x) ((x) == (int32_t)(x))
|
|
104
107
|
#define checku32(x) ((x) == (uint32_t)(x))
|
|
105
108
|
#define checkptr32(x) ((uintptr_t)(x) == (uint32_t)(uintptr_t)(x))
|
|
106
|
-
#define checkptr47(x) (((uint64_t)(x) >> 47) == 0)
|
|
107
|
-
#
|
|
108
|
-
#define checkptrGC(x) (checkptr47((x)))
|
|
109
|
-
#elif LJ_64
|
|
110
|
-
#define checkptrGC(x) (checkptr32((x)))
|
|
111
|
-
#else
|
|
112
|
-
#define checkptrGC(x) 1
|
|
113
|
-
#endif
|
|
109
|
+
#define checkptr47(x) (((uint64_t)(uintptr_t)(x) >> 47) == 0)
|
|
110
|
+
#define checkptrGC(x) (LJ_GC64 ? checkptr47((x)) : LJ_64 ? checkptr32((x)) :1)
|
|
114
111
|
|
|
115
112
|
/* Every half-decent C compiler transforms this into a rotate instruction. */
|
|
116
113
|
#define lj_rol(x, n) (((x)<<(n)) | ((x)>>(-(int)(n)&(8*sizeof(x)-1))))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Instruction dispatch handling.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#define lj_dispatch_c
|
|
@@ -75,7 +75,7 @@ void lj_dispatch_init(GG_State *GG)
|
|
|
75
75
|
for (i = 0; i < GG_NUM_ASMFF; i++)
|
|
76
76
|
GG->bcff[i] = BCINS_AD(BC__MAX+i, 0, 0);
|
|
77
77
|
#if LJ_TARGET_MIPS
|
|
78
|
-
memcpy(GG->got, dispatch_got, LJ_GOT__MAX*
|
|
78
|
+
memcpy(GG->got, dispatch_got, LJ_GOT__MAX*sizeof(ASMFunction *));
|
|
79
79
|
#endif
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -267,7 +267,7 @@ int luaJIT_setmode(lua_State *L, int idx, int mode)
|
|
|
267
267
|
case LUAJIT_MODE_FUNC:
|
|
268
268
|
case LUAJIT_MODE_ALLFUNC:
|
|
269
269
|
case LUAJIT_MODE_ALLSUBFUNC: {
|
|
270
|
-
cTValue *tv = idx == 0 ? frame_prev(L->base-1) :
|
|
270
|
+
cTValue *tv = idx == 0 ? frame_prev(L->base-1)-LJ_FR2 :
|
|
271
271
|
idx > 0 ? L->base + (idx-1) : L->top + idx;
|
|
272
272
|
GCproto *pt;
|
|
273
273
|
if ((idx == 0 || tvisfunc(tv)) && isluafunc(&gcval(tv)->fn))
|