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
data/lua-hooks/ext/lpeg/lptree.h
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
** $Id: lptree.h,v 1.3 2016/09/13 18:07:51 roberto Exp $
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
#if !defined(lptree_h)
|
|
6
|
-
#define lptree_h
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#include "lptypes.h"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/*
|
|
13
|
-
** types of trees
|
|
14
|
-
*/
|
|
15
|
-
typedef enum TTag {
|
|
16
|
-
TChar = 0, /* 'n' = char */
|
|
17
|
-
TSet, /* the set is stored in next CHARSETSIZE bytes */
|
|
18
|
-
TAny,
|
|
19
|
-
TTrue,
|
|
20
|
-
TFalse,
|
|
21
|
-
TRep, /* 'sib1'* */
|
|
22
|
-
TSeq, /* 'sib1' 'sib2' */
|
|
23
|
-
TChoice, /* 'sib1' / 'sib2' */
|
|
24
|
-
TNot, /* !'sib1' */
|
|
25
|
-
TAnd, /* &'sib1' */
|
|
26
|
-
TCall, /* ktable[key] is rule's key; 'sib2' is rule being called */
|
|
27
|
-
TOpenCall, /* ktable[key] is rule's key */
|
|
28
|
-
TRule, /* ktable[key] is rule's key (but key == 0 for unused rules);
|
|
29
|
-
'sib1' is rule's pattern;
|
|
30
|
-
'sib2' is next rule; 'cap' is rule's sequential number */
|
|
31
|
-
TGrammar, /* 'sib1' is initial (and first) rule */
|
|
32
|
-
TBehind, /* 'sib1' is pattern, 'n' is how much to go back */
|
|
33
|
-
TCapture, /* captures: 'cap' is kind of capture (enum 'CapKind');
|
|
34
|
-
ktable[key] is Lua value associated with capture;
|
|
35
|
-
'sib1' is capture body */
|
|
36
|
-
TRunTime /* run-time capture: 'key' is Lua function;
|
|
37
|
-
'sib1' is capture body */
|
|
38
|
-
} TTag;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/*
|
|
42
|
-
** Tree trees
|
|
43
|
-
** The first child of a tree (if there is one) is immediately after
|
|
44
|
-
** the tree. A reference to a second child (ps) is its position
|
|
45
|
-
** relative to the position of the tree itself.
|
|
46
|
-
*/
|
|
47
|
-
typedef struct TTree {
|
|
48
|
-
byte tag;
|
|
49
|
-
byte cap; /* kind of capture (if it is a capture) */
|
|
50
|
-
unsigned short key; /* key in ktable for Lua data (0 if no key) */
|
|
51
|
-
union {
|
|
52
|
-
int ps; /* occasional second child */
|
|
53
|
-
int n; /* occasional counter */
|
|
54
|
-
} u;
|
|
55
|
-
} TTree;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
/*
|
|
59
|
-
** A complete pattern has its tree plus, if already compiled,
|
|
60
|
-
** its corresponding code
|
|
61
|
-
*/
|
|
62
|
-
typedef struct Pattern {
|
|
63
|
-
union Instruction *code;
|
|
64
|
-
int codesize;
|
|
65
|
-
TTree tree[1];
|
|
66
|
-
} Pattern;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/* number of children for each tree */
|
|
70
|
-
extern const byte numsiblings[];
|
|
71
|
-
|
|
72
|
-
/* access to children */
|
|
73
|
-
#define sib1(t) ((t) + 1)
|
|
74
|
-
#define sib2(t) ((t) + (t)->u.ps)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
#endif
|
|
82
|
-
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
** $Id: lptypes.h,v 1.16 2017/01/13 13:33:17 roberto Exp $
|
|
3
|
-
** LPeg - PEG pattern matching for Lua
|
|
4
|
-
** Copyright 2007-2017, Lua.org & PUC-Rio (see 'lpeg.html' for license)
|
|
5
|
-
** written by Roberto Ierusalimschy
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
#if !defined(lptypes_h)
|
|
9
|
-
#define lptypes_h
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
#if !defined(LPEG_DEBUG)
|
|
13
|
-
#define NDEBUG
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
|
-
#include <assert.h>
|
|
17
|
-
#include <limits.h>
|
|
18
|
-
|
|
19
|
-
#include "lua.h"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
#define VERSION "1.0.1"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#define PATTERN_T "lpeg-pattern"
|
|
26
|
-
#define MAXSTACKIDX "lpeg-maxstack"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/*
|
|
30
|
-
** compatibility with Lua 5.1
|
|
31
|
-
*/
|
|
32
|
-
#if (LUA_VERSION_NUM == 501)
|
|
33
|
-
|
|
34
|
-
#define lp_equal lua_equal
|
|
35
|
-
|
|
36
|
-
#define lua_getuservalue lua_getfenv
|
|
37
|
-
#define lua_setuservalue lua_setfenv
|
|
38
|
-
|
|
39
|
-
#define lua_rawlen lua_objlen
|
|
40
|
-
|
|
41
|
-
#define luaL_setfuncs(L,f,n) luaL_register(L,NULL,f)
|
|
42
|
-
#define luaL_newlib(L,f) luaL_register(L,"lpeg",f)
|
|
43
|
-
|
|
44
|
-
#endif
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
#if !defined(lp_equal)
|
|
48
|
-
#define lp_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
|
|
49
|
-
#endif
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/* default maximum size for call/backtrack stack */
|
|
53
|
-
#if !defined(MAXBACK)
|
|
54
|
-
#define MAXBACK 400
|
|
55
|
-
#endif
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
/* maximum number of rules in a grammar (limited by 'unsigned char') */
|
|
59
|
-
#if !defined(MAXRULES)
|
|
60
|
-
#define MAXRULES 250
|
|
61
|
-
#endif
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
/* initial size for capture's list */
|
|
66
|
-
#define INITCAPSIZE 32
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/* index, on Lua stack, for subject */
|
|
70
|
-
#define SUBJIDX 2
|
|
71
|
-
|
|
72
|
-
/* number of fixed arguments to 'match' (before capture arguments) */
|
|
73
|
-
#define FIXEDARGS 3
|
|
74
|
-
|
|
75
|
-
/* index, on Lua stack, for capture list */
|
|
76
|
-
#define caplistidx(ptop) ((ptop) + 2)
|
|
77
|
-
|
|
78
|
-
/* index, on Lua stack, for pattern's ktable */
|
|
79
|
-
#define ktableidx(ptop) ((ptop) + 3)
|
|
80
|
-
|
|
81
|
-
/* index, on Lua stack, for backtracking stack */
|
|
82
|
-
#define stackidx(ptop) ((ptop) + 4)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
typedef unsigned char byte;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
#define BITSPERCHAR 8
|
|
90
|
-
|
|
91
|
-
#define CHARSETSIZE ((UCHAR_MAX/BITSPERCHAR) + 1)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
typedef struct Charset {
|
|
96
|
-
byte cs[CHARSETSIZE];
|
|
97
|
-
} Charset;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
#define loopset(v,b) { int v; for (v = 0; v < CHARSETSIZE; v++) {b;} }
|
|
102
|
-
|
|
103
|
-
/* access to charset */
|
|
104
|
-
#define treebuffer(t) ((byte *)((t) + 1))
|
|
105
|
-
|
|
106
|
-
/* number of slots needed for 'n' bytes */
|
|
107
|
-
#define bytes2slots(n) (((n) - 1) / sizeof(TTree) + 1)
|
|
108
|
-
|
|
109
|
-
/* set 'b' bit in charset 'cs' */
|
|
110
|
-
#define setchar(cs,b) ((cs)[(b) >> 3] |= (1 << ((b) & 7)))
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
/*
|
|
114
|
-
** in capture instructions, 'kind' of capture and its offset are
|
|
115
|
-
** packed in field 'aux', 4 bits for each
|
|
116
|
-
*/
|
|
117
|
-
#define getkind(op) ((op)->i.aux & 0xF)
|
|
118
|
-
#define getoff(op) (((op)->i.aux >> 4) & 0xF)
|
|
119
|
-
#define joinkindoff(k,o) ((k) | ((o) << 4))
|
|
120
|
-
|
|
121
|
-
#define MAXOFF 0xF
|
|
122
|
-
#define MAXAUX 0xFF
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
/* maximum number of bytes to look behind */
|
|
126
|
-
#define MAXBEHIND MAXAUX
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
/* maximum size (in elements) for a pattern */
|
|
130
|
-
#define MAXPATTSIZE (SHRT_MAX - 10)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
/* size (in elements) for an instruction plus extra l bytes */
|
|
134
|
-
#define instsize(l) (((l) + sizeof(Instruction) - 1)/sizeof(Instruction) + 1)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
/* size (in elements) for a ISet instruction */
|
|
138
|
-
#define CHARSETINSTSIZE instsize(CHARSETSIZE)
|
|
139
|
-
|
|
140
|
-
/* size (in elements) for a IFunc instruction */
|
|
141
|
-
#define funcinstsize(p) ((p)->i.aux + 2)
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
#define testchar(st,c) (((int)(st)[((c) >> 3)] & (1 << ((c) & 7))))
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
#endif
|
|
149
|
-
|
data/lua-hooks/ext/lpeg/lpvm.c
DELETED
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
** $Id: lpvm.c,v 1.9 2016/06/03 20:11:18 roberto Exp $
|
|
3
|
-
** Copyright 2007, Lua.org & PUC-Rio (see 'lpeg.html' for license)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
#include <limits.h>
|
|
7
|
-
#include <string.h>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
#include "lua.h"
|
|
11
|
-
#include "lauxlib.h"
|
|
12
|
-
|
|
13
|
-
#include "lpcap.h"
|
|
14
|
-
#include "lptypes.h"
|
|
15
|
-
#include "lpvm.h"
|
|
16
|
-
#include "lpprint.h"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/* initial size for call/backtrack stack */
|
|
20
|
-
#if !defined(INITBACK)
|
|
21
|
-
#define INITBACK MAXBACK
|
|
22
|
-
#endif
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#define getoffset(p) (((p) + 1)->offset)
|
|
26
|
-
|
|
27
|
-
static const Instruction giveup = {{IGiveup, 0, 0}};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
/*
|
|
31
|
-
** {======================================================
|
|
32
|
-
** Virtual Machine
|
|
33
|
-
** =======================================================
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
typedef struct Stack {
|
|
38
|
-
const char *s; /* saved position (or NULL for calls) */
|
|
39
|
-
const Instruction *p; /* next instruction */
|
|
40
|
-
int caplevel;
|
|
41
|
-
} Stack;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
#define getstackbase(L, ptop) ((Stack *)lua_touserdata(L, stackidx(ptop)))
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/*
|
|
48
|
-
** Make the size of the array of captures 'cap' twice as large as needed
|
|
49
|
-
** (which is 'captop'). ('n' is the number of new elements.)
|
|
50
|
-
*/
|
|
51
|
-
static Capture *doublecap (lua_State *L, Capture *cap, int captop,
|
|
52
|
-
int n, int ptop) {
|
|
53
|
-
Capture *newc;
|
|
54
|
-
if (captop >= INT_MAX/((int)sizeof(Capture) * 2))
|
|
55
|
-
luaL_error(L, "too many captures");
|
|
56
|
-
newc = (Capture *)lua_newuserdata(L, captop * 2 * sizeof(Capture));
|
|
57
|
-
memcpy(newc, cap, (captop - n) * sizeof(Capture));
|
|
58
|
-
lua_replace(L, caplistidx(ptop));
|
|
59
|
-
return newc;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/*
|
|
64
|
-
** Double the size of the stack
|
|
65
|
-
*/
|
|
66
|
-
static Stack *doublestack (lua_State *L, Stack **stacklimit, int ptop) {
|
|
67
|
-
Stack *stack = getstackbase(L, ptop);
|
|
68
|
-
Stack *newstack;
|
|
69
|
-
int n = *stacklimit - stack; /* current stack size */
|
|
70
|
-
int max, newn;
|
|
71
|
-
lua_getfield(L, LUA_REGISTRYINDEX, MAXSTACKIDX);
|
|
72
|
-
max = lua_tointeger(L, -1); /* maximum allowed size */
|
|
73
|
-
lua_pop(L, 1);
|
|
74
|
-
if (n >= max) /* already at maximum size? */
|
|
75
|
-
luaL_error(L, "backtrack stack overflow (current limit is %d)", max);
|
|
76
|
-
newn = 2 * n; /* new size */
|
|
77
|
-
if (newn > max) newn = max;
|
|
78
|
-
newstack = (Stack *)lua_newuserdata(L, newn * sizeof(Stack));
|
|
79
|
-
memcpy(newstack, stack, n * sizeof(Stack));
|
|
80
|
-
lua_replace(L, stackidx(ptop));
|
|
81
|
-
*stacklimit = newstack + newn;
|
|
82
|
-
return newstack + n; /* return next position */
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
/*
|
|
87
|
-
** Interpret the result of a dynamic capture: false -> fail;
|
|
88
|
-
** true -> keep current position; number -> next position.
|
|
89
|
-
** Return new subject position. 'fr' is stack index where
|
|
90
|
-
** is the result; 'curr' is current subject position; 'limit'
|
|
91
|
-
** is subject's size.
|
|
92
|
-
*/
|
|
93
|
-
static int resdyncaptures (lua_State *L, int fr, int curr, int limit) {
|
|
94
|
-
lua_Integer res;
|
|
95
|
-
if (!lua_toboolean(L, fr)) { /* false value? */
|
|
96
|
-
lua_settop(L, fr - 1); /* remove results */
|
|
97
|
-
return -1; /* and fail */
|
|
98
|
-
}
|
|
99
|
-
else if (lua_isboolean(L, fr)) /* true? */
|
|
100
|
-
res = curr; /* keep current position */
|
|
101
|
-
else {
|
|
102
|
-
res = lua_tointeger(L, fr) - 1; /* new position */
|
|
103
|
-
if (res < curr || res > limit)
|
|
104
|
-
luaL_error(L, "invalid position returned by match-time capture");
|
|
105
|
-
}
|
|
106
|
-
lua_remove(L, fr); /* remove first result (offset) */
|
|
107
|
-
return res;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
/*
|
|
112
|
-
** Add capture values returned by a dynamic capture to the capture list
|
|
113
|
-
** 'base', nested inside a group capture. 'fd' indexes the first capture
|
|
114
|
-
** value, 'n' is the number of values (at least 1).
|
|
115
|
-
*/
|
|
116
|
-
static void adddyncaptures (const char *s, Capture *base, int n, int fd) {
|
|
117
|
-
int i;
|
|
118
|
-
base[0].kind = Cgroup; /* create group capture */
|
|
119
|
-
base[0].siz = 0;
|
|
120
|
-
base[0].idx = 0; /* make it an anonymous group */
|
|
121
|
-
for (i = 1; i <= n; i++) { /* add runtime captures */
|
|
122
|
-
base[i].kind = Cruntime;
|
|
123
|
-
base[i].siz = 1; /* mark it as closed */
|
|
124
|
-
base[i].idx = fd + i - 1; /* stack index of capture value */
|
|
125
|
-
base[i].s = s;
|
|
126
|
-
}
|
|
127
|
-
base[i].kind = Cclose; /* close group */
|
|
128
|
-
base[i].siz = 1;
|
|
129
|
-
base[i].s = s;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
/*
|
|
134
|
-
** Remove dynamic captures from the Lua stack (called in case of failure)
|
|
135
|
-
*/
|
|
136
|
-
static int removedyncap (lua_State *L, Capture *capture,
|
|
137
|
-
int level, int last) {
|
|
138
|
-
int id = finddyncap(capture + level, capture + last); /* index of 1st cap. */
|
|
139
|
-
int top = lua_gettop(L);
|
|
140
|
-
if (id == 0) return 0; /* no dynamic captures? */
|
|
141
|
-
lua_settop(L, id - 1); /* remove captures */
|
|
142
|
-
return top - id + 1; /* number of values removed */
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
/*
|
|
147
|
-
** Opcode interpreter
|
|
148
|
-
*/
|
|
149
|
-
const char *match (lua_State *L, const char *o, const char *s, const char *e,
|
|
150
|
-
Instruction *op, Capture *capture, int ptop) {
|
|
151
|
-
Stack stackbase[INITBACK];
|
|
152
|
-
Stack *stacklimit = stackbase + INITBACK;
|
|
153
|
-
Stack *stack = stackbase; /* point to first empty slot in stack */
|
|
154
|
-
int capsize = INITCAPSIZE;
|
|
155
|
-
int captop = 0; /* point to first empty slot in captures */
|
|
156
|
-
int ndyncap = 0; /* number of dynamic captures (in Lua stack) */
|
|
157
|
-
const Instruction *p = op; /* current instruction */
|
|
158
|
-
stack->p = &giveup; stack->s = s; stack->caplevel = 0; stack++;
|
|
159
|
-
lua_pushlightuserdata(L, stackbase);
|
|
160
|
-
for (;;) {
|
|
161
|
-
#if defined(DEBUG)
|
|
162
|
-
printf("-------------------------------------\n");
|
|
163
|
-
printcaplist(capture, capture + captop);
|
|
164
|
-
printf("s: |%s| stck:%d, dyncaps:%d, caps:%d ",
|
|
165
|
-
s, (int)(stack - getstackbase(L, ptop)), ndyncap, captop);
|
|
166
|
-
printinst(op, p);
|
|
167
|
-
#endif
|
|
168
|
-
assert(stackidx(ptop) + ndyncap == lua_gettop(L) && ndyncap <= captop);
|
|
169
|
-
switch ((Opcode)p->i.code) {
|
|
170
|
-
case IEnd: {
|
|
171
|
-
assert(stack == getstackbase(L, ptop) + 1);
|
|
172
|
-
capture[captop].kind = Cclose;
|
|
173
|
-
capture[captop].s = NULL;
|
|
174
|
-
return s;
|
|
175
|
-
}
|
|
176
|
-
case IGiveup: {
|
|
177
|
-
assert(stack == getstackbase(L, ptop));
|
|
178
|
-
return NULL;
|
|
179
|
-
}
|
|
180
|
-
case IRet: {
|
|
181
|
-
assert(stack > getstackbase(L, ptop) && (stack - 1)->s == NULL);
|
|
182
|
-
p = (--stack)->p;
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
case IAny: {
|
|
186
|
-
if (s < e) { p++; s++; }
|
|
187
|
-
else goto fail;
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
case ITestAny: {
|
|
191
|
-
if (s < e) p += 2;
|
|
192
|
-
else p += getoffset(p);
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
case IChar: {
|
|
196
|
-
if ((byte)*s == p->i.aux && s < e) { p++; s++; }
|
|
197
|
-
else goto fail;
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
case ITestChar: {
|
|
201
|
-
if ((byte)*s == p->i.aux && s < e) p += 2;
|
|
202
|
-
else p += getoffset(p);
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
case ISet: {
|
|
206
|
-
int c = (byte)*s;
|
|
207
|
-
if (testchar((p+1)->buff, c) && s < e)
|
|
208
|
-
{ p += CHARSETINSTSIZE; s++; }
|
|
209
|
-
else goto fail;
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
case ITestSet: {
|
|
213
|
-
int c = (byte)*s;
|
|
214
|
-
if (testchar((p + 2)->buff, c) && s < e)
|
|
215
|
-
p += 1 + CHARSETINSTSIZE;
|
|
216
|
-
else p += getoffset(p);
|
|
217
|
-
continue;
|
|
218
|
-
}
|
|
219
|
-
case IBehind: {
|
|
220
|
-
int n = p->i.aux;
|
|
221
|
-
if (n > s - o) goto fail;
|
|
222
|
-
s -= n; p++;
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
case ISpan: {
|
|
226
|
-
for (; s < e; s++) {
|
|
227
|
-
int c = (byte)*s;
|
|
228
|
-
if (!testchar((p+1)->buff, c)) break;
|
|
229
|
-
}
|
|
230
|
-
p += CHARSETINSTSIZE;
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
case IJmp: {
|
|
234
|
-
p += getoffset(p);
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
case IChoice: {
|
|
238
|
-
if (stack == stacklimit)
|
|
239
|
-
stack = doublestack(L, &stacklimit, ptop);
|
|
240
|
-
stack->p = p + getoffset(p);
|
|
241
|
-
stack->s = s;
|
|
242
|
-
stack->caplevel = captop;
|
|
243
|
-
stack++;
|
|
244
|
-
p += 2;
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
247
|
-
case ICall: {
|
|
248
|
-
if (stack == stacklimit)
|
|
249
|
-
stack = doublestack(L, &stacklimit, ptop);
|
|
250
|
-
stack->s = NULL;
|
|
251
|
-
stack->p = p + 2; /* save return address */
|
|
252
|
-
stack++;
|
|
253
|
-
p += getoffset(p);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
case ICommit: {
|
|
257
|
-
assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL);
|
|
258
|
-
stack--;
|
|
259
|
-
p += getoffset(p);
|
|
260
|
-
continue;
|
|
261
|
-
}
|
|
262
|
-
case IPartialCommit: {
|
|
263
|
-
assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL);
|
|
264
|
-
(stack - 1)->s = s;
|
|
265
|
-
(stack - 1)->caplevel = captop;
|
|
266
|
-
p += getoffset(p);
|
|
267
|
-
continue;
|
|
268
|
-
}
|
|
269
|
-
case IBackCommit: {
|
|
270
|
-
assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL);
|
|
271
|
-
s = (--stack)->s;
|
|
272
|
-
captop = stack->caplevel;
|
|
273
|
-
p += getoffset(p);
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
case IFailTwice:
|
|
277
|
-
assert(stack > getstackbase(L, ptop));
|
|
278
|
-
stack--;
|
|
279
|
-
/* go through */
|
|
280
|
-
case IFail:
|
|
281
|
-
fail: { /* pattern failed: try to backtrack */
|
|
282
|
-
do { /* remove pending calls */
|
|
283
|
-
assert(stack > getstackbase(L, ptop));
|
|
284
|
-
s = (--stack)->s;
|
|
285
|
-
} while (s == NULL);
|
|
286
|
-
if (ndyncap > 0) /* is there matchtime captures? */
|
|
287
|
-
ndyncap -= removedyncap(L, capture, stack->caplevel, captop);
|
|
288
|
-
captop = stack->caplevel;
|
|
289
|
-
p = stack->p;
|
|
290
|
-
#if defined(DEBUG)
|
|
291
|
-
printf("**FAIL**\n");
|
|
292
|
-
#endif
|
|
293
|
-
continue;
|
|
294
|
-
}
|
|
295
|
-
case ICloseRunTime: {
|
|
296
|
-
CapState cs;
|
|
297
|
-
int rem, res, n;
|
|
298
|
-
int fr = lua_gettop(L) + 1; /* stack index of first result */
|
|
299
|
-
cs.s = o; cs.L = L; cs.ocap = capture; cs.ptop = ptop;
|
|
300
|
-
n = runtimecap(&cs, capture + captop, s, &rem); /* call function */
|
|
301
|
-
captop -= n; /* remove nested captures */
|
|
302
|
-
ndyncap -= rem; /* update number of dynamic captures */
|
|
303
|
-
fr -= rem; /* 'rem' items were popped from Lua stack */
|
|
304
|
-
res = resdyncaptures(L, fr, s - o, e - o); /* get result */
|
|
305
|
-
if (res == -1) /* fail? */
|
|
306
|
-
goto fail;
|
|
307
|
-
s = o + res; /* else update current position */
|
|
308
|
-
n = lua_gettop(L) - fr + 1; /* number of new captures */
|
|
309
|
-
ndyncap += n; /* update number of dynamic captures */
|
|
310
|
-
if (n > 0) { /* any new capture? */
|
|
311
|
-
if (fr + n >= SHRT_MAX)
|
|
312
|
-
luaL_error(L, "too many results in match-time capture");
|
|
313
|
-
if ((captop += n + 2) >= capsize) {
|
|
314
|
-
capture = doublecap(L, capture, captop, n + 2, ptop);
|
|
315
|
-
capsize = 2 * captop;
|
|
316
|
-
}
|
|
317
|
-
/* add new captures to 'capture' list */
|
|
318
|
-
adddyncaptures(s, capture + captop - n - 2, n, fr);
|
|
319
|
-
}
|
|
320
|
-
p++;
|
|
321
|
-
continue;
|
|
322
|
-
}
|
|
323
|
-
case ICloseCapture: {
|
|
324
|
-
const char *s1 = s;
|
|
325
|
-
assert(captop > 0);
|
|
326
|
-
/* if possible, turn capture into a full capture */
|
|
327
|
-
if (capture[captop - 1].siz == 0 &&
|
|
328
|
-
s1 - capture[captop - 1].s < UCHAR_MAX) {
|
|
329
|
-
capture[captop - 1].siz = s1 - capture[captop - 1].s + 1;
|
|
330
|
-
p++;
|
|
331
|
-
continue;
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
capture[captop].siz = 1; /* mark entry as closed */
|
|
335
|
-
capture[captop].s = s;
|
|
336
|
-
goto pushcapture;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
case IOpenCapture:
|
|
340
|
-
capture[captop].siz = 0; /* mark entry as open */
|
|
341
|
-
capture[captop].s = s;
|
|
342
|
-
goto pushcapture;
|
|
343
|
-
case IFullCapture:
|
|
344
|
-
capture[captop].siz = getoff(p) + 1; /* save capture size */
|
|
345
|
-
capture[captop].s = s - getoff(p);
|
|
346
|
-
/* goto pushcapture; */
|
|
347
|
-
pushcapture: {
|
|
348
|
-
capture[captop].idx = p->i.key;
|
|
349
|
-
capture[captop].kind = getkind(p);
|
|
350
|
-
if (++captop >= capsize) {
|
|
351
|
-
capture = doublecap(L, capture, captop, 0, ptop);
|
|
352
|
-
capsize = 2 * captop;
|
|
353
|
-
}
|
|
354
|
-
p++;
|
|
355
|
-
continue;
|
|
356
|
-
}
|
|
357
|
-
default: assert(0); return NULL;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/* }====================================================== */
|
|
363
|
-
|
|
364
|
-
|