immunio 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,461 @@
1
+ /*
2
+ ** C type management.
3
+ ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
4
+ */
5
+
6
+ #ifndef _LJ_CTYPE_H
7
+ #define _LJ_CTYPE_H
8
+
9
+ #include "lj_obj.h"
10
+ #include "lj_gc.h"
11
+
12
+ #if LJ_HASFFI
13
+
14
+ /* -- C type definitions -------------------------------------------------- */
15
+
16
+ /* C type numbers. Highest 4 bits of C type info. ORDER CT. */
17
+ enum {
18
+ /* Externally visible types. */
19
+ CT_NUM, /* Integer or floating-point numbers. */
20
+ CT_STRUCT, /* Struct or union. */
21
+ CT_PTR, /* Pointer or reference. */
22
+ CT_ARRAY, /* Array or complex type. */
23
+ CT_MAYCONVERT = CT_ARRAY,
24
+ CT_VOID, /* Void type. */
25
+ CT_ENUM, /* Enumeration. */
26
+ CT_HASSIZE = CT_ENUM, /* Last type where ct->size holds the actual size. */
27
+ CT_FUNC, /* Function. */
28
+ CT_TYPEDEF, /* Typedef. */
29
+ CT_ATTRIB, /* Miscellaneous attributes. */
30
+ /* Internal element types. */
31
+ CT_FIELD, /* Struct/union field or function parameter. */
32
+ CT_BITFIELD, /* Struct/union bitfield. */
33
+ CT_CONSTVAL, /* Constant value. */
34
+ CT_EXTERN, /* External reference. */
35
+ CT_KW /* Keyword. */
36
+ };
37
+
38
+ LJ_STATIC_ASSERT(((int)CT_PTR & (int)CT_ARRAY) == CT_PTR);
39
+ LJ_STATIC_ASSERT(((int)CT_STRUCT & (int)CT_ARRAY) == CT_STRUCT);
40
+
41
+ /*
42
+ ** ---------- info ------------
43
+ ** |type flags... A cid | size | sib | next | name |
44
+ ** +----------------------------+--------+-------+-------+-------+--
45
+ ** |NUM BFvcUL.. A | size | | type | |
46
+ ** |STRUCT ..vcU..V A | size | field | name? | name? |
47
+ ** |PTR ..vcR... A cid | size | | type | |
48
+ ** |ARRAY VCvc...V A cid | size | | type | |
49
+ ** |VOID ..vc.... A | size | | type | |
50
+ ** |ENUM A cid | size | const | name? | name? |
51
+ ** |FUNC ....VS.. cc cid | nargs | field | name? | name? |
52
+ ** |TYPEDEF cid | | | name | name |
53
+ ** |ATTRIB attrnum cid | attr | sib? | type? | |
54
+ ** |FIELD cid | offset | field | | name? |
55
+ ** |BITFIELD B.vcU csz bsz pos | offset | field | | name? |
56
+ ** |CONSTVAL c cid | value | const | name | name |
57
+ ** |EXTERN cid | | sib? | name | name |
58
+ ** |KW tok | size | | name | name |
59
+ ** +----------------------------+--------+-------+-------+-------+--
60
+ ** ^^ ^^--- bits used for C type conversion dispatch
61
+ */
62
+
63
+ /* C type info flags. TFFArrrr */
64
+ #define CTF_BOOL 0x08000000u /* Boolean: NUM, BITFIELD. */
65
+ #define CTF_FP 0x04000000u /* Floating-point: NUM. */
66
+ #define CTF_CONST 0x02000000u /* Const qualifier. */
67
+ #define CTF_VOLATILE 0x01000000u /* Volatile qualifier. */
68
+ #define CTF_UNSIGNED 0x00800000u /* Unsigned: NUM, BITFIELD. */
69
+ #define CTF_LONG 0x00400000u /* Long: NUM. */
70
+ #define CTF_VLA 0x00100000u /* Variable-length: ARRAY, STRUCT. */
71
+ #define CTF_REF 0x00800000u /* Reference: PTR. */
72
+ #define CTF_VECTOR 0x08000000u /* Vector: ARRAY. */
73
+ #define CTF_COMPLEX 0x04000000u /* Complex: ARRAY. */
74
+ #define CTF_UNION 0x00800000u /* Union: STRUCT. */
75
+ #define CTF_VARARG 0x00800000u /* Vararg: FUNC. */
76
+ #define CTF_SSEREGPARM 0x00400000u /* SSE register parameters: FUNC. */
77
+
78
+ #define CTF_QUAL (CTF_CONST|CTF_VOLATILE)
79
+ #define CTF_ALIGN (CTMASK_ALIGN<<CTSHIFT_ALIGN)
80
+ #define CTF_UCHAR ((char)-1 > 0 ? CTF_UNSIGNED : 0)
81
+
82
+ /* Flags used in parser. .F.Ammvf cp->attr */
83
+ #define CTFP_ALIGNED 0x00000001u /* cp->attr + ALIGN */
84
+ #define CTFP_PACKED 0x00000002u /* cp->attr */
85
+ /* ...C...f cp->fattr */
86
+ #define CTFP_CCONV 0x00000001u /* cp->fattr + CCONV/[SSE]REGPARM */
87
+
88
+ /* C type info bitfields. */
89
+ #define CTMASK_CID 0x0000ffffu /* Max. 65536 type IDs. */
90
+ #define CTMASK_NUM 0xf0000000u /* Max. 16 type numbers. */
91
+ #define CTSHIFT_NUM 28
92
+ #define CTMASK_ALIGN 15 /* Max. alignment is 2^15. */
93
+ #define CTSHIFT_ALIGN 16
94
+ #define CTMASK_ATTRIB 255 /* Max. 256 attributes. */
95
+ #define CTSHIFT_ATTRIB 16
96
+ #define CTMASK_CCONV 3 /* Max. 4 calling conventions. */
97
+ #define CTSHIFT_CCONV 16
98
+ #define CTMASK_REGPARM 3 /* Max. 0-3 regparms. */
99
+ #define CTSHIFT_REGPARM 18
100
+ /* Bitfields only used in parser. */
101
+ #define CTMASK_VSIZEP 15 /* Max. vector size is 2^15. */
102
+ #define CTSHIFT_VSIZEP 4
103
+ #define CTMASK_MSIZEP 255 /* Max. type size (via mode) is 128. */
104
+ #define CTSHIFT_MSIZEP 8
105
+
106
+ /* Info bits for BITFIELD. Max. size of bitfield is 64 bits. */
107
+ #define CTBSZ_MAX 32 /* Max. size of bitfield is 32 bit. */
108
+ #define CTBSZ_FIELD 127 /* Temp. marker for regular field. */
109
+ #define CTMASK_BITPOS 127
110
+ #define CTMASK_BITBSZ 127
111
+ #define CTMASK_BITCSZ 127
112
+ #define CTSHIFT_BITPOS 0
113
+ #define CTSHIFT_BITBSZ 8
114
+ #define CTSHIFT_BITCSZ 16
115
+
116
+ #define CTF_INSERT(info, field, val) \
117
+ info = (info & ~(CTMASK_##field<<CTSHIFT_##field)) | \
118
+ (((CTSize)(val) & CTMASK_##field) << CTSHIFT_##field)
119
+
120
+ /* Calling conventions. ORDER CC */
121
+ enum { CTCC_CDECL, CTCC_THISCALL, CTCC_FASTCALL, CTCC_STDCALL };
122
+
123
+ /* Attribute numbers. */
124
+ enum {
125
+ CTA_NONE, /* Ignored attribute. Must be zero. */
126
+ CTA_QUAL, /* Unmerged qualifiers. */
127
+ CTA_ALIGN, /* Alignment override. */
128
+ CTA_SUBTYPE, /* Transparent sub-type. */
129
+ CTA_REDIR, /* Redirected symbol name. */
130
+ CTA_BAD, /* To catch bad IDs. */
131
+ CTA__MAX
132
+ };
133
+
134
+ /* Special sizes. */
135
+ #define CTSIZE_INVALID 0xffffffffu
136
+
137
+ typedef uint32_t CTInfo; /* Type info. */
138
+ typedef uint32_t CTSize; /* Type size. */
139
+ typedef uint32_t CTypeID; /* Type ID. */
140
+ typedef uint16_t CTypeID1; /* Minimum-sized type ID. */
141
+
142
+ /* C type table element. */
143
+ typedef struct CType {
144
+ CTInfo info; /* Type info. */
145
+ CTSize size; /* Type size or other info. */
146
+ CTypeID1 sib; /* Sibling element. */
147
+ CTypeID1 next; /* Next element in hash chain. */
148
+ GCRef name; /* Element name (GCstr). */
149
+ } CType;
150
+
151
+ #define CTHASH_SIZE 128 /* Number of hash anchors. */
152
+ #define CTHASH_MASK (CTHASH_SIZE-1)
153
+
154
+ /* Simplify target-specific configuration. Checked in lj_ccall.h. */
155
+ #define CCALL_MAX_GPR 8
156
+ #define CCALL_MAX_FPR 8
157
+
158
+ typedef LJ_ALIGN(8) union FPRCBArg { double d; float f[2]; } FPRCBArg;
159
+
160
+ /* C callback state. Defined here, to avoid dragging in lj_ccall.h. */
161
+
162
+ typedef LJ_ALIGN(8) struct CCallback {
163
+ FPRCBArg fpr[CCALL_MAX_FPR]; /* Arguments/results in FPRs. */
164
+ intptr_t gpr[CCALL_MAX_GPR]; /* Arguments/results in GPRs. */
165
+ intptr_t *stack; /* Pointer to arguments on stack. */
166
+ void *mcode; /* Machine code for callback func. pointers. */
167
+ CTypeID1 *cbid; /* Callback type table. */
168
+ MSize sizeid; /* Size of callback type table. */
169
+ MSize topid; /* Highest unused callback type table slot. */
170
+ MSize slot; /* Current callback slot. */
171
+ } CCallback;
172
+
173
+ /* C type state. */
174
+ typedef struct CTState {
175
+ CType *tab; /* C type table. */
176
+ CTypeID top; /* Current top of C type table. */
177
+ MSize sizetab; /* Size of C type table. */
178
+ lua_State *L; /* Lua state (needed for errors and allocations). */
179
+ global_State *g; /* Global state. */
180
+ GCtab *finalizer; /* Map of cdata to finalizer. */
181
+ GCtab *miscmap; /* Map of -CTypeID to metatable and cb slot to func. */
182
+ CCallback cb; /* Temporary callback state. */
183
+ CTypeID1 hash[CTHASH_SIZE]; /* Hash anchors for C type table. */
184
+ } CTState;
185
+
186
+ #define CTINFO(ct, flags) (((CTInfo)(ct) << CTSHIFT_NUM) + (flags))
187
+ #define CTALIGN(al) ((CTSize)(al) << CTSHIFT_ALIGN)
188
+ #define CTATTRIB(at) ((CTInfo)(at) << CTSHIFT_ATTRIB)
189
+
190
+ #define ctype_type(info) ((info) >> CTSHIFT_NUM)
191
+ #define ctype_cid(info) ((CTypeID)((info) & CTMASK_CID))
192
+ #define ctype_align(info) (((info) >> CTSHIFT_ALIGN) & CTMASK_ALIGN)
193
+ #define ctype_attrib(info) (((info) >> CTSHIFT_ATTRIB) & CTMASK_ATTRIB)
194
+ #define ctype_bitpos(info) (((info) >> CTSHIFT_BITPOS) & CTMASK_BITPOS)
195
+ #define ctype_bitbsz(info) (((info) >> CTSHIFT_BITBSZ) & CTMASK_BITBSZ)
196
+ #define ctype_bitcsz(info) (((info) >> CTSHIFT_BITCSZ) & CTMASK_BITCSZ)
197
+ #define ctype_vsizeP(info) (((info) >> CTSHIFT_VSIZEP) & CTMASK_VSIZEP)
198
+ #define ctype_msizeP(info) (((info) >> CTSHIFT_MSIZEP) & CTMASK_MSIZEP)
199
+ #define ctype_cconv(info) (((info) >> CTSHIFT_CCONV) & CTMASK_CCONV)
200
+
201
+ /* Simple type checks. */
202
+ #define ctype_isnum(info) (ctype_type((info)) == CT_NUM)
203
+ #define ctype_isvoid(info) (ctype_type((info)) == CT_VOID)
204
+ #define ctype_isptr(info) (ctype_type((info)) == CT_PTR)
205
+ #define ctype_isarray(info) (ctype_type((info)) == CT_ARRAY)
206
+ #define ctype_isstruct(info) (ctype_type((info)) == CT_STRUCT)
207
+ #define ctype_isfunc(info) (ctype_type((info)) == CT_FUNC)
208
+ #define ctype_isenum(info) (ctype_type((info)) == CT_ENUM)
209
+ #define ctype_istypedef(info) (ctype_type((info)) == CT_TYPEDEF)
210
+ #define ctype_isattrib(info) (ctype_type((info)) == CT_ATTRIB)
211
+ #define ctype_isfield(info) (ctype_type((info)) == CT_FIELD)
212
+ #define ctype_isbitfield(info) (ctype_type((info)) == CT_BITFIELD)
213
+ #define ctype_isconstval(info) (ctype_type((info)) == CT_CONSTVAL)
214
+ #define ctype_isextern(info) (ctype_type((info)) == CT_EXTERN)
215
+ #define ctype_hassize(info) (ctype_type((info)) <= CT_HASSIZE)
216
+
217
+ /* Combined type and flag checks. */
218
+ #define ctype_isinteger(info) \
219
+ (((info) & (CTMASK_NUM|CTF_BOOL|CTF_FP)) == CTINFO(CT_NUM, 0))
220
+ #define ctype_isinteger_or_bool(info) \
221
+ (((info) & (CTMASK_NUM|CTF_FP)) == CTINFO(CT_NUM, 0))
222
+ #define ctype_isbool(info) \
223
+ (((info) & (CTMASK_NUM|CTF_BOOL)) == CTINFO(CT_NUM, CTF_BOOL))
224
+ #define ctype_isfp(info) \
225
+ (((info) & (CTMASK_NUM|CTF_FP)) == CTINFO(CT_NUM, CTF_FP))
226
+
227
+ #define ctype_ispointer(info) \
228
+ ((ctype_type(info) >> 1) == (CT_PTR >> 1)) /* Pointer or array. */
229
+ #define ctype_isref(info) \
230
+ (((info) & (CTMASK_NUM|CTF_REF)) == CTINFO(CT_PTR, CTF_REF))
231
+
232
+ #define ctype_isrefarray(info) \
233
+ (((info) & (CTMASK_NUM|CTF_VECTOR|CTF_COMPLEX)) == CTINFO(CT_ARRAY, 0))
234
+ #define ctype_isvector(info) \
235
+ (((info) & (CTMASK_NUM|CTF_VECTOR)) == CTINFO(CT_ARRAY, CTF_VECTOR))
236
+ #define ctype_iscomplex(info) \
237
+ (((info) & (CTMASK_NUM|CTF_COMPLEX)) == CTINFO(CT_ARRAY, CTF_COMPLEX))
238
+
239
+ #define ctype_isvltype(info) \
240
+ (((info) & ((CTMASK_NUM|CTF_VLA) - (2u<<CTSHIFT_NUM))) == \
241
+ CTINFO(CT_STRUCT, CTF_VLA)) /* VL array or VL struct. */
242
+ #define ctype_isvlarray(info) \
243
+ (((info) & (CTMASK_NUM|CTF_VLA)) == CTINFO(CT_ARRAY, CTF_VLA))
244
+
245
+ #define ctype_isxattrib(info, at) \
246
+ (((info) & (CTMASK_NUM|CTATTRIB(CTMASK_ATTRIB))) == \
247
+ CTINFO(CT_ATTRIB, CTATTRIB(at)))
248
+
249
+ /* Target-dependent sizes and alignments. */
250
+ #if LJ_64
251
+ #define CTSIZE_PTR 8
252
+ #define CTALIGN_PTR CTALIGN(3)
253
+ #else
254
+ #define CTSIZE_PTR 4
255
+ #define CTALIGN_PTR CTALIGN(2)
256
+ #endif
257
+
258
+ #define CTINFO_REF(ref) \
259
+ CTINFO(CT_PTR, (CTF_CONST|CTF_REF|CTALIGN_PTR) + (ref))
260
+
261
+ #define CT_MEMALIGN 3 /* Alignment guaranteed by memory allocator. */
262
+
263
+ /* -- Predefined types ---------------------------------------------------- */
264
+
265
+ /* Target-dependent types. */
266
+ #if LJ_TARGET_PPC
267
+ #define CTTYDEFP(_) \
268
+ _(LINT32, 4, CT_NUM, CTF_LONG|CTALIGN(2))
269
+ #else
270
+ #define CTTYDEFP(_)
271
+ #endif
272
+
273
+ /* Common types. */
274
+ #define CTTYDEF(_) \
275
+ _(NONE, 0, CT_ATTRIB, CTATTRIB(CTA_BAD)) \
276
+ _(VOID, -1, CT_VOID, CTALIGN(0)) \
277
+ _(CVOID, -1, CT_VOID, CTF_CONST|CTALIGN(0)) \
278
+ _(BOOL, 1, CT_NUM, CTF_BOOL|CTF_UNSIGNED|CTALIGN(0)) \
279
+ _(CCHAR, 1, CT_NUM, CTF_CONST|CTF_UCHAR|CTALIGN(0)) \
280
+ _(INT8, 1, CT_NUM, CTALIGN(0)) \
281
+ _(UINT8, 1, CT_NUM, CTF_UNSIGNED|CTALIGN(0)) \
282
+ _(INT16, 2, CT_NUM, CTALIGN(1)) \
283
+ _(UINT16, 2, CT_NUM, CTF_UNSIGNED|CTALIGN(1)) \
284
+ _(INT32, 4, CT_NUM, CTALIGN(2)) \
285
+ _(UINT32, 4, CT_NUM, CTF_UNSIGNED|CTALIGN(2)) \
286
+ _(INT64, 8, CT_NUM, CTF_LONG|CTALIGN(3)) \
287
+ _(UINT64, 8, CT_NUM, CTF_UNSIGNED|CTF_LONG|CTALIGN(3)) \
288
+ _(FLOAT, 4, CT_NUM, CTF_FP|CTALIGN(2)) \
289
+ _(DOUBLE, 8, CT_NUM, CTF_FP|CTALIGN(3)) \
290
+ _(COMPLEX_FLOAT, 8, CT_ARRAY, CTF_COMPLEX|CTALIGN(2)|CTID_FLOAT) \
291
+ _(COMPLEX_DOUBLE, 16, CT_ARRAY, CTF_COMPLEX|CTALIGN(3)|CTID_DOUBLE) \
292
+ _(P_VOID, CTSIZE_PTR, CT_PTR, CTALIGN_PTR|CTID_VOID) \
293
+ _(P_CVOID, CTSIZE_PTR, CT_PTR, CTALIGN_PTR|CTID_CVOID) \
294
+ _(P_CCHAR, CTSIZE_PTR, CT_PTR, CTALIGN_PTR|CTID_CCHAR) \
295
+ _(A_CCHAR, -1, CT_ARRAY, CTF_CONST|CTALIGN(0)|CTID_CCHAR) \
296
+ _(CTYPEID, 4, CT_ENUM, CTALIGN(2)|CTID_INT32) \
297
+ CTTYDEFP(_) \
298
+ /* End of type list. */
299
+
300
+ /* Public predefined type IDs. */
301
+ enum {
302
+ #define CTTYIDDEF(id, sz, ct, info) CTID_##id,
303
+ CTTYDEF(CTTYIDDEF)
304
+ #undef CTTYIDDEF
305
+ /* Predefined typedefs and keywords follow. */
306
+ CTID_MAX = 65536
307
+ };
308
+
309
+ /* Target-dependent type IDs. */
310
+ #if LJ_64
311
+ #define CTID_INT_PSZ CTID_INT64
312
+ #define CTID_UINT_PSZ CTID_UINT64
313
+ #else
314
+ #define CTID_INT_PSZ CTID_INT32
315
+ #define CTID_UINT_PSZ CTID_UINT32
316
+ #endif
317
+
318
+ #if LJ_ABI_WIN
319
+ #define CTID_WCHAR CTID_UINT16
320
+ #elif LJ_TARGET_PPC
321
+ #define CTID_WCHAR CTID_LINT32
322
+ #else
323
+ #define CTID_WCHAR CTID_INT32
324
+ #endif
325
+
326
+ /* -- C tokens and keywords ----------------------------------------------- */
327
+
328
+ /* C lexer keywords. */
329
+ #define CTOKDEF(_) \
330
+ _(IDENT, "<identifier>") _(STRING, "<string>") \
331
+ _(INTEGER, "<integer>") _(EOF, "<eof>") \
332
+ _(OROR, "||") _(ANDAND, "&&") _(EQ, "==") _(NE, "!=") \
333
+ _(LE, "<=") _(GE, ">=") _(SHL, "<<") _(SHR, ">>") _(DEREF, "->")
334
+
335
+ /* Simple declaration specifiers. */
336
+ #define CDSDEF(_) \
337
+ _(VOID) _(BOOL) _(CHAR) _(INT) _(FP) \
338
+ _(LONG) _(LONGLONG) _(SHORT) _(COMPLEX) _(SIGNED) _(UNSIGNED) \
339
+ _(CONST) _(VOLATILE) _(RESTRICT) _(INLINE) \
340
+ _(TYPEDEF) _(EXTERN) _(STATIC) _(AUTO) _(REGISTER)
341
+
342
+ /* C keywords. */
343
+ #define CKWDEF(_) \
344
+ CDSDEF(_) _(EXTENSION) _(ASM) _(ATTRIBUTE) \
345
+ _(DECLSPEC) _(CCDECL) _(PTRSZ) \
346
+ _(STRUCT) _(UNION) _(ENUM) \
347
+ _(SIZEOF) _(ALIGNOF)
348
+
349
+ /* C token numbers. */
350
+ enum {
351
+ CTOK_OFS = 255,
352
+ #define CTOKNUM(name, sym) CTOK_##name,
353
+ #define CKWNUM(name) CTOK_##name,
354
+ CTOKDEF(CTOKNUM)
355
+ CKWDEF(CKWNUM)
356
+ #undef CTOKNUM
357
+ #undef CKWNUM
358
+ CTOK_FIRSTDECL = CTOK_VOID,
359
+ CTOK_FIRSTSCL = CTOK_TYPEDEF,
360
+ CTOK_LASTDECLFLAG = CTOK_REGISTER,
361
+ CTOK_LASTDECL = CTOK_ENUM
362
+ };
363
+
364
+ /* Declaration specifier flags. */
365
+ enum {
366
+ #define CDSFLAG(name) CDF_##name = (1u << (CTOK_##name - CTOK_FIRSTDECL)),
367
+ CDSDEF(CDSFLAG)
368
+ #undef CDSFLAG
369
+ CDF__END
370
+ };
371
+
372
+ #define CDF_SCL (CDF_TYPEDEF|CDF_EXTERN|CDF_STATIC|CDF_AUTO|CDF_REGISTER)
373
+
374
+ /* -- C type management --------------------------------------------------- */
375
+
376
+ #define ctype_ctsG(g) (mref((g)->ctype_state, CTState))
377
+
378
+ /* Get C type state. */
379
+ static LJ_AINLINE CTState *ctype_cts(lua_State *L)
380
+ {
381
+ CTState *cts = ctype_ctsG(G(L));
382
+ cts->L = L; /* Save L for errors and allocations. */
383
+ return cts;
384
+ }
385
+
386
+ /* Save and restore state of C type table. */
387
+ #define LJ_CTYPE_SAVE(cts) CTState savects_ = *(cts)
388
+ #define LJ_CTYPE_RESTORE(cts) \
389
+ ((cts)->top = savects_.top, \
390
+ memcpy((cts)->hash, savects_.hash, sizeof(savects_.hash)))
391
+
392
+ /* Check C type ID for validity when assertions are enabled. */
393
+ static LJ_AINLINE CTypeID ctype_check(CTState *cts, CTypeID id)
394
+ {
395
+ lua_assert(id > 0 && id < cts->top); UNUSED(cts);
396
+ return id;
397
+ }
398
+
399
+ /* Get C type for C type ID. */
400
+ static LJ_AINLINE CType *ctype_get(CTState *cts, CTypeID id)
401
+ {
402
+ return &cts->tab[ctype_check(cts, id)];
403
+ }
404
+
405
+ /* Get C type ID for a C type. */
406
+ #define ctype_typeid(cts, ct) ((CTypeID)((ct) - (cts)->tab))
407
+
408
+ /* Get child C type. */
409
+ static LJ_AINLINE CType *ctype_child(CTState *cts, CType *ct)
410
+ {
411
+ lua_assert(!(ctype_isvoid(ct->info) || ctype_isstruct(ct->info) ||
412
+ ctype_isbitfield(ct->info))); /* These don't have children. */
413
+ return ctype_get(cts, ctype_cid(ct->info));
414
+ }
415
+
416
+ /* Get raw type for a C type ID. */
417
+ static LJ_AINLINE CType *ctype_raw(CTState *cts, CTypeID id)
418
+ {
419
+ CType *ct = ctype_get(cts, id);
420
+ while (ctype_isattrib(ct->info)) ct = ctype_child(cts, ct);
421
+ return ct;
422
+ }
423
+
424
+ /* Get raw type of the child of a C type. */
425
+ static LJ_AINLINE CType *ctype_rawchild(CTState *cts, CType *ct)
426
+ {
427
+ do { ct = ctype_child(cts, ct); } while (ctype_isattrib(ct->info));
428
+ return ct;
429
+ }
430
+
431
+ /* Set the name of a C type table element. */
432
+ static LJ_AINLINE void ctype_setname(CType *ct, GCstr *s)
433
+ {
434
+ /* NOBARRIER: mark string as fixed -- the C type table is never collected. */
435
+ fixstring(s);
436
+ setgcref(ct->name, obj2gco(s));
437
+ }
438
+
439
+ LJ_FUNC CTypeID lj_ctype_new(CTState *cts, CType **ctp);
440
+ LJ_FUNC CTypeID lj_ctype_intern(CTState *cts, CTInfo info, CTSize size);
441
+ LJ_FUNC void lj_ctype_addname(CTState *cts, CType *ct, CTypeID id);
442
+ LJ_FUNC CTypeID lj_ctype_getname(CTState *cts, CType **ctp, GCstr *name,
443
+ uint32_t tmask);
444
+ LJ_FUNC CType *lj_ctype_getfieldq(CTState *cts, CType *ct, GCstr *name,
445
+ CTSize *ofs, CTInfo *qual);
446
+ #define lj_ctype_getfield(cts, ct, name, ofs) \
447
+ lj_ctype_getfieldq((cts), (ct), (name), (ofs), NULL)
448
+ LJ_FUNC CType *lj_ctype_rawref(CTState *cts, CTypeID id);
449
+ LJ_FUNC CTSize lj_ctype_size(CTState *cts, CTypeID id);
450
+ LJ_FUNC CTSize lj_ctype_vlsize(CTState *cts, CType *ct, CTSize nelem);
451
+ LJ_FUNC CTInfo lj_ctype_info(CTState *cts, CTypeID id, CTSize *szp);
452
+ LJ_FUNC cTValue *lj_ctype_meta(CTState *cts, CTypeID id, MMS mm);
453
+ LJ_FUNC GCstr *lj_ctype_repr(lua_State *L, CTypeID id, GCstr *name);
454
+ LJ_FUNC GCstr *lj_ctype_repr_int64(lua_State *L, uint64_t n, int isunsigned);
455
+ LJ_FUNC GCstr *lj_ctype_repr_complex(lua_State *L, void *sp, CTSize size);
456
+ LJ_FUNC CTState *lj_ctype_init(lua_State *L);
457
+ LJ_FUNC void lj_ctype_freestate(global_State *g);
458
+
459
+ #endif
460
+
461
+ #endif