immunio 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,34 @@
1
+ /*
2
+ ** Snapshot handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_SNAP_H
7
+ #define _LJ_SNAP_H
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_jit.h"
11
+
12
+ #if LJ_HASJIT
13
+ LJ_FUNC void lj_snap_add(jit_State *J);
14
+ LJ_FUNC void lj_snap_purge(jit_State *J);
15
+ LJ_FUNC void lj_snap_shrink(jit_State *J);
16
+ LJ_FUNC IRIns *lj_snap_regspmap(GCtrace *T, SnapNo snapno, IRIns *ir);
17
+ LJ_FUNC void lj_snap_replay(jit_State *J, GCtrace *T);
18
+ LJ_FUNC const BCIns *lj_snap_restore(jit_State *J, void *exptr);
19
+ LJ_FUNC void lj_snap_grow_buf_(jit_State *J, MSize need);
20
+ LJ_FUNC void lj_snap_grow_map_(jit_State *J, MSize need);
21
+
22
+ static LJ_AINLINE void lj_snap_grow_buf(jit_State *J, MSize need)
23
+ {
24
+ if (LJ_UNLIKELY(need > J->sizesnap)) lj_snap_grow_buf_(J, need);
25
+ }
26
+
27
+ static LJ_AINLINE void lj_snap_grow_map(jit_State *J, MSize need)
28
+ {
29
+ if (LJ_UNLIKELY(need > J->sizesnapmap)) lj_snap_grow_map_(J, need);
30
+ }
31
+
32
+ #endif
33
+
34
+ #endif
@@ -0,0 +1,300 @@
1
+ /*
2
+ ** State and stack handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ **
5
+ ** Portions taken verbatim or adapted from the Lua interpreter.
6
+ ** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
7
+ */
8
+
9
+ #define lj_state_c
10
+ #define LUA_CORE
11
+
12
+ #include "lj_obj.h"
13
+ #include "lj_gc.h"
14
+ #include "lj_err.h"
15
+ #include "lj_buf.h"
16
+ #include "lj_str.h"
17
+ #include "lj_tab.h"
18
+ #include "lj_func.h"
19
+ #include "lj_meta.h"
20
+ #include "lj_state.h"
21
+ #include "lj_frame.h"
22
+ #if LJ_HASFFI
23
+ #include "lj_ctype.h"
24
+ #endif
25
+ #include "lj_trace.h"
26
+ #include "lj_dispatch.h"
27
+ #include "lj_vm.h"
28
+ #include "lj_lex.h"
29
+ #include "lj_alloc.h"
30
+ #include "luajit.h"
31
+
32
+ /* -- Stack handling ------------------------------------------------------ */
33
+
34
+ /* Stack sizes. */
35
+ #define LJ_STACK_MIN LUA_MINSTACK /* Min. stack size. */
36
+ #define LJ_STACK_MAX LUAI_MAXSTACK /* Max. stack size. */
37
+ #define LJ_STACK_START (2*LJ_STACK_MIN) /* Starting stack size. */
38
+ #define LJ_STACK_MAXEX (LJ_STACK_MAX + 1 + LJ_STACK_EXTRA)
39
+
40
+ /* Explanation of LJ_STACK_EXTRA:
41
+ **
42
+ ** Calls to metamethods store their arguments beyond the current top
43
+ ** without checking for the stack limit. This avoids stack resizes which
44
+ ** would invalidate passed TValue pointers. The stack check is performed
45
+ ** later by the function header. This can safely resize the stack or raise
46
+ ** an error. Thus we need some extra slots beyond the current stack limit.
47
+ **
48
+ ** Most metamethods need 4 slots above top (cont, mobj, arg1, arg2) plus
49
+ ** one extra slot if mobj is not a function. Only lj_meta_tset needs 5
50
+ ** slots above top, but then mobj is always a function. So we can get by
51
+ ** with 5 extra slots.
52
+ ** LJ_FR2: We need 2 more slots for the frame PC and the continuation PC.
53
+ */
54
+
55
+ /* Resize stack slots and adjust pointers in state. */
56
+ static void resizestack(lua_State *L, MSize n)
57
+ {
58
+ TValue *st, *oldst = tvref(L->stack);
59
+ ptrdiff_t delta;
60
+ MSize oldsize = L->stacksize;
61
+ MSize realsize = n + 1 + LJ_STACK_EXTRA;
62
+ GCobj *up;
63
+ lua_assert((MSize)(tvref(L->maxstack)-oldst)==L->stacksize-LJ_STACK_EXTRA-1);
64
+ st = (TValue *)lj_mem_realloc(L, tvref(L->stack),
65
+ (MSize)(oldsize*sizeof(TValue)),
66
+ (MSize)(realsize*sizeof(TValue)));
67
+ setmref(L->stack, st);
68
+ delta = (char *)st - (char *)oldst;
69
+ setmref(L->maxstack, st + n);
70
+ while (oldsize < realsize) /* Clear new slots. */
71
+ setnilV(st + oldsize++);
72
+ L->stacksize = realsize;
73
+ if ((size_t)(mref(G(L)->jit_base, char) - (char *)oldst) < oldsize)
74
+ setmref(G(L)->jit_base, mref(G(L)->jit_base, char) + delta);
75
+ L->base = (TValue *)((char *)L->base + delta);
76
+ L->top = (TValue *)((char *)L->top + delta);
77
+ for (up = gcref(L->openupval); up != NULL; up = gcnext(up))
78
+ setmref(gco2uv(up)->v, (TValue *)((char *)uvval(gco2uv(up)) + delta));
79
+ }
80
+
81
+ /* Relimit stack after error, in case the limit was overdrawn. */
82
+ void lj_state_relimitstack(lua_State *L)
83
+ {
84
+ if (L->stacksize > LJ_STACK_MAXEX && L->top-tvref(L->stack) < LJ_STACK_MAX-1)
85
+ resizestack(L, LJ_STACK_MAX);
86
+ }
87
+
88
+ /* Try to shrink the stack (called from GC). */
89
+ void lj_state_shrinkstack(lua_State *L, MSize used)
90
+ {
91
+ if (L->stacksize > LJ_STACK_MAXEX)
92
+ return; /* Avoid stack shrinking while handling stack overflow. */
93
+ if (4*used < L->stacksize &&
94
+ 2*(LJ_STACK_START+LJ_STACK_EXTRA) < L->stacksize &&
95
+ /* Don't shrink stack of live trace. */
96
+ (tvref(G(L)->jit_base) == NULL || obj2gco(L) != gcref(G(L)->cur_L)))
97
+ resizestack(L, L->stacksize >> 1);
98
+ }
99
+
100
+ /* Try to grow stack. */
101
+ void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need)
102
+ {
103
+ MSize n;
104
+ if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */
105
+ lj_err_throw(L, LUA_ERRERR);
106
+ n = L->stacksize + need;
107
+ if (n > LJ_STACK_MAX) {
108
+ n += 2*LUA_MINSTACK;
109
+ } else if (n < 2*L->stacksize) {
110
+ n = 2*L->stacksize;
111
+ if (n >= LJ_STACK_MAX)
112
+ n = LJ_STACK_MAX;
113
+ }
114
+ resizestack(L, n);
115
+ if (L->stacksize > LJ_STACK_MAXEX)
116
+ lj_err_msg(L, LJ_ERR_STKOV);
117
+ }
118
+
119
+ void LJ_FASTCALL lj_state_growstack1(lua_State *L)
120
+ {
121
+ lj_state_growstack(L, 1);
122
+ }
123
+
124
+ /* Allocate basic stack for new state. */
125
+ static void stack_init(lua_State *L1, lua_State *L)
126
+ {
127
+ TValue *stend, *st = lj_mem_newvec(L, LJ_STACK_START+LJ_STACK_EXTRA, TValue);
128
+ setmref(L1->stack, st);
129
+ L1->stacksize = LJ_STACK_START + LJ_STACK_EXTRA;
130
+ stend = st + L1->stacksize;
131
+ setmref(L1->maxstack, stend - LJ_STACK_EXTRA - 1);
132
+ setthreadV(L1, st++, L1); /* Needed for curr_funcisL() on empty stack. */
133
+ if (LJ_FR2) setnilV(st++);
134
+ L1->base = L1->top = st;
135
+ while (st < stend) /* Clear new slots. */
136
+ setnilV(st++);
137
+ }
138
+
139
+ /* -- State handling ------------------------------------------------------ */
140
+
141
+ /* Open parts that may cause memory-allocation errors. */
142
+ static TValue *cpluaopen(lua_State *L, lua_CFunction dummy, void *ud)
143
+ {
144
+ global_State *g = G(L);
145
+ UNUSED(dummy);
146
+ UNUSED(ud);
147
+ stack_init(L, L);
148
+ /* NOBARRIER: State initialization, all objects are white. */
149
+ setgcref(L->env, obj2gco(lj_tab_new(L, 0, LJ_MIN_GLOBAL)));
150
+ settabV(L, registry(L), lj_tab_new(L, 0, LJ_MIN_REGISTRY));
151
+ lj_str_resize(L, LJ_MIN_STRTAB-1);
152
+ lj_meta_init(L);
153
+ lj_lex_init(L);
154
+ fixstring(lj_err_str(L, LJ_ERR_ERRMEM)); /* Preallocate memory error msg. */
155
+ g->gc.threshold = 4*g->gc.total;
156
+ lj_trace_initstate(g);
157
+ return NULL;
158
+ }
159
+
160
+ static void close_state(lua_State *L)
161
+ {
162
+ global_State *g = G(L);
163
+ lj_func_closeuv(L, tvref(L->stack));
164
+ lj_gc_freeall(g);
165
+ lua_assert(gcref(g->gc.root) == obj2gco(L));
166
+ lua_assert(g->strnum == 0);
167
+ lj_trace_freestate(g);
168
+ #if LJ_HASFFI
169
+ lj_ctype_freestate(g);
170
+ #endif
171
+ lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef);
172
+ lj_buf_free(g, &g->tmpbuf);
173
+ lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue);
174
+ lua_assert(g->gc.total == sizeof(GG_State));
175
+ #ifndef LUAJIT_USE_SYSMALLOC
176
+ if (g->allocf == lj_alloc_f)
177
+ lj_alloc_destroy(g->allocd);
178
+ else
179
+ #endif
180
+ g->allocf(g->allocd, G2GG(g), sizeof(GG_State), 0);
181
+ }
182
+
183
+ #if LJ_64 && !(defined(LUAJIT_USE_VALGRIND) && defined(LUAJIT_USE_SYSMALLOC))
184
+ lua_State *lj_state_newstate(lua_Alloc f, void *ud)
185
+ #else
186
+ LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)
187
+ #endif
188
+ {
189
+ GG_State *GG = (GG_State *)f(ud, NULL, 0, sizeof(GG_State));
190
+ lua_State *L = &GG->L;
191
+ global_State *g = &GG->g;
192
+ if (GG == NULL || !checkptrGC(GG)) return NULL;
193
+ memset(GG, 0, sizeof(GG_State));
194
+ L->gct = ~LJ_TTHREAD;
195
+ L->marked = LJ_GC_WHITE0 | LJ_GC_FIXED | LJ_GC_SFIXED; /* Prevent free. */
196
+ L->dummy_ffid = FF_C;
197
+ setmref(L->glref, g);
198
+ g->gc.currentwhite = LJ_GC_WHITE0 | LJ_GC_FIXED;
199
+ g->strempty.marked = LJ_GC_WHITE0;
200
+ g->strempty.gct = ~LJ_TSTR;
201
+ g->allocf = f;
202
+ g->allocd = ud;
203
+ setgcref(g->mainthref, obj2gco(L));
204
+ setgcref(g->uvhead.prev, obj2gco(&g->uvhead));
205
+ setgcref(g->uvhead.next, obj2gco(&g->uvhead));
206
+ g->strmask = ~(MSize)0;
207
+ setnilV(registry(L));
208
+ setnilV(&g->nilnode.val);
209
+ setnilV(&g->nilnode.key);
210
+ #if !LJ_GC64
211
+ setmref(g->nilnode.freetop, &g->nilnode);
212
+ #endif
213
+ lj_buf_init(NULL, &g->tmpbuf);
214
+ g->gc.state = GCSpause;
215
+ setgcref(g->gc.root, obj2gco(L));
216
+ setmref(g->gc.sweep, &g->gc.root);
217
+ g->gc.total = sizeof(GG_State);
218
+ g->gc.pause = LUAI_GCPAUSE;
219
+ g->gc.stepmul = LUAI_GCMUL;
220
+ lj_dispatch_init((GG_State *)L);
221
+ L->status = LUA_ERRERR+1; /* Avoid touching the stack upon memory error. */
222
+ if (lj_vm_cpcall(L, NULL, NULL, cpluaopen) != 0) {
223
+ /* Memory allocation error: free partial state. */
224
+ close_state(L);
225
+ return NULL;
226
+ }
227
+ L->status = 0;
228
+ return L;
229
+ }
230
+
231
+ static TValue *cpfinalize(lua_State *L, lua_CFunction dummy, void *ud)
232
+ {
233
+ UNUSED(dummy);
234
+ UNUSED(ud);
235
+ lj_gc_finalize_cdata(L);
236
+ lj_gc_finalize_udata(L);
237
+ /* Frame pop omitted. */
238
+ return NULL;
239
+ }
240
+
241
+ LUA_API void lua_close(lua_State *L)
242
+ {
243
+ global_State *g = G(L);
244
+ int i;
245
+ L = mainthread(g); /* Only the main thread can be closed. */
246
+ #if LJ_HASPROFILE
247
+ luaJIT_profile_stop(L);
248
+ #endif
249
+ setgcrefnull(g->cur_L);
250
+ lj_func_closeuv(L, tvref(L->stack));
251
+ lj_gc_separateudata(g, 1); /* Separate udata which have GC metamethods. */
252
+ #if LJ_HASJIT
253
+ G2J(g)->flags &= ~JIT_F_ON;
254
+ G2J(g)->state = LJ_TRACE_IDLE;
255
+ lj_dispatch_update(g);
256
+ #endif
257
+ for (i = 0;;) {
258
+ hook_enter(g);
259
+ L->status = 0;
260
+ L->base = L->top = tvref(L->stack) + 1 + LJ_FR2;
261
+ L->cframe = NULL;
262
+ if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) {
263
+ if (++i >= 10) break;
264
+ lj_gc_separateudata(g, 1); /* Separate udata again. */
265
+ if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */
266
+ break;
267
+ }
268
+ }
269
+ close_state(L);
270
+ }
271
+
272
+ lua_State *lj_state_new(lua_State *L)
273
+ {
274
+ lua_State *L1 = lj_mem_newobj(L, lua_State);
275
+ L1->gct = ~LJ_TTHREAD;
276
+ L1->dummy_ffid = FF_C;
277
+ L1->status = 0;
278
+ L1->stacksize = 0;
279
+ setmref(L1->stack, NULL);
280
+ L1->cframe = NULL;
281
+ /* NOBARRIER: The lua_State is new (marked white). */
282
+ setgcrefnull(L1->openupval);
283
+ setmrefr(L1->glref, L->glref);
284
+ setgcrefr(L1->env, L->env);
285
+ stack_init(L1, L); /* init stack */
286
+ lua_assert(iswhite(obj2gco(L1)));
287
+ return L1;
288
+ }
289
+
290
+ void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L)
291
+ {
292
+ lua_assert(L != mainthread(g));
293
+ if (obj2gco(L) == gcref(g->cur_L))
294
+ setgcrefnull(g->cur_L);
295
+ lj_func_closeuv(L, tvref(L->stack));
296
+ lua_assert(gcref(L->openupval) == NULL);
297
+ lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue);
298
+ lj_mem_freet(g, L);
299
+ }
300
+
@@ -0,0 +1,35 @@
1
+ /*
2
+ ** State and stack handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_STATE_H
7
+ #define _LJ_STATE_H
8
+
9
+ #include "lj_obj.h"
10
+
11
+ #define incr_top(L) \
12
+ (++L->top >= tvref(L->maxstack) && (lj_state_growstack1(L), 0))
13
+
14
+ #define savestack(L, p) ((char *)(p) - mref(L->stack, char))
15
+ #define restorestack(L, n) ((TValue *)(mref(L->stack, char) + (n)))
16
+
17
+ LJ_FUNC void lj_state_relimitstack(lua_State *L);
18
+ LJ_FUNC void lj_state_shrinkstack(lua_State *L, MSize used);
19
+ LJ_FUNCA void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need);
20
+ LJ_FUNC void LJ_FASTCALL lj_state_growstack1(lua_State *L);
21
+
22
+ static LJ_AINLINE void lj_state_checkstack(lua_State *L, MSize need)
23
+ {
24
+ if ((mref(L->maxstack, char) - (char *)L->top) <=
25
+ (ptrdiff_t)need*(ptrdiff_t)sizeof(TValue))
26
+ lj_state_growstack(L, need);
27
+ }
28
+
29
+ LJ_FUNC lua_State *lj_state_new(lua_State *L);
30
+ LJ_FUNC void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L);
31
+ #if LJ_64
32
+ LJ_FUNC lua_State *lj_state_newstate(lua_Alloc f, void *ud);
33
+ #endif
34
+
35
+ #endif
@@ -0,0 +1,197 @@
1
+ /*
2
+ ** String handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #define lj_str_c
7
+ #define LUA_CORE
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_gc.h"
11
+ #include "lj_err.h"
12
+ #include "lj_str.h"
13
+ #include "lj_char.h"
14
+
15
+ /* -- String helpers ------------------------------------------------------ */
16
+
17
+ /* Ordered compare of strings. Assumes string data is 4-byte aligned. */
18
+ int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b)
19
+ {
20
+ MSize i, n = a->len > b->len ? b->len : a->len;
21
+ for (i = 0; i < n; i += 4) {
22
+ /* Note: innocuous access up to end of string + 3. */
23
+ uint32_t va = *(const uint32_t *)(strdata(a)+i);
24
+ uint32_t vb = *(const uint32_t *)(strdata(b)+i);
25
+ if (va != vb) {
26
+ #if LJ_LE
27
+ va = lj_bswap(va); vb = lj_bswap(vb);
28
+ #endif
29
+ i -= n;
30
+ if ((int32_t)i >= -3) {
31
+ va >>= 32+(i<<3); vb >>= 32+(i<<3);
32
+ if (va == vb) break;
33
+ }
34
+ return va < vb ? -1 : 1;
35
+ }
36
+ }
37
+ return (int32_t)(a->len - b->len);
38
+ }
39
+
40
+ /* Fast string data comparison. Caveat: unaligned access to 1st string! */
41
+ static LJ_AINLINE int str_fastcmp(const char *a, const char *b, MSize len)
42
+ {
43
+ MSize i = 0;
44
+ lua_assert(len > 0);
45
+ lua_assert((((uintptr_t)a+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4);
46
+ do { /* Note: innocuous access up to end of string + 3. */
47
+ uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i);
48
+ if (v) {
49
+ i -= len;
50
+ #if LJ_LE
51
+ return (int32_t)i >= -3 ? (v << (32+(i<<3))) : 1;
52
+ #else
53
+ return (int32_t)i >= -3 ? (v >> (32+(i<<3))) : 1;
54
+ #endif
55
+ }
56
+ i += 4;
57
+ } while (i < len);
58
+ return 0;
59
+ }
60
+
61
+ /* Find fixed string p inside string s. */
62
+ const char *lj_str_find(const char *s, const char *p, MSize slen, MSize plen)
63
+ {
64
+ if (plen <= slen) {
65
+ if (plen == 0) {
66
+ return s;
67
+ } else {
68
+ int c = *(const uint8_t *)p++;
69
+ plen--; slen -= plen;
70
+ while (slen) {
71
+ const char *q = (const char *)memchr(s, c, slen);
72
+ if (!q) break;
73
+ if (memcmp(q+1, p, plen) == 0) return q;
74
+ q++; slen -= (MSize)(q-s); s = q;
75
+ }
76
+ }
77
+ }
78
+ return NULL;
79
+ }
80
+
81
+ /* Check whether a string has a pattern matching character. */
82
+ int lj_str_haspattern(GCstr *s)
83
+ {
84
+ const char *p = strdata(s), *q = p + s->len;
85
+ while (p < q) {
86
+ int c = *(const uint8_t *)p++;
87
+ if (lj_char_ispunct(c) && strchr("^$*+?.([%-", c))
88
+ return 1; /* Found a pattern matching char. */
89
+ }
90
+ return 0; /* No pattern matching chars found. */
91
+ }
92
+
93
+ /* -- String interning ---------------------------------------------------- */
94
+
95
+ /* Resize the string hash table (grow and shrink). */
96
+ void lj_str_resize(lua_State *L, MSize newmask)
97
+ {
98
+ global_State *g = G(L);
99
+ GCRef *newhash;
100
+ MSize i;
101
+ if (g->gc.state == GCSsweepstring || newmask >= LJ_MAX_STRTAB-1)
102
+ return; /* No resizing during GC traversal or if already too big. */
103
+ newhash = lj_mem_newvec(L, newmask+1, GCRef);
104
+ memset(newhash, 0, (newmask+1)*sizeof(GCRef));
105
+ for (i = g->strmask; i != ~(MSize)0; i--) { /* Rehash old table. */
106
+ GCobj *p = gcref(g->strhash[i]);
107
+ while (p) { /* Follow each hash chain and reinsert all strings. */
108
+ MSize h = gco2str(p)->hash & newmask;
109
+ GCobj *next = gcnext(p);
110
+ /* NOBARRIER: The string table is a GC root. */
111
+ setgcrefr(p->gch.nextgc, newhash[h]);
112
+ setgcref(newhash[h], p);
113
+ p = next;
114
+ }
115
+ }
116
+ lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef);
117
+ g->strmask = newmask;
118
+ g->strhash = newhash;
119
+ }
120
+
121
+ /* Intern a string and return string object. */
122
+ GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
123
+ {
124
+ global_State *g;
125
+ GCstr *s;
126
+ GCobj *o;
127
+ MSize len = (MSize)lenx;
128
+ MSize a, b, h = len;
129
+ if (lenx >= LJ_MAX_STR)
130
+ lj_err_msg(L, LJ_ERR_STROV);
131
+ g = G(L);
132
+ /* Compute string hash. Constants taken from lookup3 hash by Bob Jenkins. */
133
+ if (len >= 4) { /* Caveat: unaligned access! */
134
+ a = lj_getu32(str);
135
+ h ^= lj_getu32(str+len-4);
136
+ b = lj_getu32(str+(len>>1)-2);
137
+ h ^= b; h -= lj_rol(b, 14);
138
+ b += lj_getu32(str+(len>>2)-1);
139
+ } else if (len > 0) {
140
+ a = *(const uint8_t *)str;
141
+ h ^= *(const uint8_t *)(str+len-1);
142
+ b = *(const uint8_t *)(str+(len>>1));
143
+ h ^= b; h -= lj_rol(b, 14);
144
+ } else {
145
+ return &g->strempty;
146
+ }
147
+ a ^= h; a -= lj_rol(h, 11);
148
+ b ^= a; b -= lj_rol(a, 25);
149
+ h ^= b; h -= lj_rol(b, 16);
150
+ /* Check if the string has already been interned. */
151
+ o = gcref(g->strhash[h & g->strmask]);
152
+ if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
153
+ while (o != NULL) {
154
+ GCstr *sx = gco2str(o);
155
+ if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) {
156
+ /* Resurrect if dead. Can only happen with fixstring() (keywords). */
157
+ if (isdead(g, o)) flipwhite(o);
158
+ return sx; /* Return existing string. */
159
+ }
160
+ o = gcnext(o);
161
+ }
162
+ } else { /* Slow path: end of string is too close to a page boundary. */
163
+ while (o != NULL) {
164
+ GCstr *sx = gco2str(o);
165
+ if (sx->len == len && memcmp(str, strdata(sx), len) == 0) {
166
+ /* Resurrect if dead. Can only happen with fixstring() (keywords). */
167
+ if (isdead(g, o)) flipwhite(o);
168
+ return sx; /* Return existing string. */
169
+ }
170
+ o = gcnext(o);
171
+ }
172
+ }
173
+ /* Nope, create a new string. */
174
+ s = lj_mem_newt(L, sizeof(GCstr)+len+1, GCstr);
175
+ newwhite(g, s);
176
+ s->gct = ~LJ_TSTR;
177
+ s->len = len;
178
+ s->hash = h;
179
+ s->reserved = 0;
180
+ memcpy(strdatawr(s), str, len);
181
+ strdatawr(s)[len] = '\0'; /* Zero-terminate string. */
182
+ /* Add it to string hash table. */
183
+ h &= g->strmask;
184
+ s->nextgc = g->strhash[h];
185
+ /* NOBARRIER: The string table is a GC root. */
186
+ setgcref(g->strhash[h], obj2gco(s));
187
+ if (g->strnum++ > g->strmask) /* Allow a 100% load factor. */
188
+ lj_str_resize(L, (g->strmask<<1)+1); /* Grow string table. */
189
+ return s; /* Return newly interned string. */
190
+ }
191
+
192
+ void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s)
193
+ {
194
+ g->strnum--;
195
+ lj_mem_free(g, s, sizestring(s));
196
+ }
197
+