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
@@ -1,659 +0,0 @@
1
- /*
2
- ** $Id: lbaselib.c,v 1.191.1.6 2008/02/14 16:46:22 roberto Exp $
3
- ** Basic library
4
- ** See Copyright Notice in lua.h
5
- */
6
-
7
-
8
-
9
- #include <ctype.h>
10
- #include <stdio.h>
11
- #include <stdlib.h>
12
- #include <string.h>
13
-
14
- #define lbaselib_c
15
- #define LUA_LIB
16
-
17
- #include "lua.h"
18
-
19
- #include "lauxlib.h"
20
- #include "lualib.h"
21
-
22
-
23
-
24
-
25
- /*
26
- ** If your system does not support `stdout', you can just remove this function.
27
- ** If you need, you can define your own `print' function, following this
28
- ** model but changing `fputs' to put the strings at a proper place
29
- ** (a console window or a log file, for instance).
30
- */
31
- static int luaB_print (lua_State *L) {
32
- int n = lua_gettop(L); /* number of arguments */
33
- int i;
34
- lua_getglobal(L, "tostring");
35
- for (i=1; i<=n; i++) {
36
- const char *s;
37
- lua_pushvalue(L, -1); /* function to be called */
38
- lua_pushvalue(L, i); /* value to print */
39
- lua_call(L, 1, 1);
40
- s = lua_tostring(L, -1); /* get result */
41
- if (s == NULL)
42
- return luaL_error(L, LUA_QL("tostring") " must return a string to "
43
- LUA_QL("print"));
44
- if (i>1) fputs("\t", stdout);
45
- fputs(s, stdout);
46
- lua_pop(L, 1); /* pop result */
47
- }
48
- fputs("\n", stdout);
49
- /*
50
- ** XXX This fflush is needed because print is used to output debug
51
- ** information which should not be buffered. This change does not affect
52
- ** the behavior of the print function but it might affect its performance.
53
- */
54
- fflush(stdout);
55
- return 0;
56
- }
57
-
58
-
59
- static int luaB_tonumber (lua_State *L) {
60
- int base = luaL_optint(L, 2, 10);
61
- if (base == 10) { /* standard conversion */
62
- luaL_checkany(L, 1);
63
- if (lua_isnumber(L, 1)) {
64
- lua_pushnumber(L, lua_tonumber(L, 1));
65
- return 1;
66
- }
67
- }
68
- else {
69
- const char *s1 = luaL_checkstring(L, 1);
70
- char *s2;
71
- unsigned long n;
72
- luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range");
73
- n = strtoul(s1, &s2, base);
74
- if (s1 != s2) { /* at least one valid digit? */
75
- while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */
76
- if (*s2 == '\0') { /* no invalid trailing characters? */
77
- lua_pushnumber(L, (lua_Number)n);
78
- return 1;
79
- }
80
- }
81
- }
82
- lua_pushnil(L); /* else not a number */
83
- return 1;
84
- }
85
-
86
-
87
- static int luaB_error (lua_State *L) {
88
- int level = luaL_optint(L, 2, 1);
89
- lua_settop(L, 1);
90
- if (lua_isstring(L, 1) && level > 0) { /* add extra information? */
91
- luaL_where(L, level);
92
- lua_pushvalue(L, 1);
93
- lua_concat(L, 2);
94
- }
95
- return lua_error(L);
96
- }
97
-
98
-
99
- static int luaB_getmetatable (lua_State *L) {
100
- luaL_checkany(L, 1);
101
- if (!lua_getmetatable(L, 1)) {
102
- lua_pushnil(L);
103
- return 1; /* no metatable */
104
- }
105
- luaL_getmetafield(L, 1, "__metatable");
106
- return 1; /* returns either __metatable field (if present) or metatable */
107
- }
108
-
109
-
110
- static int luaB_setmetatable (lua_State *L) {
111
- int t = lua_type(L, 2);
112
- luaL_checktype(L, 1, LUA_TTABLE);
113
- luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2,
114
- "nil or table expected");
115
- if (luaL_getmetafield(L, 1, "__metatable"))
116
- luaL_error(L, "cannot change a protected metatable");
117
- lua_settop(L, 2);
118
- lua_setmetatable(L, 1);
119
- return 1;
120
- }
121
-
122
-
123
- static void getfunc (lua_State *L, int opt) {
124
- if (lua_isfunction(L, 1)) lua_pushvalue(L, 1);
125
- else {
126
- lua_Debug ar;
127
- int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1);
128
- luaL_argcheck(L, level >= 0, 1, "level must be non-negative");
129
- if (lua_getstack(L, level, &ar) == 0)
130
- luaL_argerror(L, 1, "invalid level");
131
- lua_getinfo(L, "f", &ar);
132
- if (lua_isnil(L, -1))
133
- luaL_error(L, "no function environment for tail call at level %d",
134
- level);
135
- }
136
- }
137
-
138
-
139
- static int luaB_getfenv (lua_State *L) {
140
- getfunc(L, 1);
141
- if (lua_iscfunction(L, -1)) /* is a C function? */
142
- lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the thread's global env. */
143
- else
144
- lua_getfenv(L, -1);
145
- return 1;
146
- }
147
-
148
-
149
- static int luaB_setfenv (lua_State *L) {
150
- luaL_checktype(L, 2, LUA_TTABLE);
151
- getfunc(L, 0);
152
- lua_pushvalue(L, 2);
153
- if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) {
154
- /* change environment of current thread */
155
- lua_pushthread(L);
156
- lua_insert(L, -2);
157
- lua_setfenv(L, -2);
158
- return 0;
159
- }
160
- else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0)
161
- luaL_error(L,
162
- LUA_QL("setfenv") " cannot change environment of given object");
163
- return 1;
164
- }
165
-
166
-
167
- static int luaB_rawequal (lua_State *L) {
168
- luaL_checkany(L, 1);
169
- luaL_checkany(L, 2);
170
- lua_pushboolean(L, lua_rawequal(L, 1, 2));
171
- return 1;
172
- }
173
-
174
-
175
- static int luaB_rawget (lua_State *L) {
176
- luaL_checktype(L, 1, LUA_TTABLE);
177
- luaL_checkany(L, 2);
178
- lua_settop(L, 2);
179
- lua_rawget(L, 1);
180
- return 1;
181
- }
182
-
183
- static int luaB_rawset (lua_State *L) {
184
- luaL_checktype(L, 1, LUA_TTABLE);
185
- luaL_checkany(L, 2);
186
- luaL_checkany(L, 3);
187
- lua_settop(L, 3);
188
- lua_rawset(L, 1);
189
- return 1;
190
- }
191
-
192
-
193
- static int luaB_gcinfo (lua_State *L) {
194
- lua_pushinteger(L, lua_getgccount(L));
195
- return 1;
196
- }
197
-
198
-
199
- static int luaB_collectgarbage (lua_State *L) {
200
- static const char *const opts[] = {"stop", "restart", "collect",
201
- "count", "step", "setpause", "setstepmul", NULL};
202
- static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT,
203
- LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL};
204
- int o = luaL_checkoption(L, 1, "collect", opts);
205
- int ex = luaL_optint(L, 2, 0);
206
- int res = lua_gc(L, optsnum[o], ex);
207
- switch (optsnum[o]) {
208
- case LUA_GCCOUNT: {
209
- int b = lua_gc(L, LUA_GCCOUNTB, 0);
210
- lua_pushnumber(L, res + ((lua_Number)b/1024));
211
- return 1;
212
- }
213
- case LUA_GCSTEP: {
214
- lua_pushboolean(L, res);
215
- return 1;
216
- }
217
- default: {
218
- lua_pushnumber(L, res);
219
- return 1;
220
- }
221
- }
222
- }
223
-
224
-
225
- static int luaB_type (lua_State *L) {
226
- luaL_checkany(L, 1);
227
- lua_pushstring(L, luaL_typename(L, 1));
228
- return 1;
229
- }
230
-
231
-
232
- static int luaB_next (lua_State *L) {
233
- luaL_checktype(L, 1, LUA_TTABLE);
234
- lua_settop(L, 2); /* create a 2nd argument if there isn't one */
235
- if (lua_next(L, 1))
236
- return 2;
237
- else {
238
- lua_pushnil(L);
239
- return 1;
240
- }
241
- }
242
-
243
-
244
- static int luaB_pairs (lua_State *L) {
245
- luaL_checktype(L, 1, LUA_TTABLE);
246
- lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */
247
- lua_pushvalue(L, 1); /* state, */
248
- lua_pushnil(L); /* and initial value */
249
- return 3;
250
- }
251
-
252
-
253
- static int ipairsaux (lua_State *L) {
254
- int i = luaL_checkint(L, 2);
255
- luaL_checktype(L, 1, LUA_TTABLE);
256
- i++; /* next value */
257
- lua_pushinteger(L, i);
258
- lua_rawgeti(L, 1, i);
259
- return (lua_isnil(L, -1)) ? 0 : 2;
260
- }
261
-
262
-
263
- static int luaB_ipairs (lua_State *L) {
264
- luaL_checktype(L, 1, LUA_TTABLE);
265
- lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */
266
- lua_pushvalue(L, 1); /* state, */
267
- lua_pushinteger(L, 0); /* and initial value */
268
- return 3;
269
- }
270
-
271
-
272
- static int load_aux (lua_State *L, int status) {
273
- if (status == 0) /* OK? */
274
- return 1;
275
- else {
276
- lua_pushnil(L);
277
- lua_insert(L, -2); /* put before error message */
278
- return 2; /* return nil plus error message */
279
- }
280
- }
281
-
282
-
283
- static int luaB_loadstring (lua_State *L) {
284
- size_t l;
285
- const char *s = luaL_checklstring(L, 1, &l);
286
- const char *chunkname = luaL_optstring(L, 2, s);
287
- return load_aux(L, luaL_loadbuffer(L, s, l, chunkname));
288
- }
289
-
290
-
291
- static int luaB_loadfile (lua_State *L) {
292
- const char *fname = luaL_optstring(L, 1, NULL);
293
- return load_aux(L, luaL_loadfile(L, fname));
294
- }
295
-
296
-
297
- /*
298
- ** Reader for generic `load' function: `lua_load' uses the
299
- ** stack for internal stuff, so the reader cannot change the
300
- ** stack top. Instead, it keeps its resulting string in a
301
- ** reserved slot inside the stack.
302
- */
303
- static const char *generic_reader (lua_State *L, void *ud, size_t *size) {
304
- (void)ud; /* to avoid warnings */
305
- luaL_checkstack(L, 2, "too many nested functions");
306
- lua_pushvalue(L, 1); /* get function */
307
- lua_call(L, 0, 1); /* call it */
308
- if (lua_isnil(L, -1)) {
309
- *size = 0;
310
- return NULL;
311
- }
312
- else if (lua_isstring(L, -1)) {
313
- lua_replace(L, 3); /* save string in a reserved stack slot */
314
- return lua_tolstring(L, 3, size);
315
- }
316
- else luaL_error(L, "reader function must return a string");
317
- return NULL; /* to avoid warnings */
318
- }
319
-
320
-
321
- static int luaB_load (lua_State *L) {
322
- int status;
323
- const char *cname = luaL_optstring(L, 2, "=(load)");
324
- luaL_checktype(L, 1, LUA_TFUNCTION);
325
- lua_settop(L, 3); /* function, eventual name, plus one reserved slot */
326
- status = lua_load(L, generic_reader, NULL, cname);
327
- return load_aux(L, status);
328
- }
329
-
330
-
331
- static int luaB_dofile (lua_State *L) {
332
- const char *fname = luaL_optstring(L, 1, NULL);
333
- int n = lua_gettop(L);
334
- if (luaL_loadfile(L, fname) != 0) lua_error(L);
335
- lua_call(L, 0, LUA_MULTRET);
336
- return lua_gettop(L) - n;
337
- }
338
-
339
-
340
- static int luaB_assert (lua_State *L) {
341
- luaL_checkany(L, 1);
342
- if (!lua_toboolean(L, 1))
343
- return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!"));
344
- return lua_gettop(L);
345
- }
346
-
347
-
348
- static int luaB_unpack (lua_State *L) {
349
- int i, e, n;
350
- luaL_checktype(L, 1, LUA_TTABLE);
351
- i = luaL_optint(L, 2, 1);
352
- e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1));
353
- if (i > e) return 0; /* empty range */
354
- n = e - i + 1; /* number of elements */
355
- if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
356
- return luaL_error(L, "too many results to unpack");
357
- lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */
358
- while (i++ < e) /* push arg[i + 1...e] */
359
- lua_rawgeti(L, 1, i);
360
- return n;
361
- }
362
-
363
-
364
- static int luaB_select (lua_State *L) {
365
- int n = lua_gettop(L);
366
- if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') {
367
- lua_pushinteger(L, n-1);
368
- return 1;
369
- }
370
- else {
371
- int i = luaL_checkint(L, 1);
372
- if (i < 0) i = n + i;
373
- else if (i > n) i = n;
374
- luaL_argcheck(L, 1 <= i, 1, "index out of range");
375
- return n - i;
376
- }
377
- }
378
-
379
-
380
- static int luaB_pcall (lua_State *L) {
381
- int status;
382
- luaL_checkany(L, 1);
383
- status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0);
384
- lua_pushboolean(L, (status == 0));
385
- lua_insert(L, 1);
386
- return lua_gettop(L); /* return status + all results */
387
- }
388
-
389
-
390
- static int luaB_xpcall (lua_State *L) {
391
- int status;
392
- luaL_checkany(L, 2);
393
- lua_settop(L, 2);
394
- lua_insert(L, 1); /* put error function under function to be called */
395
- status = lua_pcall(L, 0, LUA_MULTRET, 1);
396
- lua_pushboolean(L, (status == 0));
397
- lua_replace(L, 1);
398
- return lua_gettop(L); /* return status + all results */
399
- }
400
-
401
-
402
- static int luaB_tostring (lua_State *L) {
403
- luaL_checkany(L, 1);
404
- if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */
405
- return 1; /* use its value */
406
- switch (lua_type(L, 1)) {
407
- case LUA_TNUMBER:
408
- lua_pushstring(L, lua_tostring(L, 1));
409
- break;
410
- case LUA_TSTRING:
411
- lua_pushvalue(L, 1);
412
- break;
413
- case LUA_TBOOLEAN:
414
- lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false"));
415
- break;
416
- case LUA_TNIL:
417
- lua_pushliteral(L, "nil");
418
- break;
419
- default:
420
- lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1));
421
- break;
422
- }
423
- return 1;
424
- }
425
-
426
-
427
- static int luaB_newproxy (lua_State *L) {
428
- lua_settop(L, 1);
429
- lua_newuserdata(L, 0); /* create proxy */
430
- if (lua_toboolean(L, 1) == 0)
431
- return 1; /* no metatable */
432
- else if (lua_isboolean(L, 1)) {
433
- lua_newtable(L); /* create a new metatable `m' ... */
434
- lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */
435
- lua_pushboolean(L, 1);
436
- lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */
437
- }
438
- else {
439
- int validproxy = 0; /* to check if weaktable[metatable(u)] == true */
440
- if (lua_getmetatable(L, 1)) {
441
- lua_rawget(L, lua_upvalueindex(1));
442
- validproxy = lua_toboolean(L, -1);
443
- lua_pop(L, 1); /* remove value */
444
- }
445
- luaL_argcheck(L, validproxy, 1, "boolean or proxy expected");
446
- lua_getmetatable(L, 1); /* metatable is valid; get it */
447
- }
448
- lua_setmetatable(L, 2);
449
- return 1;
450
- }
451
-
452
-
453
- static const luaL_Reg base_funcs[] = {
454
- {"assert", luaB_assert},
455
- {"collectgarbage", luaB_collectgarbage},
456
- {"dofile", luaB_dofile},
457
- {"error", luaB_error},
458
- {"gcinfo", luaB_gcinfo},
459
- {"getfenv", luaB_getfenv},
460
- {"getmetatable", luaB_getmetatable},
461
- {"loadfile", luaB_loadfile},
462
- {"load", luaB_load},
463
- {"loadstring", luaB_loadstring},
464
- {"next", luaB_next},
465
- {"pcall", luaB_pcall},
466
- {"print", luaB_print},
467
- {"rawequal", luaB_rawequal},
468
- {"rawget", luaB_rawget},
469
- {"rawset", luaB_rawset},
470
- {"select", luaB_select},
471
- {"setfenv", luaB_setfenv},
472
- {"setmetatable", luaB_setmetatable},
473
- {"tonumber", luaB_tonumber},
474
- {"tostring", luaB_tostring},
475
- {"type", luaB_type},
476
- {"unpack", luaB_unpack},
477
- {"xpcall", luaB_xpcall},
478
- {NULL, NULL}
479
- };
480
-
481
-
482
- /*
483
- ** {======================================================
484
- ** Coroutine library
485
- ** =======================================================
486
- */
487
-
488
- #define CO_RUN 0 /* running */
489
- #define CO_SUS 1 /* suspended */
490
- #define CO_NOR 2 /* 'normal' (it resumed another coroutine) */
491
- #define CO_DEAD 3
492
-
493
- static const char *const statnames[] =
494
- {"running", "suspended", "normal", "dead"};
495
-
496
- static int costatus (lua_State *L, lua_State *co) {
497
- if (L == co) return CO_RUN;
498
- switch (lua_status(co)) {
499
- case LUA_YIELD:
500
- return CO_SUS;
501
- case 0: {
502
- lua_Debug ar;
503
- if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */
504
- return CO_NOR; /* it is running */
505
- else if (lua_gettop(co) == 0)
506
- return CO_DEAD;
507
- else
508
- return CO_SUS; /* initial state */
509
- }
510
- default: /* some error occured */
511
- return CO_DEAD;
512
- }
513
- }
514
-
515
-
516
- static int luaB_costatus (lua_State *L) {
517
- lua_State *co = lua_tothread(L, 1);
518
- luaL_argcheck(L, co, 1, "coroutine expected");
519
- lua_pushstring(L, statnames[costatus(L, co)]);
520
- return 1;
521
- }
522
-
523
-
524
- static int auxresume (lua_State *L, lua_State *co, int narg) {
525
- int status = costatus(L, co);
526
- if (!lua_checkstack(co, narg))
527
- luaL_error(L, "too many arguments to resume");
528
- if (status != CO_SUS) {
529
- lua_pushfstring(L, "cannot resume %s coroutine", statnames[status]);
530
- return -1; /* error flag */
531
- }
532
- lua_xmove(L, co, narg);
533
- lua_setlevel(L, co);
534
- status = lua_resume(co, narg);
535
- if (status == 0 || status == LUA_YIELD) {
536
- int nres = lua_gettop(co);
537
- if (!lua_checkstack(L, nres + 1))
538
- luaL_error(L, "too many results to resume");
539
- lua_xmove(co, L, nres); /* move yielded values */
540
- return nres;
541
- }
542
- else {
543
- lua_xmove(co, L, 1); /* move error message */
544
- return -1; /* error flag */
545
- }
546
- }
547
-
548
-
549
- static int luaB_coresume (lua_State *L) {
550
- lua_State *co = lua_tothread(L, 1);
551
- int r;
552
- luaL_argcheck(L, co, 1, "coroutine expected");
553
- r = auxresume(L, co, lua_gettop(L) - 1);
554
- if (r < 0) {
555
- lua_pushboolean(L, 0);
556
- lua_insert(L, -2);
557
- return 2; /* return false + error message */
558
- }
559
- else {
560
- lua_pushboolean(L, 1);
561
- lua_insert(L, -(r + 1));
562
- return r + 1; /* return true + `resume' returns */
563
- }
564
- }
565
-
566
-
567
- static int luaB_auxwrap (lua_State *L) {
568
- lua_State *co = lua_tothread(L, lua_upvalueindex(1));
569
- int r = auxresume(L, co, lua_gettop(L));
570
- if (r < 0) {
571
- if (lua_isstring(L, -1)) { /* error object is a string? */
572
- luaL_where(L, 1); /* add extra info */
573
- lua_insert(L, -2);
574
- lua_concat(L, 2);
575
- }
576
- lua_error(L); /* propagate error */
577
- }
578
- return r;
579
- }
580
-
581
-
582
- static int luaB_cocreate (lua_State *L) {
583
- lua_State *NL = lua_newthread(L);
584
- luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1,
585
- "Lua function expected");
586
- lua_pushvalue(L, 1); /* move function to top */
587
- lua_xmove(L, NL, 1); /* move function from L to NL */
588
- return 1;
589
- }
590
-
591
-
592
- static int luaB_cowrap (lua_State *L) {
593
- luaB_cocreate(L);
594
- lua_pushcclosure(L, luaB_auxwrap, 1);
595
- return 1;
596
- }
597
-
598
-
599
- static int luaB_yield (lua_State *L) {
600
- return lua_yield(L, lua_gettop(L));
601
- }
602
-
603
-
604
- static int luaB_corunning (lua_State *L) {
605
- if (lua_pushthread(L))
606
- lua_pushnil(L); /* main thread is not a coroutine */
607
- return 1;
608
- }
609
-
610
-
611
- static const luaL_Reg co_funcs[] = {
612
- {"create", luaB_cocreate},
613
- {"resume", luaB_coresume},
614
- {"running", luaB_corunning},
615
- {"status", luaB_costatus},
616
- {"wrap", luaB_cowrap},
617
- {"yield", luaB_yield},
618
- {NULL, NULL}
619
- };
620
-
621
- /* }====================================================== */
622
-
623
-
624
- static void auxopen (lua_State *L, const char *name,
625
- lua_CFunction f, lua_CFunction u) {
626
- lua_pushcfunction(L, u);
627
- lua_pushcclosure(L, f, 1);
628
- lua_setfield(L, -2, name);
629
- }
630
-
631
-
632
- static void base_open (lua_State *L) {
633
- /* set global _G */
634
- lua_pushvalue(L, LUA_GLOBALSINDEX);
635
- lua_setglobal(L, "_G");
636
- /* open lib into global table */
637
- luaL_register(L, "_G", base_funcs);
638
- lua_pushliteral(L, LUA_VERSION);
639
- lua_setglobal(L, "_VERSION"); /* set global _VERSION */
640
- /* `ipairs' and `pairs' need auxiliary functions as upvalues */
641
- auxopen(L, "ipairs", luaB_ipairs, ipairsaux);
642
- auxopen(L, "pairs", luaB_pairs, luaB_next);
643
- /* `newproxy' needs a weaktable as upvalue */
644
- lua_createtable(L, 0, 1); /* new table `w' */
645
- lua_pushvalue(L, -1); /* `w' will be its own metatable */
646
- lua_setmetatable(L, -2);
647
- lua_pushliteral(L, "kv");
648
- lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */
649
- lua_pushcclosure(L, luaB_newproxy, 1);
650
- lua_setglobal(L, "newproxy"); /* set global `newproxy' */
651
- }
652
-
653
-
654
- LUALIB_API int luaopen_base (lua_State *L) {
655
- base_open(L);
656
- luaL_register(L, LUA_COLIBNAME, co_funcs);
657
- return 2;
658
- }
659
-