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,105 @@
1
+ /*
2
+ ** Buffer handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_BUF_H
7
+ #define _LJ_BUF_H
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_gc.h"
11
+ #include "lj_str.h"
12
+
13
+ /* Resizable string buffers. Struct definition in lj_obj.h. */
14
+ #define sbufB(sb) (mref((sb)->b, char))
15
+ #define sbufP(sb) (mref((sb)->p, char))
16
+ #define sbufE(sb) (mref((sb)->e, char))
17
+ #define sbufL(sb) (mref((sb)->L, lua_State))
18
+ #define sbufsz(sb) ((MSize)(sbufE((sb)) - sbufB((sb))))
19
+ #define sbuflen(sb) ((MSize)(sbufP((sb)) - sbufB((sb))))
20
+ #define sbufleft(sb) ((MSize)(sbufE((sb)) - sbufP((sb))))
21
+ #define setsbufP(sb, q) (setmref((sb)->p, (q)))
22
+ #define setsbufL(sb, l) (setmref((sb)->L, (l)))
23
+
24
+ /* Buffer management */
25
+ LJ_FUNC char *LJ_FASTCALL lj_buf_need2(SBuf *sb, MSize sz);
26
+ LJ_FUNC char *LJ_FASTCALL lj_buf_more2(SBuf *sb, MSize sz);
27
+ LJ_FUNC void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb);
28
+ LJ_FUNC char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz);
29
+
30
+ static LJ_AINLINE void lj_buf_init(lua_State *L, SBuf *sb)
31
+ {
32
+ setsbufL(sb, L);
33
+ setmref(sb->p, NULL); setmref(sb->e, NULL); setmref(sb->b, NULL);
34
+ }
35
+
36
+ static LJ_AINLINE void lj_buf_reset(SBuf *sb)
37
+ {
38
+ setmrefr(sb->p, sb->b);
39
+ }
40
+
41
+ static LJ_AINLINE SBuf *lj_buf_tmp_(lua_State *L)
42
+ {
43
+ SBuf *sb = &G(L)->tmpbuf;
44
+ setsbufL(sb, L);
45
+ lj_buf_reset(sb);
46
+ return sb;
47
+ }
48
+
49
+ static LJ_AINLINE void lj_buf_free(global_State *g, SBuf *sb)
50
+ {
51
+ lj_mem_free(g, sbufB(sb), sbufsz(sb));
52
+ }
53
+
54
+ static LJ_AINLINE char *lj_buf_need(SBuf *sb, MSize sz)
55
+ {
56
+ if (LJ_UNLIKELY(sz > sbufsz(sb)))
57
+ return lj_buf_need2(sb, sz);
58
+ return sbufB(sb);
59
+ }
60
+
61
+ static LJ_AINLINE char *lj_buf_more(SBuf *sb, MSize sz)
62
+ {
63
+ if (LJ_UNLIKELY(sz > sbufleft(sb)))
64
+ return lj_buf_more2(sb, sz);
65
+ return sbufP(sb);
66
+ }
67
+
68
+ /* Low-level buffer put operations */
69
+ LJ_FUNC SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len);
70
+ #if LJ_HASJIT
71
+ LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c);
72
+ #endif
73
+ LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s);
74
+
75
+ static LJ_AINLINE char *lj_buf_wmem(char *p, const void *q, MSize len)
76
+ {
77
+ return (char *)memcpy(p, q, len) + len;
78
+ }
79
+
80
+ static LJ_AINLINE void lj_buf_putb(SBuf *sb, int c)
81
+ {
82
+ char *p = lj_buf_more(sb, 1);
83
+ *p++ = (char)c;
84
+ setsbufP(sb, p);
85
+ }
86
+
87
+ /* High-level buffer put operations */
88
+ LJ_FUNCA SBuf * LJ_FASTCALL lj_buf_putstr_reverse(SBuf *sb, GCstr *s);
89
+ LJ_FUNCA SBuf * LJ_FASTCALL lj_buf_putstr_lower(SBuf *sb, GCstr *s);
90
+ LJ_FUNCA SBuf * LJ_FASTCALL lj_buf_putstr_upper(SBuf *sb, GCstr *s);
91
+ LJ_FUNC SBuf *lj_buf_putstr_rep(SBuf *sb, GCstr *s, int32_t rep);
92
+ LJ_FUNC SBuf *lj_buf_puttab(SBuf *sb, GCtab *t, GCstr *sep,
93
+ int32_t i, int32_t e);
94
+
95
+ /* Miscellaneous buffer operations */
96
+ LJ_FUNCA GCstr * LJ_FASTCALL lj_buf_tostr(SBuf *sb);
97
+ LJ_FUNC GCstr *lj_buf_cat2str(lua_State *L, GCstr *s1, GCstr *s2);
98
+ LJ_FUNC uint32_t LJ_FASTCALL lj_buf_ruleb128(const char **pp);
99
+
100
+ static LJ_AINLINE GCstr *lj_buf_str(lua_State *L, SBuf *sb)
101
+ {
102
+ return lj_str_new(L, sbufB(sb), sbuflen(sb));
103
+ }
104
+
105
+ #endif
@@ -0,0 +1,429 @@
1
+ /*
2
+ ** C data arithmetic.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #include "lj_obj.h"
7
+
8
+ #if LJ_HASFFI
9
+
10
+ #include "lj_gc.h"
11
+ #include "lj_err.h"
12
+ #include "lj_tab.h"
13
+ #include "lj_meta.h"
14
+ #include "lj_ir.h"
15
+ #include "lj_ctype.h"
16
+ #include "lj_cconv.h"
17
+ #include "lj_cdata.h"
18
+ #include "lj_carith.h"
19
+ #include "lj_strscan.h"
20
+
21
+ /* -- C data arithmetic --------------------------------------------------- */
22
+
23
+ /* Binary operands of an operator converted to ctypes. */
24
+ typedef struct CDArith {
25
+ uint8_t *p[2];
26
+ CType *ct[2];
27
+ } CDArith;
28
+
29
+ /* Check arguments for arithmetic metamethods. */
30
+ static int carith_checkarg(lua_State *L, CTState *cts, CDArith *ca)
31
+ {
32
+ TValue *o = L->base;
33
+ int ok = 1;
34
+ MSize i;
35
+ if (o+1 >= L->top)
36
+ lj_err_argt(L, 1, LUA_TCDATA);
37
+ for (i = 0; i < 2; i++, o++) {
38
+ if (tviscdata(o)) {
39
+ GCcdata *cd = cdataV(o);
40
+ CTypeID id = (CTypeID)cd->ctypeid;
41
+ CType *ct = ctype_raw(cts, id);
42
+ uint8_t *p = (uint8_t *)cdataptr(cd);
43
+ if (ctype_isptr(ct->info)) {
44
+ p = (uint8_t *)cdata_getptr(p, ct->size);
45
+ if (ctype_isref(ct->info)) ct = ctype_rawchild(cts, ct);
46
+ } else if (ctype_isfunc(ct->info)) {
47
+ p = (uint8_t *)*(void **)p;
48
+ ct = ctype_get(cts,
49
+ lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|id), CTSIZE_PTR));
50
+ }
51
+ if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct);
52
+ ca->ct[i] = ct;
53
+ ca->p[i] = p;
54
+ } else if (tvisint(o)) {
55
+ ca->ct[i] = ctype_get(cts, CTID_INT32);
56
+ ca->p[i] = (uint8_t *)&o->i;
57
+ } else if (tvisnum(o)) {
58
+ ca->ct[i] = ctype_get(cts, CTID_DOUBLE);
59
+ ca->p[i] = (uint8_t *)&o->n;
60
+ } else if (tvisnil(o)) {
61
+ ca->ct[i] = ctype_get(cts, CTID_P_VOID);
62
+ ca->p[i] = (uint8_t *)0;
63
+ } else if (tvisstr(o)) {
64
+ TValue *o2 = i == 0 ? o+1 : o-1;
65
+ CType *ct = ctype_raw(cts, cdataV(o2)->ctypeid);
66
+ ca->ct[i] = NULL;
67
+ ca->p[i] = (uint8_t *)strVdata(o);
68
+ ok = 0;
69
+ if (ctype_isenum(ct->info)) {
70
+ CTSize ofs;
71
+ CType *cct = lj_ctype_getfield(cts, ct, strV(o), &ofs);
72
+ if (cct && ctype_isconstval(cct->info)) {
73
+ ca->ct[i] = ctype_child(cts, cct);
74
+ ca->p[i] = (uint8_t *)&cct->size; /* Assumes ct does not grow. */
75
+ ok = 1;
76
+ } else {
77
+ ca->ct[1-i] = ct; /* Use enum to improve error message. */
78
+ ca->p[1-i] = NULL;
79
+ break;
80
+ }
81
+ }
82
+ } else {
83
+ ca->ct[i] = NULL;
84
+ ca->p[i] = (void *)(intptr_t)1; /* To make it unequal. */
85
+ ok = 0;
86
+ }
87
+ }
88
+ return ok;
89
+ }
90
+
91
+ /* Pointer arithmetic. */
92
+ static int carith_ptr(lua_State *L, CTState *cts, CDArith *ca, MMS mm)
93
+ {
94
+ CType *ctp = ca->ct[0];
95
+ uint8_t *pp = ca->p[0];
96
+ ptrdiff_t idx;
97
+ CTSize sz;
98
+ CTypeID id;
99
+ GCcdata *cd;
100
+ if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) {
101
+ if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) &&
102
+ (ctype_isptr(ca->ct[1]->info) || ctype_isrefarray(ca->ct[1]->info))) {
103
+ uint8_t *pp2 = ca->p[1];
104
+ if (mm == MM_eq) { /* Pointer equality. Incompatible pointers are ok. */
105
+ setboolV(L->top-1, (pp == pp2));
106
+ return 1;
107
+ }
108
+ if (!lj_cconv_compatptr(cts, ctp, ca->ct[1], CCF_IGNQUAL))
109
+ return 0;
110
+ if (mm == MM_sub) { /* Pointer difference. */
111
+ intptr_t diff;
112
+ sz = lj_ctype_size(cts, ctype_cid(ctp->info)); /* Element size. */
113
+ if (sz == 0 || sz == CTSIZE_INVALID)
114
+ return 0;
115
+ diff = ((intptr_t)pp - (intptr_t)pp2) / (int32_t)sz;
116
+ /* All valid pointer differences on x64 are in (-2^47, +2^47),
117
+ ** which fits into a double without loss of precision.
118
+ */
119
+ setintptrV(L->top-1, (int32_t)diff);
120
+ return 1;
121
+ } else if (mm == MM_lt) { /* Pointer comparison (unsigned). */
122
+ setboolV(L->top-1, ((uintptr_t)pp < (uintptr_t)pp2));
123
+ return 1;
124
+ } else {
125
+ lua_assert(mm == MM_le);
126
+ setboolV(L->top-1, ((uintptr_t)pp <= (uintptr_t)pp2));
127
+ return 1;
128
+ }
129
+ }
130
+ if (!((mm == MM_add || mm == MM_sub) && ctype_isnum(ca->ct[1]->info)))
131
+ return 0;
132
+ lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT_PSZ), ca->ct[1],
133
+ (uint8_t *)&idx, ca->p[1], 0);
134
+ if (mm == MM_sub) idx = -idx;
135
+ } else if (mm == MM_add && ctype_isnum(ctp->info) &&
136
+ (ctype_isptr(ca->ct[1]->info) || ctype_isrefarray(ca->ct[1]->info))) {
137
+ /* Swap pointer and index. */
138
+ ctp = ca->ct[1]; pp = ca->p[1];
139
+ lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT_PSZ), ca->ct[0],
140
+ (uint8_t *)&idx, ca->p[0], 0);
141
+ } else {
142
+ return 0;
143
+ }
144
+ sz = lj_ctype_size(cts, ctype_cid(ctp->info)); /* Element size. */
145
+ if (sz == CTSIZE_INVALID)
146
+ return 0;
147
+ pp += idx*(int32_t)sz; /* Compute pointer + index. */
148
+ id = lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|ctype_cid(ctp->info)),
149
+ CTSIZE_PTR);
150
+ cd = lj_cdata_new(cts, id, CTSIZE_PTR);
151
+ *(uint8_t **)cdataptr(cd) = pp;
152
+ setcdataV(L, L->top-1, cd);
153
+ lj_gc_check(L);
154
+ return 1;
155
+ }
156
+
157
+ /* 64 bit integer arithmetic. */
158
+ static int carith_int64(lua_State *L, CTState *cts, CDArith *ca, MMS mm)
159
+ {
160
+ if (ctype_isnum(ca->ct[0]->info) && ca->ct[0]->size <= 8 &&
161
+ ctype_isnum(ca->ct[1]->info) && ca->ct[1]->size <= 8) {
162
+ CTypeID id = (((ca->ct[0]->info & CTF_UNSIGNED) && ca->ct[0]->size == 8) ||
163
+ ((ca->ct[1]->info & CTF_UNSIGNED) && ca->ct[1]->size == 8)) ?
164
+ CTID_UINT64 : CTID_INT64;
165
+ CType *ct = ctype_get(cts, id);
166
+ GCcdata *cd;
167
+ uint64_t u0, u1, *up;
168
+ lj_cconv_ct_ct(cts, ct, ca->ct[0], (uint8_t *)&u0, ca->p[0], 0);
169
+ if (mm != MM_unm)
170
+ lj_cconv_ct_ct(cts, ct, ca->ct[1], (uint8_t *)&u1, ca->p[1], 0);
171
+ switch (mm) {
172
+ case MM_eq:
173
+ setboolV(L->top-1, (u0 == u1));
174
+ return 1;
175
+ case MM_lt:
176
+ setboolV(L->top-1,
177
+ id == CTID_INT64 ? ((int64_t)u0 < (int64_t)u1) : (u0 < u1));
178
+ return 1;
179
+ case MM_le:
180
+ setboolV(L->top-1,
181
+ id == CTID_INT64 ? ((int64_t)u0 <= (int64_t)u1) : (u0 <= u1));
182
+ return 1;
183
+ default: break;
184
+ }
185
+ cd = lj_cdata_new(cts, id, 8);
186
+ up = (uint64_t *)cdataptr(cd);
187
+ setcdataV(L, L->top-1, cd);
188
+ switch (mm) {
189
+ case MM_add: *up = u0 + u1; break;
190
+ case MM_sub: *up = u0 - u1; break;
191
+ case MM_mul: *up = u0 * u1; break;
192
+ case MM_div:
193
+ if (id == CTID_INT64)
194
+ *up = (uint64_t)lj_carith_divi64((int64_t)u0, (int64_t)u1);
195
+ else
196
+ *up = lj_carith_divu64(u0, u1);
197
+ break;
198
+ case MM_mod:
199
+ if (id == CTID_INT64)
200
+ *up = (uint64_t)lj_carith_modi64((int64_t)u0, (int64_t)u1);
201
+ else
202
+ *up = lj_carith_modu64(u0, u1);
203
+ break;
204
+ case MM_pow:
205
+ if (id == CTID_INT64)
206
+ *up = (uint64_t)lj_carith_powi64((int64_t)u0, (int64_t)u1);
207
+ else
208
+ *up = lj_carith_powu64(u0, u1);
209
+ break;
210
+ case MM_unm: *up = (uint64_t)-(int64_t)u0; break;
211
+ default: lua_assert(0); break;
212
+ }
213
+ lj_gc_check(L);
214
+ return 1;
215
+ }
216
+ return 0;
217
+ }
218
+
219
+ /* Handle ctype arithmetic metamethods. */
220
+ static int lj_carith_meta(lua_State *L, CTState *cts, CDArith *ca, MMS mm)
221
+ {
222
+ cTValue *tv = NULL;
223
+ if (tviscdata(L->base)) {
224
+ CTypeID id = cdataV(L->base)->ctypeid;
225
+ CType *ct = ctype_raw(cts, id);
226
+ if (ctype_isptr(ct->info)) id = ctype_cid(ct->info);
227
+ tv = lj_ctype_meta(cts, id, mm);
228
+ }
229
+ if (!tv && L->base+1 < L->top && tviscdata(L->base+1)) {
230
+ CTypeID id = cdataV(L->base+1)->ctypeid;
231
+ CType *ct = ctype_raw(cts, id);
232
+ if (ctype_isptr(ct->info)) id = ctype_cid(ct->info);
233
+ tv = lj_ctype_meta(cts, id, mm);
234
+ }
235
+ if (!tv) {
236
+ const char *repr[2];
237
+ int i, isenum = -1, isstr = -1;
238
+ if (mm == MM_eq) { /* Equality checks never raise an error. */
239
+ int eq = ca->p[0] == ca->p[1];
240
+ setboolV(L->top-1, eq);
241
+ setboolV(&G(L)->tmptv2, eq); /* Remember for trace recorder. */
242
+ return 1;
243
+ }
244
+ for (i = 0; i < 2; i++) {
245
+ if (ca->ct[i] && tviscdata(L->base+i)) {
246
+ if (ctype_isenum(ca->ct[i]->info)) isenum = i;
247
+ repr[i] = strdata(lj_ctype_repr(L, ctype_typeid(cts, ca->ct[i]), NULL));
248
+ } else {
249
+ if (tvisstr(&L->base[i])) isstr = i;
250
+ repr[i] = lj_typename(&L->base[i]);
251
+ }
252
+ }
253
+ if ((isenum ^ isstr) == 1)
254
+ lj_err_callerv(L, LJ_ERR_FFI_BADCONV, repr[isstr], repr[isenum]);
255
+ lj_err_callerv(L, mm == MM_len ? LJ_ERR_FFI_BADLEN :
256
+ mm == MM_concat ? LJ_ERR_FFI_BADCONCAT :
257
+ mm < MM_add ? LJ_ERR_FFI_BADCOMP : LJ_ERR_FFI_BADARITH,
258
+ repr[0], repr[1]);
259
+ }
260
+ return lj_meta_tailcall(L, tv);
261
+ }
262
+
263
+ /* Arithmetic operators for cdata. */
264
+ int lj_carith_op(lua_State *L, MMS mm)
265
+ {
266
+ CTState *cts = ctype_cts(L);
267
+ CDArith ca;
268
+ if (carith_checkarg(L, cts, &ca)) {
269
+ if (carith_int64(L, cts, &ca, mm) || carith_ptr(L, cts, &ca, mm)) {
270
+ copyTV(L, &G(L)->tmptv2, L->top-1); /* Remember for trace recorder. */
271
+ return 1;
272
+ }
273
+ }
274
+ return lj_carith_meta(L, cts, &ca, mm);
275
+ }
276
+
277
+ /* -- 64 bit bit operations helpers --------------------------------------- */
278
+
279
+ #if LJ_64
280
+ #define B64DEF(name) \
281
+ static LJ_AINLINE uint64_t lj_carith_##name(uint64_t x, int32_t sh)
282
+ #else
283
+ /* Not inlined on 32 bit archs, since some of these are quite lengthy. */
284
+ #define B64DEF(name) \
285
+ uint64_t LJ_NOINLINE lj_carith_##name(uint64_t x, int32_t sh)
286
+ #endif
287
+
288
+ B64DEF(shl64) { return x << (sh&63); }
289
+ B64DEF(shr64) { return x >> (sh&63); }
290
+ B64DEF(sar64) { return (uint64_t)((int64_t)x >> (sh&63)); }
291
+ B64DEF(rol64) { return lj_rol(x, (sh&63)); }
292
+ B64DEF(ror64) { return lj_ror(x, (sh&63)); }
293
+
294
+ #undef B64DEF
295
+
296
+ uint64_t lj_carith_shift64(uint64_t x, int32_t sh, int op)
297
+ {
298
+ switch (op) {
299
+ case IR_BSHL-IR_BSHL: x = lj_carith_shl64(x, sh); break;
300
+ case IR_BSHR-IR_BSHL: x = lj_carith_shr64(x, sh); break;
301
+ case IR_BSAR-IR_BSHL: x = lj_carith_sar64(x, sh); break;
302
+ case IR_BROL-IR_BSHL: x = lj_carith_rol64(x, sh); break;
303
+ case IR_BROR-IR_BSHL: x = lj_carith_ror64(x, sh); break;
304
+ default: lua_assert(0); break;
305
+ }
306
+ return x;
307
+ }
308
+
309
+ /* Equivalent to lj_lib_checkbit(), but handles cdata. */
310
+ uint64_t lj_carith_check64(lua_State *L, int narg, CTypeID *id)
311
+ {
312
+ TValue *o = L->base + narg-1;
313
+ if (o >= L->top) {
314
+ err:
315
+ lj_err_argt(L, narg, LUA_TNUMBER);
316
+ } else if (LJ_LIKELY(tvisnumber(o))) {
317
+ /* Handled below. */
318
+ } else if (tviscdata(o)) {
319
+ CTState *cts = ctype_cts(L);
320
+ uint8_t *sp = (uint8_t *)cdataptr(cdataV(o));
321
+ CTypeID sid = cdataV(o)->ctypeid;
322
+ CType *s = ctype_get(cts, sid);
323
+ uint64_t x;
324
+ if (ctype_isref(s->info)) {
325
+ sp = *(void **)sp;
326
+ sid = ctype_cid(s->info);
327
+ }
328
+ s = ctype_raw(cts, sid);
329
+ if (ctype_isenum(s->info)) s = ctype_child(cts, s);
330
+ if ((s->info & (CTMASK_NUM|CTF_BOOL|CTF_FP|CTF_UNSIGNED)) ==
331
+ CTINFO(CT_NUM, CTF_UNSIGNED) && s->size == 8)
332
+ *id = CTID_UINT64; /* Use uint64_t, since it has the highest rank. */
333
+ else if (!*id)
334
+ *id = CTID_INT64; /* Use int64_t, unless already set. */
335
+ lj_cconv_ct_ct(cts, ctype_get(cts, *id), s,
336
+ (uint8_t *)&x, sp, CCF_ARG(narg));
337
+ return x;
338
+ } else if (!(tvisstr(o) && lj_strscan_number(strV(o), o))) {
339
+ goto err;
340
+ }
341
+ if (LJ_LIKELY(tvisint(o))) {
342
+ return (uint32_t)intV(o);
343
+ } else {
344
+ int32_t i = lj_num2bit(numV(o));
345
+ if (LJ_DUALNUM) setintV(o, i);
346
+ return (uint32_t)i;
347
+ }
348
+ }
349
+
350
+
351
+ /* -- 64 bit integer arithmetic helpers ----------------------------------- */
352
+
353
+ #if LJ_32 && LJ_HASJIT
354
+ /* Signed/unsigned 64 bit multiplication. */
355
+ int64_t lj_carith_mul64(int64_t a, int64_t b)
356
+ {
357
+ return a * b;
358
+ }
359
+ #endif
360
+
361
+ /* Unsigned 64 bit division. */
362
+ uint64_t lj_carith_divu64(uint64_t a, uint64_t b)
363
+ {
364
+ if (b == 0) return U64x(80000000,00000000);
365
+ return a / b;
366
+ }
367
+
368
+ /* Signed 64 bit division. */
369
+ int64_t lj_carith_divi64(int64_t a, int64_t b)
370
+ {
371
+ if (b == 0 || (a == (int64_t)U64x(80000000,00000000) && b == -1))
372
+ return U64x(80000000,00000000);
373
+ return a / b;
374
+ }
375
+
376
+ /* Unsigned 64 bit modulo. */
377
+ uint64_t lj_carith_modu64(uint64_t a, uint64_t b)
378
+ {
379
+ if (b == 0) return U64x(80000000,00000000);
380
+ return a % b;
381
+ }
382
+
383
+ /* Signed 64 bit modulo. */
384
+ int64_t lj_carith_modi64(int64_t a, int64_t b)
385
+ {
386
+ if (b == 0) return U64x(80000000,00000000);
387
+ if (a == (int64_t)U64x(80000000,00000000) && b == -1) return 0;
388
+ return a % b;
389
+ }
390
+
391
+ /* Unsigned 64 bit x^k. */
392
+ uint64_t lj_carith_powu64(uint64_t x, uint64_t k)
393
+ {
394
+ uint64_t y;
395
+ if (k == 0)
396
+ return 1;
397
+ for (; (k & 1) == 0; k >>= 1) x *= x;
398
+ y = x;
399
+ if ((k >>= 1) != 0) {
400
+ for (;;) {
401
+ x *= x;
402
+ if (k == 1) break;
403
+ if (k & 1) y *= x;
404
+ k >>= 1;
405
+ }
406
+ y *= x;
407
+ }
408
+ return y;
409
+ }
410
+
411
+ /* Signed 64 bit x^k. */
412
+ int64_t lj_carith_powi64(int64_t x, int64_t k)
413
+ {
414
+ if (k == 0)
415
+ return 1;
416
+ if (k < 0) {
417
+ if (x == 0)
418
+ return U64x(7fffffff,ffffffff);
419
+ else if (x == 1)
420
+ return 1;
421
+ else if (x == -1)
422
+ return (k & 1) ? -1 : 1;
423
+ else
424
+ return 0;
425
+ }
426
+ return (int64_t)lj_carith_powu64((uint64_t)x, (uint64_t)k);
427
+ }
428
+
429
+ #endif