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
@@ -1,588 +0,0 @@
1
- /*
2
- ** $Id: ltable.c,v 2.32.1.2 2007/12/28 15:32:23 roberto Exp $
3
- ** Lua tables (hash)
4
- ** See Copyright Notice in lua.h
5
- */
6
-
7
-
8
- /*
9
- ** Implementation of tables (aka arrays, objects, or hash tables).
10
- ** Tables keep its elements in two parts: an array part and a hash part.
11
- ** Non-negative integer keys are all candidates to be kept in the array
12
- ** part. The actual size of the array is the largest `n' such that at
13
- ** least half the slots between 0 and n are in use.
14
- ** Hash uses a mix of chained scatter table with Brent's variation.
15
- ** A main invariant of these tables is that, if an element is not
16
- ** in its main position (i.e. the `original' position that its hash gives
17
- ** to it), then the colliding element is in its own main position.
18
- ** Hence even when the load factor reaches 100%, performance remains good.
19
- */
20
-
21
- #include <math.h>
22
- #include <string.h>
23
-
24
- #define ltable_c
25
- #define LUA_CORE
26
-
27
- #include "lua.h"
28
-
29
- #include "ldebug.h"
30
- #include "ldo.h"
31
- #include "lgc.h"
32
- #include "lmem.h"
33
- #include "lobject.h"
34
- #include "lstate.h"
35
- #include "ltable.h"
36
-
37
-
38
- /*
39
- ** max size of array part is 2^MAXBITS
40
- */
41
- #if LUAI_BITSINT > 26
42
- #define MAXBITS 26
43
- #else
44
- #define MAXBITS (LUAI_BITSINT-2)
45
- #endif
46
-
47
- #define MAXASIZE (1 << MAXBITS)
48
-
49
-
50
- #define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t))))
51
-
52
- #define hashstr(t,str) hashpow2(t, (str)->tsv.hash)
53
- #define hashboolean(t,p) hashpow2(t, p)
54
-
55
-
56
- /*
57
- ** for some types, it is better to avoid modulus by power of 2, as
58
- ** they tend to have many 2 factors.
59
- */
60
- #define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1))))
61
-
62
-
63
- #define hashpointer(t,p) hashmod(t, IntPoint(p))
64
-
65
-
66
- /*
67
- ** number of ints inside a lua_Number
68
- */
69
- #define numints cast_int(sizeof(lua_Number)/sizeof(int))
70
-
71
-
72
-
73
- #define dummynode (&dummynode_)
74
-
75
- static const Node dummynode_ = {
76
- {{NULL}, LUA_TNIL}, /* value */
77
- {{{NULL}, LUA_TNIL, NULL}} /* key */
78
- };
79
-
80
-
81
- /*
82
- ** hash for lua_Numbers
83
- */
84
- static Node *hashnum (const Table *t, lua_Number n) {
85
- unsigned int a[numints];
86
- int i;
87
- if (luai_numeq(n, 0)) /* avoid problems with -0 */
88
- return gnode(t, 0);
89
- memcpy(a, &n, sizeof(a));
90
- for (i = 1; i < numints; i++) a[0] += a[i];
91
- return hashmod(t, a[0]);
92
- }
93
-
94
-
95
-
96
- /*
97
- ** returns the `main' position of an element in a table (that is, the index
98
- ** of its hash value)
99
- */
100
- static Node *mainposition (const Table *t, const TValue *key) {
101
- switch (ttype(key)) {
102
- case LUA_TNUMBER:
103
- return hashnum(t, nvalue(key));
104
- case LUA_TSTRING:
105
- return hashstr(t, rawtsvalue(key));
106
- case LUA_TBOOLEAN:
107
- return hashboolean(t, bvalue(key));
108
- case LUA_TLIGHTUSERDATA:
109
- return hashpointer(t, pvalue(key));
110
- default:
111
- return hashpointer(t, gcvalue(key));
112
- }
113
- }
114
-
115
-
116
- /*
117
- ** returns the index for `key' if `key' is an appropriate key to live in
118
- ** the array part of the table, -1 otherwise.
119
- */
120
- static int arrayindex (const TValue *key) {
121
- if (ttisnumber(key)) {
122
- lua_Number n = nvalue(key);
123
- int k;
124
- lua_number2int(k, n);
125
- if (luai_numeq(cast_num(k), n))
126
- return k;
127
- }
128
- return -1; /* `key' did not match some condition */
129
- }
130
-
131
-
132
- /*
133
- ** returns the index of a `key' for table traversals. First goes all
134
- ** elements in the array part, then elements in the hash part. The
135
- ** beginning of a traversal is signalled by -1.
136
- */
137
- static int findindex (lua_State *L, Table *t, StkId key) {
138
- int i;
139
- if (ttisnil(key)) return -1; /* first iteration */
140
- i = arrayindex(key);
141
- if (0 < i && i <= t->sizearray) /* is `key' inside array part? */
142
- return i-1; /* yes; that's the index (corrected to C) */
143
- else {
144
- Node *n = mainposition(t, key);
145
- do { /* check whether `key' is somewhere in the chain */
146
- /* key may be dead already, but it is ok to use it in `next' */
147
- if (luaO_rawequalObj(key2tval(n), key) ||
148
- (ttype(gkey(n)) == LUA_TDEADKEY && iscollectable(key) &&
149
- gcvalue(gkey(n)) == gcvalue(key))) {
150
- i = cast_int(n - gnode(t, 0)); /* key index in hash table */
151
- /* hash elements are numbered after array ones */
152
- return i + t->sizearray;
153
- }
154
- else n = gnext(n);
155
- } while (n);
156
- luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */
157
- return 0; /* to avoid warnings */
158
- }
159
- }
160
-
161
-
162
- int luaH_next (lua_State *L, Table *t, StkId key) {
163
- int i = findindex(L, t, key); /* find original element */
164
- for (i++; i < t->sizearray; i++) { /* try first array part */
165
- if (!ttisnil(&t->array[i])) { /* a non-nil value? */
166
- setnvalue(key, cast_num(i+1));
167
- setobj2s(L, key+1, &t->array[i]);
168
- return 1;
169
- }
170
- }
171
- for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */
172
- if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */
173
- setobj2s(L, key, key2tval(gnode(t, i)));
174
- setobj2s(L, key+1, gval(gnode(t, i)));
175
- return 1;
176
- }
177
- }
178
- return 0; /* no more elements */
179
- }
180
-
181
-
182
- /*
183
- ** {=============================================================
184
- ** Rehash
185
- ** ==============================================================
186
- */
187
-
188
-
189
- static int computesizes (int nums[], int *narray) {
190
- int i;
191
- int twotoi; /* 2^i */
192
- int a = 0; /* number of elements smaller than 2^i */
193
- int na = 0; /* number of elements to go to array part */
194
- int n = 0; /* optimal size for array part */
195
- for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) {
196
- if (nums[i] > 0) {
197
- a += nums[i];
198
- if (a > twotoi/2) { /* more than half elements present? */
199
- n = twotoi; /* optimal size (till now) */
200
- na = a; /* all elements smaller than n will go to array part */
201
- }
202
- }
203
- if (a == *narray) break; /* all elements already counted */
204
- }
205
- *narray = n;
206
- lua_assert(*narray/2 <= na && na <= *narray);
207
- return na;
208
- }
209
-
210
-
211
- static int countint (const TValue *key, int *nums) {
212
- int k = arrayindex(key);
213
- if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */
214
- nums[ceillog2(k)]++; /* count as such */
215
- return 1;
216
- }
217
- else
218
- return 0;
219
- }
220
-
221
-
222
- static int numusearray (const Table *t, int *nums) {
223
- int lg;
224
- int ttlg; /* 2^lg */
225
- int ause = 0; /* summation of `nums' */
226
- int i = 1; /* count to traverse all array keys */
227
- for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */
228
- int lc = 0; /* counter */
229
- int lim = ttlg;
230
- if (lim > t->sizearray) {
231
- lim = t->sizearray; /* adjust upper limit */
232
- if (i > lim)
233
- break; /* no more elements to count */
234
- }
235
- /* count elements in range (2^(lg-1), 2^lg] */
236
- for (; i <= lim; i++) {
237
- if (!ttisnil(&t->array[i-1]))
238
- lc++;
239
- }
240
- nums[lg] += lc;
241
- ause += lc;
242
- }
243
- return ause;
244
- }
245
-
246
-
247
- static int numusehash (const Table *t, int *nums, int *pnasize) {
248
- int totaluse = 0; /* total number of elements */
249
- int ause = 0; /* summation of `nums' */
250
- int i = sizenode(t);
251
- while (i--) {
252
- Node *n = &t->node[i];
253
- if (!ttisnil(gval(n))) {
254
- ause += countint(key2tval(n), nums);
255
- totaluse++;
256
- }
257
- }
258
- *pnasize += ause;
259
- return totaluse;
260
- }
261
-
262
-
263
- static void setarrayvector (lua_State *L, Table *t, int size) {
264
- int i;
265
- luaM_reallocvector(L, t->array, t->sizearray, size, TValue);
266
- for (i=t->sizearray; i<size; i++)
267
- setnilvalue(&t->array[i]);
268
- t->sizearray = size;
269
- }
270
-
271
-
272
- static void setnodevector (lua_State *L, Table *t, int size) {
273
- int lsize;
274
- if (size == 0) { /* no elements to hash part? */
275
- t->node = cast(Node *, dummynode); /* use common `dummynode' */
276
- lsize = 0;
277
- }
278
- else {
279
- int i;
280
- lsize = ceillog2(size);
281
- if (lsize > MAXBITS)
282
- luaG_runerror(L, "table overflow");
283
- size = twoto(lsize);
284
- t->node = luaM_newvector(L, size, Node);
285
- for (i=0; i<size; i++) {
286
- Node *n = gnode(t, i);
287
- gnext(n) = NULL;
288
- setnilvalue(gkey(n));
289
- setnilvalue(gval(n));
290
- }
291
- }
292
- t->lsizenode = cast_byte(lsize);
293
- t->lastfree = gnode(t, size); /* all positions are free */
294
- }
295
-
296
-
297
- static void resize (lua_State *L, Table *t, int nasize, int nhsize) {
298
- int i;
299
- int oldasize = t->sizearray;
300
- int oldhsize = t->lsizenode;
301
- Node *nold = t->node; /* save old hash ... */
302
- if (nasize > oldasize) /* array part must grow? */
303
- setarrayvector(L, t, nasize);
304
- /* create new hash part with appropriate size */
305
- setnodevector(L, t, nhsize);
306
- if (nasize < oldasize) { /* array part must shrink? */
307
- t->sizearray = nasize;
308
- /* re-insert elements from vanishing slice */
309
- for (i=nasize; i<oldasize; i++) {
310
- if (!ttisnil(&t->array[i]))
311
- setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]);
312
- }
313
- /* shrink array */
314
- luaM_reallocvector(L, t->array, oldasize, nasize, TValue);
315
- }
316
- /* re-insert elements from hash part */
317
- for (i = twoto(oldhsize) - 1; i >= 0; i--) {
318
- Node *old = nold+i;
319
- if (!ttisnil(gval(old)))
320
- setobjt2t(L, luaH_set(L, t, key2tval(old)), gval(old));
321
- }
322
- if (nold != dummynode)
323
- luaM_freearray(L, nold, twoto(oldhsize), Node); /* free old array */
324
- }
325
-
326
-
327
- void luaH_resizearray (lua_State *L, Table *t, int nasize) {
328
- int nsize = (t->node == dummynode) ? 0 : sizenode(t);
329
- resize(L, t, nasize, nsize);
330
- }
331
-
332
-
333
- static void rehash (lua_State *L, Table *t, const TValue *ek) {
334
- int nasize, na;
335
- int nums[MAXBITS+1]; /* nums[i] = number of keys between 2^(i-1) and 2^i */
336
- int i;
337
- int totaluse;
338
- for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */
339
- nasize = numusearray(t, nums); /* count keys in array part */
340
- totaluse = nasize; /* all those keys are integer keys */
341
- totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */
342
- /* count extra key */
343
- nasize += countint(ek, nums);
344
- totaluse++;
345
- /* compute new size for array part */
346
- na = computesizes(nums, &nasize);
347
- /* resize the table to new computed sizes */
348
- resize(L, t, nasize, totaluse - na);
349
- }
350
-
351
-
352
-
353
- /*
354
- ** }=============================================================
355
- */
356
-
357
-
358
- Table *luaH_new (lua_State *L, int narray, int nhash) {
359
- Table *t = luaM_new(L, Table);
360
- luaC_link(L, obj2gco(t), LUA_TTABLE);
361
- t->metatable = NULL;
362
- t->flags = cast_byte(~0);
363
- /* temporary values (kept only if some malloc fails) */
364
- t->array = NULL;
365
- t->sizearray = 0;
366
- t->lsizenode = 0;
367
- t->node = cast(Node *, dummynode);
368
- setarrayvector(L, t, narray);
369
- setnodevector(L, t, nhash);
370
- return t;
371
- }
372
-
373
-
374
- void luaH_free (lua_State *L, Table *t) {
375
- if (t->node != dummynode)
376
- luaM_freearray(L, t->node, sizenode(t), Node);
377
- luaM_freearray(L, t->array, t->sizearray, TValue);
378
- luaM_free(L, t);
379
- }
380
-
381
-
382
- static Node *getfreepos (Table *t) {
383
- while (t->lastfree-- > t->node) {
384
- if (ttisnil(gkey(t->lastfree)))
385
- return t->lastfree;
386
- }
387
- return NULL; /* could not find a free place */
388
- }
389
-
390
-
391
-
392
- /*
393
- ** inserts a new key into a hash table; first, check whether key's main
394
- ** position is free. If not, check whether colliding node is in its main
395
- ** position or not: if it is not, move colliding node to an empty place and
396
- ** put new key in its main position; otherwise (colliding node is in its main
397
- ** position), new key goes to an empty position.
398
- */
399
- static TValue *newkey (lua_State *L, Table *t, const TValue *key) {
400
- Node *mp = mainposition(t, key);
401
- if (!ttisnil(gval(mp)) || mp == dummynode) {
402
- Node *othern;
403
- Node *n = getfreepos(t); /* get a free place */
404
- if (n == NULL) { /* cannot find a free place? */
405
- rehash(L, t, key); /* grow table */
406
- return luaH_set(L, t, key); /* re-insert key into grown table */
407
- }
408
- lua_assert(n != dummynode);
409
- othern = mainposition(t, key2tval(mp));
410
- if (othern != mp) { /* is colliding node out of its main position? */
411
- /* yes; move colliding node into free position */
412
- while (gnext(othern) != mp) othern = gnext(othern); /* find previous */
413
- gnext(othern) = n; /* redo the chain with `n' in place of `mp' */
414
- *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */
415
- gnext(mp) = NULL; /* now `mp' is free */
416
- setnilvalue(gval(mp));
417
- }
418
- else { /* colliding node is in its own main position */
419
- /* new node will go into free position */
420
- gnext(n) = gnext(mp); /* chain new position */
421
- gnext(mp) = n;
422
- mp = n;
423
- }
424
- }
425
- gkey(mp)->value = key->value; gkey(mp)->tt = key->tt;
426
- luaC_barriert(L, t, key);
427
- lua_assert(ttisnil(gval(mp)));
428
- return gval(mp);
429
- }
430
-
431
-
432
- /*
433
- ** search function for integers
434
- */
435
- const TValue *luaH_getnum (Table *t, int key) {
436
- /* (1 <= key && key <= t->sizearray) */
437
- if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray))
438
- return &t->array[key-1];
439
- else {
440
- lua_Number nk = cast_num(key);
441
- Node *n = hashnum(t, nk);
442
- do { /* check whether `key' is somewhere in the chain */
443
- if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk))
444
- return gval(n); /* that's it */
445
- else n = gnext(n);
446
- } while (n);
447
- return luaO_nilobject;
448
- }
449
- }
450
-
451
-
452
- /*
453
- ** search function for strings
454
- */
455
- const TValue *luaH_getstr (Table *t, TString *key) {
456
- Node *n = hashstr(t, key);
457
- do { /* check whether `key' is somewhere in the chain */
458
- if (ttisstring(gkey(n)) && rawtsvalue(gkey(n)) == key)
459
- return gval(n); /* that's it */
460
- else n = gnext(n);
461
- } while (n);
462
- return luaO_nilobject;
463
- }
464
-
465
-
466
- /*
467
- ** main search function
468
- */
469
- const TValue *luaH_get (Table *t, const TValue *key) {
470
- switch (ttype(key)) {
471
- case LUA_TNIL: return luaO_nilobject;
472
- case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key));
473
- case LUA_TNUMBER: {
474
- int k;
475
- lua_Number n = nvalue(key);
476
- lua_number2int(k, n);
477
- if (luai_numeq(cast_num(k), nvalue(key))) /* index is int? */
478
- return luaH_getnum(t, k); /* use specialized version */
479
- /* else go through */
480
- }
481
- default: {
482
- Node *n = mainposition(t, key);
483
- do { /* check whether `key' is somewhere in the chain */
484
- if (luaO_rawequalObj(key2tval(n), key))
485
- return gval(n); /* that's it */
486
- else n = gnext(n);
487
- } while (n);
488
- return luaO_nilobject;
489
- }
490
- }
491
- }
492
-
493
-
494
- TValue *luaH_set (lua_State *L, Table *t, const TValue *key) {
495
- const TValue *p = luaH_get(t, key);
496
- t->flags = 0;
497
- if (p != luaO_nilobject)
498
- return cast(TValue *, p);
499
- else {
500
- if (ttisnil(key)) luaG_runerror(L, "table index is nil");
501
- else if (ttisnumber(key) && luai_numisnan(nvalue(key)))
502
- luaG_runerror(L, "table index is NaN");
503
- return newkey(L, t, key);
504
- }
505
- }
506
-
507
-
508
- TValue *luaH_setnum (lua_State *L, Table *t, int key) {
509
- const TValue *p = luaH_getnum(t, key);
510
- if (p != luaO_nilobject)
511
- return cast(TValue *, p);
512
- else {
513
- TValue k;
514
- setnvalue(&k, cast_num(key));
515
- return newkey(L, t, &k);
516
- }
517
- }
518
-
519
-
520
- TValue *luaH_setstr (lua_State *L, Table *t, TString *key) {
521
- const TValue *p = luaH_getstr(t, key);
522
- if (p != luaO_nilobject)
523
- return cast(TValue *, p);
524
- else {
525
- TValue k;
526
- setsvalue(L, &k, key);
527
- return newkey(L, t, &k);
528
- }
529
- }
530
-
531
-
532
- static int unbound_search (Table *t, unsigned int j) {
533
- unsigned int i = j; /* i is zero or a present index */
534
- j++;
535
- /* find `i' and `j' such that i is present and j is not */
536
- while (!ttisnil(luaH_getnum(t, j))) {
537
- i = j;
538
- j *= 2;
539
- if (j > cast(unsigned int, MAX_INT)) { /* overflow? */
540
- /* table was built with bad purposes: resort to linear search */
541
- i = 1;
542
- while (!ttisnil(luaH_getnum(t, i))) i++;
543
- return i - 1;
544
- }
545
- }
546
- /* now do a binary search between them */
547
- while (j - i > 1) {
548
- unsigned int m = (i+j)/2;
549
- if (ttisnil(luaH_getnum(t, m))) j = m;
550
- else i = m;
551
- }
552
- return i;
553
- }
554
-
555
-
556
- /*
557
- ** Try to find a boundary in table `t'. A `boundary' is an integer index
558
- ** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil).
559
- */
560
- int luaH_getn (Table *t) {
561
- unsigned int j = t->sizearray;
562
- if (j > 0 && ttisnil(&t->array[j - 1])) {
563
- /* there is a boundary in the array part: (binary) search for it */
564
- unsigned int i = 0;
565
- while (j - i > 1) {
566
- unsigned int m = (i+j)/2;
567
- if (ttisnil(&t->array[m - 1])) j = m;
568
- else i = m;
569
- }
570
- return i;
571
- }
572
- /* else must find a boundary in hash part */
573
- else if (t->node == dummynode) /* hash part is empty? */
574
- return j; /* that is easy... */
575
- else return unbound_search(t, j);
576
- }
577
-
578
-
579
-
580
- #if defined(LUA_DEBUG)
581
-
582
- Node *luaH_mainposition (const Table *t, const TValue *key) {
583
- return mainposition(t, key);
584
- }
585
-
586
- int luaH_isdummy (Node *n) { return n == dummynode; }
587
-
588
- #endif