immunio 0.15.4 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
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
+