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,27 @@
1
+ /*
2
+ ** String handling.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_STR_H
7
+ #define _LJ_STR_H
8
+
9
+ #include <stdarg.h>
10
+
11
+ #include "lj_obj.h"
12
+
13
+ /* String helpers. */
14
+ LJ_FUNC int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b);
15
+ LJ_FUNC const char *lj_str_find(const char *s, const char *f,
16
+ MSize slen, MSize flen);
17
+ LJ_FUNC int lj_str_haspattern(GCstr *s);
18
+
19
+ /* String interning. */
20
+ LJ_FUNC void lj_str_resize(lua_State *L, MSize newmask);
21
+ LJ_FUNCA GCstr *lj_str_new(lua_State *L, const char *str, size_t len);
22
+ LJ_FUNC void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s);
23
+
24
+ #define lj_str_newz(L, s) (lj_str_new(L, s, strlen(s)))
25
+ #define lj_str_newlit(L, s) (lj_str_new(L, "" s, sizeof(s)-1))
26
+
27
+ #endif
@@ -0,0 +1,554 @@
1
+ /*
2
+ ** String formatting.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #include <stdio.h>
7
+
8
+ #define lj_strfmt_c
9
+ #define LUA_CORE
10
+
11
+ #include "lj_obj.h"
12
+ #include "lj_buf.h"
13
+ #include "lj_str.h"
14
+ #include "lj_state.h"
15
+ #include "lj_char.h"
16
+ #include "lj_strfmt.h"
17
+
18
+ /* -- Format parser ------------------------------------------------------- */
19
+
20
+ static const uint8_t strfmt_map[('x'-'A')+1] = {
21
+ STRFMT_A,0,0,0,STRFMT_E,0,STRFMT_G,0,0,0,0,0,0,
22
+ 0,0,0,0,0,0,0,0,0,0,STRFMT_X,0,0,
23
+ 0,0,0,0,0,0,
24
+ STRFMT_A,0,STRFMT_C,STRFMT_D,STRFMT_E,STRFMT_F,STRFMT_G,0,STRFMT_I,0,0,0,0,
25
+ 0,STRFMT_O,STRFMT_P,STRFMT_Q,0,STRFMT_S,0,STRFMT_U,0,0,STRFMT_X
26
+ };
27
+
28
+ SFormat LJ_FASTCALL lj_strfmt_parse(FormatState *fs)
29
+ {
30
+ const uint8_t *p = fs->p, *e = fs->e;
31
+ fs->str = (const char *)p;
32
+ for (; p < e; p++) {
33
+ if (*p == '%') { /* Escape char? */
34
+ if (p[1] == '%') { /* '%%'? */
35
+ fs->p = ++p+1;
36
+ goto retlit;
37
+ } else {
38
+ SFormat sf = 0;
39
+ uint32_t c;
40
+ if (p != (const uint8_t *)fs->str)
41
+ break;
42
+ for (p++; (uint32_t)*p - ' ' <= (uint32_t)('0' - ' '); p++) {
43
+ /* Parse flags. */
44
+ if (*p == '-') sf |= STRFMT_F_LEFT;
45
+ else if (*p == '+') sf |= STRFMT_F_PLUS;
46
+ else if (*p == '0') sf |= STRFMT_F_ZERO;
47
+ else if (*p == ' ') sf |= STRFMT_F_SPACE;
48
+ else if (*p == '#') sf |= STRFMT_F_ALT;
49
+ else break;
50
+ }
51
+ if ((uint32_t)*p - '0' < 10) { /* Parse width. */
52
+ uint32_t width = (uint32_t)*p++ - '0';
53
+ if ((uint32_t)*p - '0' < 10)
54
+ width = (uint32_t)*p++ - '0' + width*10;
55
+ sf |= (width << STRFMT_SH_WIDTH);
56
+ }
57
+ if (*p == '.') { /* Parse precision. */
58
+ uint32_t prec = 0;
59
+ p++;
60
+ if ((uint32_t)*p - '0' < 10) {
61
+ prec = (uint32_t)*p++ - '0';
62
+ if ((uint32_t)*p - '0' < 10)
63
+ prec = (uint32_t)*p++ - '0' + prec*10;
64
+ }
65
+ sf |= ((prec+1) << STRFMT_SH_PREC);
66
+ }
67
+ /* Parse conversion. */
68
+ c = (uint32_t)*p - 'A';
69
+ if (LJ_LIKELY(c <= (uint32_t)('x' - 'A'))) {
70
+ uint32_t sx = strfmt_map[c];
71
+ if (sx) {
72
+ fs->p = p+1;
73
+ return (sf | sx | ((c & 0x20) ? 0 : STRFMT_F_UPPER));
74
+ }
75
+ }
76
+ /* Return error location. */
77
+ if (*p >= 32) p++;
78
+ fs->len = (MSize)(p - (const uint8_t *)fs->str);
79
+ fs->p = fs->e;
80
+ return STRFMT_ERR;
81
+ }
82
+ }
83
+ }
84
+ fs->p = p;
85
+ retlit:
86
+ fs->len = (MSize)(p - (const uint8_t *)fs->str);
87
+ return fs->len ? STRFMT_LIT : STRFMT_EOF;
88
+ }
89
+
90
+ /* -- Raw conversions ----------------------------------------------------- */
91
+
92
+ /* Write number to bufer. */
93
+ char * LJ_FASTCALL lj_strfmt_wnum(char *p, cTValue *o)
94
+ {
95
+ if (LJ_LIKELY((o->u32.hi << 1) < 0xffe00000)) { /* Finite? */
96
+ #if __BIONIC__
97
+ if (tvismzero(o)) { *p++ = '-'; *p++ = '0'; return p; }
98
+ #endif
99
+ return p + lua_number2str(p, o->n);
100
+ } else if (((o->u32.hi & 0x000fffff) | o->u32.lo) != 0) {
101
+ *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
102
+ } else if ((o->u32.hi & 0x80000000) == 0) {
103
+ *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
104
+ } else {
105
+ *p++ = '-'; *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
106
+ }
107
+ return p;
108
+ }
109
+
110
+ #define WINT_R(x, sh, sc) \
111
+ { uint32_t d = (x*(((1<<sh)+sc-1)/sc))>>sh; x -= d*sc; *p++ = (char)('0'+d); }
112
+
113
+ /* Write integer to buffer. */
114
+ char * LJ_FASTCALL lj_strfmt_wint(char *p, int32_t k)
115
+ {
116
+ uint32_t u = (uint32_t)k;
117
+ if (k < 0) { u = (uint32_t)-k; *p++ = '-'; }
118
+ if (u < 10000) {
119
+ if (u < 10) goto dig1; if (u < 100) goto dig2; if (u < 1000) goto dig3;
120
+ } else {
121
+ uint32_t v = u / 10000; u -= v * 10000;
122
+ if (v < 10000) {
123
+ if (v < 10) goto dig5; if (v < 100) goto dig6; if (v < 1000) goto dig7;
124
+ } else {
125
+ uint32_t w = v / 10000; v -= w * 10000;
126
+ if (w >= 10) WINT_R(w, 10, 10)
127
+ *p++ = (char)('0'+w);
128
+ }
129
+ WINT_R(v, 23, 1000)
130
+ dig7: WINT_R(v, 12, 100)
131
+ dig6: WINT_R(v, 10, 10)
132
+ dig5: *p++ = (char)('0'+v);
133
+ }
134
+ WINT_R(u, 23, 1000)
135
+ dig3: WINT_R(u, 12, 100)
136
+ dig2: WINT_R(u, 10, 10)
137
+ dig1: *p++ = (char)('0'+u);
138
+ return p;
139
+ }
140
+ #undef WINT_R
141
+
142
+ /* Write pointer to buffer. */
143
+ char * LJ_FASTCALL lj_strfmt_wptr(char *p, const void *v)
144
+ {
145
+ ptrdiff_t x = (ptrdiff_t)v;
146
+ MSize i, n = STRFMT_MAXBUF_PTR;
147
+ if (x == 0) {
148
+ *p++ = 'N'; *p++ = 'U'; *p++ = 'L'; *p++ = 'L';
149
+ return p;
150
+ }
151
+ #if LJ_64
152
+ /* Shorten output for 64 bit pointers. */
153
+ n = 2+2*4+((x >> 32) ? 2+2*(lj_fls((uint32_t)(x >> 32))>>3) : 0);
154
+ #endif
155
+ p[0] = '0';
156
+ p[1] = 'x';
157
+ for (i = n-1; i >= 2; i--, x >>= 4)
158
+ p[i] = "0123456789abcdef"[(x & 15)];
159
+ return p+n;
160
+ }
161
+
162
+ /* Write ULEB128 to buffer. */
163
+ char * LJ_FASTCALL lj_strfmt_wuleb128(char *p, uint32_t v)
164
+ {
165
+ for (; v >= 0x80; v >>= 7)
166
+ *p++ = (char)((v & 0x7f) | 0x80);
167
+ *p++ = (char)v;
168
+ return p;
169
+ }
170
+
171
+ /* Return string or write number to buffer and return pointer to start. */
172
+ const char *lj_strfmt_wstrnum(char *buf, cTValue *o, MSize *lenp)
173
+ {
174
+ if (tvisstr(o)) {
175
+ *lenp = strV(o)->len;
176
+ return strVdata(o);
177
+ } else if (tvisint(o)) {
178
+ *lenp = (MSize)(lj_strfmt_wint(buf, intV(o)) - buf);
179
+ return buf;
180
+ } else if (tvisnum(o)) {
181
+ *lenp = (MSize)(lj_strfmt_wnum(buf, o) - buf);
182
+ return buf;
183
+ } else {
184
+ return NULL;
185
+ }
186
+ }
187
+
188
+ /* -- Unformatted conversions to buffer ----------------------------------- */
189
+
190
+ /* Add integer to buffer. */
191
+ SBuf * LJ_FASTCALL lj_strfmt_putint(SBuf *sb, int32_t k)
192
+ {
193
+ setsbufP(sb, lj_strfmt_wint(lj_buf_more(sb, STRFMT_MAXBUF_INT), k));
194
+ return sb;
195
+ }
196
+
197
+ #if LJ_HASJIT
198
+ /* Add number to buffer. */
199
+ SBuf * LJ_FASTCALL lj_strfmt_putnum(SBuf *sb, cTValue *o)
200
+ {
201
+ setsbufP(sb, lj_strfmt_wnum(lj_buf_more(sb, STRFMT_MAXBUF_NUM), o));
202
+ return sb;
203
+ }
204
+ #endif
205
+
206
+ SBuf * LJ_FASTCALL lj_strfmt_putptr(SBuf *sb, const void *v)
207
+ {
208
+ setsbufP(sb, lj_strfmt_wptr(lj_buf_more(sb, STRFMT_MAXBUF_PTR), v));
209
+ return sb;
210
+ }
211
+
212
+ /* Add quoted string to buffer. */
213
+ SBuf * LJ_FASTCALL lj_strfmt_putquoted(SBuf *sb, GCstr *str)
214
+ {
215
+ const char *s = strdata(str);
216
+ MSize len = str->len;
217
+ lj_buf_putb(sb, '"');
218
+ while (len--) {
219
+ uint32_t c = (uint32_t)(uint8_t)*s++;
220
+ char *p = lj_buf_more(sb, 4);
221
+ if (c == '"' || c == '\\' || c == '\n') {
222
+ *p++ = '\\';
223
+ } else if (lj_char_iscntrl(c)) { /* This can only be 0-31 or 127. */
224
+ uint32_t d;
225
+ *p++ = '\\';
226
+ if (c >= 100 || lj_char_isdigit((uint8_t)*s)) {
227
+ *p++ = (char)('0'+(c >= 100)); if (c >= 100) c -= 100;
228
+ goto tens;
229
+ } else if (c >= 10) {
230
+ tens:
231
+ d = (c * 205) >> 11; c -= d * 10; *p++ = (char)('0'+d);
232
+ }
233
+ c += '0';
234
+ }
235
+ *p++ = (char)c;
236
+ setsbufP(sb, p);
237
+ }
238
+ lj_buf_putb(sb, '"');
239
+ return sb;
240
+ }
241
+
242
+ /* -- Formatted conversions to buffer ------------------------------------- */
243
+
244
+ /* Add formatted char to buffer. */
245
+ SBuf *lj_strfmt_putfchar(SBuf *sb, SFormat sf, int32_t c)
246
+ {
247
+ MSize width = STRFMT_WIDTH(sf);
248
+ char *p = lj_buf_more(sb, width > 1 ? width : 1);
249
+ if ((sf & STRFMT_F_LEFT)) *p++ = (char)c;
250
+ while (width-- > 1) *p++ = ' ';
251
+ if (!(sf & STRFMT_F_LEFT)) *p++ = (char)c;
252
+ setsbufP(sb, p);
253
+ return sb;
254
+ }
255
+
256
+ /* Add formatted string to buffer. */
257
+ SBuf *lj_strfmt_putfstr(SBuf *sb, SFormat sf, GCstr *str)
258
+ {
259
+ MSize len = str->len <= STRFMT_PREC(sf) ? str->len : STRFMT_PREC(sf);
260
+ MSize width = STRFMT_WIDTH(sf);
261
+ char *p = lj_buf_more(sb, width > len ? width : len);
262
+ if ((sf & STRFMT_F_LEFT)) p = lj_buf_wmem(p, strdata(str), len);
263
+ while (width-- > len) *p++ = ' ';
264
+ if (!(sf & STRFMT_F_LEFT)) p = lj_buf_wmem(p, strdata(str), len);
265
+ setsbufP(sb, p);
266
+ return sb;
267
+ }
268
+
269
+ /* Add formatted signed/unsigned integer to buffer. */
270
+ SBuf *lj_strfmt_putfxint(SBuf *sb, SFormat sf, uint64_t k)
271
+ {
272
+ char buf[STRFMT_MAXBUF_XINT], *q = buf + sizeof(buf), *p;
273
+ #ifdef LUA_USE_ASSERT
274
+ char *ps;
275
+ #endif
276
+ MSize prefix = 0, len, prec, pprec, width, need;
277
+
278
+ /* Figure out signed prefixes. */
279
+ if (STRFMT_TYPE(sf) == STRFMT_INT) {
280
+ if ((int64_t)k < 0) {
281
+ k = (uint64_t)-(int64_t)k;
282
+ prefix = 256 + '-';
283
+ } else if ((sf & STRFMT_F_PLUS)) {
284
+ prefix = 256 + '+';
285
+ } else if ((sf & STRFMT_F_SPACE)) {
286
+ prefix = 256 + ' ';
287
+ }
288
+ }
289
+
290
+ /* Convert number and store to fixed-size buffer in reverse order. */
291
+ prec = STRFMT_PREC(sf);
292
+ if ((int32_t)prec >= 0) sf &= ~STRFMT_F_ZERO;
293
+ if (k == 0) { /* Special-case zero argument. */
294
+ if (prec != 0 ||
295
+ (sf & (STRFMT_T_OCT|STRFMT_F_ALT)) == (STRFMT_T_OCT|STRFMT_F_ALT))
296
+ *--q = '0';
297
+ } else if (!(sf & (STRFMT_T_HEX|STRFMT_T_OCT))) { /* Decimal. */
298
+ uint32_t k2;
299
+ while ((k >> 32)) { *--q = (char)('0' + k % 10); k /= 10; }
300
+ k2 = (uint32_t)k;
301
+ do { *--q = (char)('0' + k2 % 10); k2 /= 10; } while (k2);
302
+ } else if ((sf & STRFMT_T_HEX)) { /* Hex. */
303
+ const char *hexdig = (sf & STRFMT_F_UPPER) ? "0123456789ABCDEF" :
304
+ "0123456789abcdef";
305
+ do { *--q = hexdig[(k & 15)]; k >>= 4; } while (k);
306
+ if ((sf & STRFMT_F_ALT)) prefix = 512 + ((sf & STRFMT_F_UPPER) ? 'X' : 'x');
307
+ } else { /* Octal. */
308
+ do { *--q = (char)('0' + (uint32_t)(k & 7)); k >>= 3; } while (k);
309
+ if ((sf & STRFMT_F_ALT)) *--q = '0';
310
+ }
311
+
312
+ /* Calculate sizes. */
313
+ len = (MSize)(buf + sizeof(buf) - q);
314
+ if ((int32_t)len >= (int32_t)prec) prec = len;
315
+ width = STRFMT_WIDTH(sf);
316
+ pprec = prec + (prefix >> 8);
317
+ need = width > pprec ? width : pprec;
318
+ p = lj_buf_more(sb, need);
319
+ #ifdef LUA_USE_ASSERT
320
+ ps = p;
321
+ #endif
322
+
323
+ /* Format number with leading/trailing whitespace and zeros. */
324
+ if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == 0)
325
+ while (width-- > pprec) *p++ = ' ';
326
+ if (prefix) {
327
+ if ((char)prefix >= 'X') *p++ = '0';
328
+ *p++ = (char)prefix;
329
+ }
330
+ if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == STRFMT_F_ZERO)
331
+ while (width-- > pprec) *p++ = '0';
332
+ while (prec-- > len) *p++ = '0';
333
+ while (q < buf + sizeof(buf)) *p++ = *q++; /* Add number itself. */
334
+ if ((sf & STRFMT_F_LEFT))
335
+ while (width-- > pprec) *p++ = ' ';
336
+
337
+ lua_assert(need == (MSize)(p - ps));
338
+ setsbufP(sb, p);
339
+ return sb;
340
+ }
341
+
342
+ /* Add number formatted as signed integer to buffer. */
343
+ SBuf *lj_strfmt_putfnum_int(SBuf *sb, SFormat sf, lua_Number n)
344
+ {
345
+ int64_t k = (int64_t)n;
346
+ if (checki32(k) && sf == STRFMT_INT)
347
+ return lj_strfmt_putint(sb, (int32_t)k); /* Shortcut for plain %d. */
348
+ else
349
+ return lj_strfmt_putfxint(sb, sf, (uint64_t)k);
350
+ }
351
+
352
+ /* Add number formatted as unsigned integer to buffer. */
353
+ SBuf *lj_strfmt_putfnum_uint(SBuf *sb, SFormat sf, lua_Number n)
354
+ {
355
+ int64_t k;
356
+ if (n >= 9223372036854775808.0)
357
+ k = (int64_t)(n - 18446744073709551616.0);
358
+ else
359
+ k = (int64_t)n;
360
+ return lj_strfmt_putfxint(sb, sf, (uint64_t)k);
361
+ }
362
+
363
+ /* Max. sprintf buffer size needed. At least #string.format("%.99f", -1e308). */
364
+ #define STRFMT_FMTNUMBUF 512
365
+
366
+ /* Add formatted floating-point number to buffer. */
367
+ SBuf *lj_strfmt_putfnum(SBuf *sb, SFormat sf, lua_Number n)
368
+ {
369
+ TValue tv;
370
+ tv.n = n;
371
+ if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) {
372
+ /* Canonicalize output of non-finite values. */
373
+ MSize width = STRFMT_WIDTH(sf), len = 3;
374
+ int prefix = 0, ch = (sf & STRFMT_F_UPPER) ? 0x202020 : 0;
375
+ char *p;
376
+ if (((tv.u32.hi & 0x000fffff) | tv.u32.lo) != 0) {
377
+ ch ^= ('n' << 16) | ('a' << 8) | 'n';
378
+ if ((sf & STRFMT_F_SPACE)) prefix = ' ';
379
+ } else {
380
+ ch ^= ('i' << 16) | ('n' << 8) | 'f';
381
+ if ((tv.u32.hi & 0x80000000)) prefix = '-';
382
+ else if ((sf & STRFMT_F_PLUS)) prefix = '+';
383
+ else if ((sf & STRFMT_F_SPACE)) prefix = ' ';
384
+ }
385
+ if (prefix) len = 4;
386
+ p = lj_buf_more(sb, width > len ? width : len);
387
+ if (!(sf & STRFMT_F_LEFT)) while (width-- > len) *p++ = ' ';
388
+ if (prefix) *p++ = prefix;
389
+ *p++ = (char)(ch >> 16); *p++ = (char)(ch >> 8); *p++ = (char)ch;
390
+ if ((sf & STRFMT_F_LEFT)) while (width-- > len) *p++ = ' ';
391
+ setsbufP(sb, p);
392
+ } else { /* Delegate to sprintf() for now. */
393
+ uint8_t width = (uint8_t)STRFMT_WIDTH(sf), prec = (uint8_t)STRFMT_PREC(sf);
394
+ char fmt[1+5+2+3+1+1], *p = fmt;
395
+ *p++ = '%';
396
+ if ((sf & STRFMT_F_LEFT)) *p++ = '-';
397
+ if ((sf & STRFMT_F_PLUS)) *p++ = '+';
398
+ if ((sf & STRFMT_F_ZERO)) *p++ = '0';
399
+ if ((sf & STRFMT_F_SPACE)) *p++ = ' ';
400
+ if ((sf & STRFMT_F_ALT)) *p++ = '#';
401
+ if (width) {
402
+ uint8_t x = width / 10, y = width % 10;
403
+ if (x) *p++ = '0' + x;
404
+ *p++ = '0' + y;
405
+ }
406
+ if (prec != 255) {
407
+ uint8_t x = prec / 10, y = prec % 10;
408
+ *p++ = '.';
409
+ if (x) *p++ = '0' + x;
410
+ *p++ = '0' + y;
411
+ }
412
+ *p++ = (0x67666561 >> (STRFMT_FP(sf)<<3)) ^ ((sf & STRFMT_F_UPPER)?0x20:0);
413
+ *p = '\0';
414
+ p = lj_buf_more(sb, STRFMT_FMTNUMBUF);
415
+ setsbufP(sb, p + sprintf(p, fmt, n));
416
+ }
417
+ return sb;
418
+ }
419
+
420
+ /* -- Conversions to strings ---------------------------------------------- */
421
+
422
+ /* Convert integer to string. */
423
+ GCstr * LJ_FASTCALL lj_strfmt_int(lua_State *L, int32_t k)
424
+ {
425
+ char buf[STRFMT_MAXBUF_INT];
426
+ MSize len = (MSize)(lj_strfmt_wint(buf, k) - buf);
427
+ return lj_str_new(L, buf, len);
428
+ }
429
+
430
+ /* Convert number to string. */
431
+ GCstr * LJ_FASTCALL lj_strfmt_num(lua_State *L, cTValue *o)
432
+ {
433
+ char buf[STRFMT_MAXBUF_NUM];
434
+ MSize len = (MSize)(lj_strfmt_wnum(buf, o) - buf);
435
+ return lj_str_new(L, buf, len);
436
+ }
437
+
438
+ /* Convert integer or number to string. */
439
+ GCstr * LJ_FASTCALL lj_strfmt_number(lua_State *L, cTValue *o)
440
+ {
441
+ return tvisint(o) ? lj_strfmt_int(L, intV(o)) : lj_strfmt_num(L, o);
442
+ }
443
+
444
+ #if LJ_HASJIT
445
+ /* Convert char value to string. */
446
+ GCstr * LJ_FASTCALL lj_strfmt_char(lua_State *L, int c)
447
+ {
448
+ char buf[1];
449
+ buf[0] = c;
450
+ return lj_str_new(L, buf, 1);
451
+ }
452
+ #endif
453
+
454
+ /* Raw conversion of object to string. */
455
+ GCstr * LJ_FASTCALL lj_strfmt_obj(lua_State *L, cTValue *o)
456
+ {
457
+ if (tvisstr(o)) {
458
+ return strV(o);
459
+ } else if (tvisnumber(o)) {
460
+ return lj_strfmt_number(L, o);
461
+ } else if (tvisnil(o)) {
462
+ return lj_str_newlit(L, "nil");
463
+ } else if (tvisfalse(o)) {
464
+ return lj_str_newlit(L, "false");
465
+ } else if (tvistrue(o)) {
466
+ return lj_str_newlit(L, "true");
467
+ } else {
468
+ char buf[8+2+2+16], *p = buf;
469
+ p = lj_buf_wmem(p, lj_typename(o), (MSize)strlen(lj_typename(o)));
470
+ *p++ = ':'; *p++ = ' ';
471
+ if (tvisfunc(o) && isffunc(funcV(o))) {
472
+ p = lj_buf_wmem(p, "builtin#", 8);
473
+ p = lj_strfmt_wint(p, funcV(o)->c.ffid);
474
+ } else {
475
+ p = lj_strfmt_wptr(p, lj_obj_ptr(o));
476
+ }
477
+ return lj_str_new(L, buf, (size_t)(p - buf));
478
+ }
479
+ }
480
+
481
+ /* -- Internal string formatting ------------------------------------------ */
482
+
483
+ /*
484
+ ** These functions are only used for lua_pushfstring(), lua_pushvfstring()
485
+ ** and for internal string formatting (e.g. error messages). Caveat: unlike
486
+ ** string.format(), only a limited subset of formats and flags are supported!
487
+ **
488
+ ** LuaJIT has support for a couple more formats than Lua 5.1/5.2:
489
+ ** - %d %u %o %x with full formatting, 32 bit integers only.
490
+ ** - %f and other FP formats are really %.14g.
491
+ ** - %s %c %p without formatting.
492
+ */
493
+
494
+ /* Push formatted message as a string object to Lua stack. va_list variant. */
495
+ const char *lj_strfmt_pushvf(lua_State *L, const char *fmt, va_list argp)
496
+ {
497
+ SBuf *sb = lj_buf_tmp_(L);
498
+ FormatState fs;
499
+ SFormat sf;
500
+ GCstr *str;
501
+ lj_strfmt_init(&fs, fmt, (MSize)strlen(fmt));
502
+ while ((sf = lj_strfmt_parse(&fs)) != STRFMT_EOF) {
503
+ switch (STRFMT_TYPE(sf)) {
504
+ case STRFMT_LIT:
505
+ lj_buf_putmem(sb, fs.str, fs.len);
506
+ break;
507
+ case STRFMT_INT:
508
+ lj_strfmt_putfxint(sb, sf, va_arg(argp, int32_t));
509
+ break;
510
+ case STRFMT_UINT:
511
+ lj_strfmt_putfxint(sb, sf, va_arg(argp, uint32_t));
512
+ break;
513
+ case STRFMT_NUM: {
514
+ TValue tv;
515
+ tv.n = va_arg(argp, lua_Number);
516
+ setsbufP(sb, lj_strfmt_wnum(lj_buf_more(sb, STRFMT_MAXBUF_NUM), &tv));
517
+ break;
518
+ }
519
+ case STRFMT_STR: {
520
+ const char *s = va_arg(argp, char *);
521
+ if (s == NULL) s = "(null)";
522
+ lj_buf_putmem(sb, s, (MSize)strlen(s));
523
+ break;
524
+ }
525
+ case STRFMT_CHAR:
526
+ lj_buf_putb(sb, va_arg(argp, int));
527
+ break;
528
+ case STRFMT_PTR:
529
+ lj_strfmt_putptr(sb, va_arg(argp, void *));
530
+ break;
531
+ case STRFMT_ERR:
532
+ default:
533
+ lj_buf_putb(sb, '?');
534
+ lua_assert(0);
535
+ break;
536
+ }
537
+ }
538
+ str = lj_buf_str(L, sb);
539
+ setstrV(L, L->top, str);
540
+ incr_top(L);
541
+ return strdata(str);
542
+ }
543
+
544
+ /* Push formatted message as a string object to Lua stack. Vararg variant. */
545
+ const char *lj_strfmt_pushf(lua_State *L, const char *fmt, ...)
546
+ {
547
+ const char *msg;
548
+ va_list argp;
549
+ va_start(argp, fmt);
550
+ msg = lj_strfmt_pushvf(L, fmt, argp);
551
+ va_end(argp);
552
+ return msg;
553
+ }
554
+