rufus-lua-win 5.1.5

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 (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,170 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Cooperative Threads Scheduler with Integrated I/O --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ --[[VERBOSE]] local rawget = rawget
17
+ --[[VERBOSE]] local tostring = tostring
18
+
19
+ local ipairs = ipairs
20
+ local getmetatable = getmetatable
21
+ local math = require "math"
22
+ local oo = require "loop.simple"
23
+ local MapWithArrayOfKeys = require "loop.collection.MapWithArrayOfKeys"
24
+ local Scheduler = require "loop.thread.Scheduler"
25
+
26
+ module "loop.thread.IOScheduler"
27
+
28
+ oo.class(_M, Scheduler)
29
+
30
+ --------------------------------------------------------------------------------
31
+ -- Initialization Code ---------------------------------------------------------
32
+ --------------------------------------------------------------------------------
33
+
34
+ function __init(class, self)
35
+ self = Scheduler.__init(class, self)
36
+ self.reading = MapWithArrayOfKeys()
37
+ self.writing = MapWithArrayOfKeys()
38
+ return self
39
+ end
40
+ __init(getmetatable(_M), _M)
41
+
42
+ --------------------------------------------------------------------------------
43
+ -- Internal Functions ----------------------------------------------------------
44
+ --------------------------------------------------------------------------------
45
+
46
+ function signalall(self, timeout) --[[VERBOSE]] local verbose = self.verbose
47
+ if timeout then timeout = math.max(timeout - self:time(), 0) end
48
+ local reading, writing = self.reading, self.writing
49
+ if #reading > 0 or #writing > 0 then --[[VERBOSE]] verbose:scheduler(true, "signaling blocked threads for ",timeout," seconds")
50
+ local running = self.running
51
+ local readok, writeok = self.select(reading, writing, timeout)
52
+ local index = 1
53
+ while index <= #reading do
54
+ local channel = reading[index]
55
+ if readok[channel] then --[[VERBOSE]] verbose:threads("unblocking reading ",reading[channel])
56
+ running:enqueue(reading[channel])
57
+ reading:removeat(index)
58
+ else
59
+ index = index + 1
60
+ end
61
+ end
62
+ index = 1
63
+ while index <= #writing do
64
+ local channel = writing[index]
65
+ if writeok[channel] then --[[VERBOSE]] verbose:threads("unblocking writing ", writing[channel])
66
+ running:enqueue(writing[channel])
67
+ writing:removeat(index)
68
+ else
69
+ index = index + 1
70
+ end
71
+ end --[[VERBOSE]] verbose:scheduler(false, "blocked threads signaled")
72
+ return true
73
+ elseif timeout and timeout > 0 then --[[VERBOSE]] verbose:scheduler("no threads blocked, sleeping for ",timeout," seconds")
74
+ self.sleep(timeout)
75
+ end
76
+ return false
77
+ end
78
+
79
+ --------------------------------------------------------------------------------
80
+ -- Customizable Behavior -------------------------------------------------------
81
+ --------------------------------------------------------------------------------
82
+
83
+ idle = signalall
84
+
85
+ --------------------------------------------------------------------------------
86
+ -- Exported API ----------------------------------------------------------------
87
+ --------------------------------------------------------------------------------
88
+
89
+ function register(self, routine, previous)
90
+ local reading, writing = self.reading, self.writing
91
+ for _, channel in ipairs(reading) do
92
+ if reading[channel] == routine then return end
93
+ end
94
+ for _, channel in ipairs(writing) do
95
+ if writing[channel] == routine then return end
96
+ end
97
+ return Scheduler.register(self, routine, previous)
98
+ end
99
+
100
+ local function handleremoved(self, routine, removed, ...)
101
+ local reading, writing = self.reading, self.writing
102
+ local index = 1
103
+ while index <= #reading do
104
+ local channel = reading[index]
105
+ if reading[channel] == routine then
106
+ reading:removeat(index)
107
+ removed = routine
108
+ else
109
+ index = index + 1
110
+ end
111
+ end
112
+ index = 1
113
+ while index <= #writing do
114
+ local channel = writing[index]
115
+ if writing[channel] == routine then
116
+ writing:removeat(index)
117
+ removed = routine
118
+ else
119
+ index = index + 1
120
+ end
121
+ end
122
+ return removed, ...
123
+ end
124
+ function remove(self, routine)
125
+ return handleremoved(self, routine, Scheduler.remove(self, routine))
126
+ end
127
+
128
+ --------------------------------------------------------------------------------
129
+ -- Control Functions -----------------------------------------------------------
130
+ --------------------------------------------------------------------------------
131
+
132
+ function step(self, ...) --[[VERBOSE]] local verbose = self.verbose; verbose:scheduler(true, "performing scheduling step")
133
+ local signaled = self:signalall(0)
134
+ local wokenup = self:wakeupall()
135
+ local resumed = self:resumeall(nil, ...) --[[VERBOSE]] verbose:scheduler(false, "scheduling step performed")
136
+ return signaled or wokenup or resumed
137
+ end
138
+
139
+ --------------------------------------------------------------------------------
140
+ -- Verbose Support -------------------------------------------------------------
141
+ --------------------------------------------------------------------------------
142
+
143
+ --[[VERBOSE]] local oldfunc = verbose.custom.threads
144
+ --[[VERBOSE]] function verbose.custom:threads(...)
145
+ --[[VERBOSE]] local viewer = self.viewer
146
+ --[[VERBOSE]] local output = self.viewer.output
147
+ --[[VERBOSE]]
148
+ --[[VERBOSE]] oldfunc(self, ...)
149
+ --[[VERBOSE]]
150
+ --[[VERBOSE]] local scheduler = rawget(self, "schedulerdetails")
151
+ --[[VERBOSE]] if scheduler then
152
+ --[[VERBOSE]] local newline = "\n"..viewer.prefix..viewer.indentation
153
+ --[[VERBOSE]]
154
+ --[[VERBOSE]] output:write(newline)
155
+ --[[VERBOSE]] output:write("Reading:")
156
+ --[[VERBOSE]] for _, current in ipairs(scheduler.reading) do
157
+ --[[VERBOSE]] current = scheduler.reading[current]
158
+ --[[VERBOSE]] output:write(" ")
159
+ --[[VERBOSE]] output:write(tostring(self.labels[current]))
160
+ --[[VERBOSE]] end
161
+ --[[VERBOSE]]
162
+ --[[VERBOSE]] output:write(newline)
163
+ --[[VERBOSE]] output:write("Writing:")
164
+ --[[VERBOSE]] for _, current in ipairs(scheduler.writing) do
165
+ --[[VERBOSE]] current = scheduler.writing[current]
166
+ --[[VERBOSE]] output:write(" ")
167
+ --[[VERBOSE]] output:write(tostring(self.labels[current]))
168
+ --[[VERBOSE]] end
169
+ --[[VERBOSE]] end
170
+ --[[VERBOSE]] end
@@ -0,0 +1,327 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Cooperative Threads Scheduler based on Coroutines --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ --[[VERBOSE]] local type = type
17
+ --[[VERBOSE]] local unpack = unpack
18
+ --[[VERBOSE]] local rawget = rawget
19
+ --[[VERBOSE]] local select = select
20
+ --[[VERBOSE]] local tostring = tostring
21
+ --[[VERBOSE]] local string = require "string"
22
+ --[[VERBOSE]] local table = require "table"
23
+ --[[VERBOSE]] local math = require "math"
24
+ --[[VERBOSE]] local ObjectCache = require "loop.collection.ObjectCache"
25
+ --[[VERBOSE]] local Verbose = require "loop.debug.Verbose"
26
+ --[[DEBUG]] local Inspector = require "loop.debug.Inspector"
27
+
28
+ local luaerror = error
29
+ local assert = assert
30
+ local getmetatable = getmetatable
31
+ local luapcall = pcall
32
+ local rawget = rawget
33
+ local coroutine = require "coroutine"
34
+ local os = require "os"
35
+ local oo = require "loop.base"
36
+ local OrderedSet = require "loop.collection.OrderedSet"
37
+ local PriorityQueue = require "loop.collection.PriorityQueue"
38
+
39
+ local traceback = debug and debug.traceback or function(_, err) return err end
40
+
41
+ module("loop.thread.Scheduler", oo.class)
42
+
43
+ --------------------------------------------------------------------------------
44
+ -- Initialization Code ---------------------------------------------------------
45
+ --------------------------------------------------------------------------------
46
+
47
+ local WeakSet = oo.class{ __mode = "k" }
48
+ function __init(class, self)
49
+ self = oo.rawnew(class, self)
50
+ if rawget(self, "traps" ) == nil then self.traps = WeakSet() end
51
+ if rawget(self, "running" ) == nil then self.running = OrderedSet() end
52
+ if rawget(self, "sleeping" ) == nil then self.sleeping = PriorityQueue() end
53
+ if rawget(self, "current" ) == nil then self.current = false end
54
+ if rawget(self, "currentkey") == nil then self.currentkey = OrderedSet.firstkey end
55
+ self.sleeping.wakeup = self.sleeping.wakeup or self.sleeping.priority
56
+ return self
57
+ end
58
+ __init(getmetatable(_M), _M)
59
+
60
+ --------------------------------------------------------------------------------
61
+ -- Coroutine Compatible pcall --------------------------------------------------
62
+ --------------------------------------------------------------------------------
63
+
64
+ -- NOTE:[maia] Maps running threads to the scheduled threads they were created
65
+ -- and also keeps a linked list of upper pcall threads that starts
66
+ -- at the scheduled thread. See below for an example:
67
+ -- Coroutine hierarchy:
68
+ -- current -> pcall1 -> pcall2 -> pcall3 -> pcall4
69
+ -- PCallMap = {
70
+ -- [pcall4] = current,
71
+ -- [current] = pcall3,
72
+ -- [pcall3] = pcall2,
73
+ -- [pcall2] = pcall1,
74
+ -- }
75
+ local PCallMap = {}
76
+
77
+ local function resumepcall(pcall, success, ...)
78
+ if coroutine.status(pcall) == "suspended" then
79
+ return resumepcall(pcall, coroutine.resume(pcall, coroutine.yield(...)))
80
+ else
81
+ local current = PCallMap[pcall] --[[VERBOSE]] verbose:copcall(false, "protected call finished in ",current)
82
+ local running = PCallMap[current]
83
+ if running then
84
+ PCallMap[current] = PCallMap[running]
85
+ PCallMap[running] = current
86
+ end
87
+ PCallMap[pcall] = nil
88
+ return success, ...
89
+ end
90
+ end
91
+
92
+ function pcall(func, ...)
93
+ local luafunc, pcall = luapcall(coroutine.create, func)
94
+ if luafunc then
95
+ local running = coroutine.running()
96
+ local current = PCallMap[running] --[[VERBOSE]] verbose:copcall(true, "new protected call in ",current or running)
97
+ if current then
98
+ PCallMap[running] = PCallMap[current]
99
+ PCallMap[current] = running
100
+ PCallMap[pcall] = current
101
+ else
102
+ PCallMap[pcall] = running
103
+ end
104
+ return resumepcall(pcall, coroutine.resume(pcall, ...))
105
+ else
106
+ return luapcall(func, ...)
107
+ end
108
+ end
109
+
110
+ function getpcall()
111
+ return pcall
112
+ end
113
+
114
+ function checkcurrent(self)
115
+ local current = self.current
116
+ local running = coroutine.running()
117
+ assert(current,
118
+ "attempt to call scheduler operation out of a scheduled routine context.")
119
+ assert(current == running or PCallMap[running] == current,
120
+ "inconsistent internal state, current scheduled routine is not running.")
121
+ return current
122
+ end
123
+
124
+ --------------------------------------------------------------------------------
125
+ -- Internal Functions ----------------------------------------------------------
126
+ --------------------------------------------------------------------------------
127
+
128
+ function resumeall(self, success, ...) --[[VERBOSE]] local verbose = self.verbose
129
+ local routine = self.current
130
+ if routine then --[[VERBOSE]] verbose:threads(false, routine," yielded")
131
+ if coroutine.status(routine) == "dead" then --[[VERBOSE]] verbose:threads(routine," has finished")
132
+ self:remove(routine, self.currentkey)
133
+ self.current = false
134
+ local trap = self.traps[routine]
135
+ if trap then --[[VERBOSE]] verbose:threads(true, "executing trap for ",routine)
136
+ trap(self, routine, success, ...) --[[VERBOSE]] verbose:threads(false)
137
+ elseif not success then --[[VERBOSE]] verbose:threads("uncaptured error on ",routine)
138
+ self:error(routine, ...)
139
+ end
140
+ elseif self.running:contains(routine) then
141
+ self.currentkey = routine
142
+ end --[[VERBOSE]] else verbose:scheduler(true, "resuming running threads")
143
+ end
144
+ routine = self.running[self.currentkey]
145
+ if routine then
146
+ self.current = routine --[[VERBOSE]] verbose:threads(true, "resuming ",routine)
147
+ return self:resumeall(coroutine.resume(routine, ...))
148
+ else --[[VERBOSE]] verbose:scheduler(false, "running threads resumed")
149
+ self.currentkey = OrderedSet.firstkey
150
+ self.current = false
151
+ return success ~= nil
152
+ end
153
+ end
154
+
155
+ function wakeupall(self) --[[VERBOSE]] local verbose = self.verbose
156
+ local sleeping = self.sleeping
157
+ if sleeping:head() then --[[VERBOSE]] verbose:scheduler(true, "waking sleeping threads up")
158
+ local running = self.running
159
+ local now = self:time()
160
+ repeat
161
+ if sleeping:wakeup(sleeping:head()) <= now
162
+ then running:enqueue(sleeping:dequeue()) --[[VERBOSE]] verbose:threads(self.running:tail()," woke up")
163
+ else break
164
+ end
165
+ until sleeping:empty() --[[VERBOSE]] verbose:scheduler(false, "sleeping threads waken")
166
+ return true
167
+ end
168
+ return false
169
+ end
170
+
171
+ --------------------------------------------------------------------------------
172
+ -- Customizable Behavior -------------------------------------------------------
173
+ --------------------------------------------------------------------------------
174
+
175
+ local StartTime = os.time()
176
+ function time(self)
177
+ return os.difftime(os.time(), StartTime)
178
+ end
179
+
180
+ function idle(self, timeout) --[[VERBOSE]] self.verbose:scheduler(true, "starting busy-waiting for ",timeout," seconds")
181
+ if timeout then repeat until self:time() > timeout end --[[VERBOSE]] self.verbose:scheduler(false, "busy-waiting ended")
182
+ end
183
+
184
+ function error(self, routine, errmsg)
185
+ luaerror(traceback(routine, errmsg))
186
+ end
187
+
188
+ --------------------------------------------------------------------------------
189
+ -- Exported API ----------------------------------------------------------------
190
+ --------------------------------------------------------------------------------
191
+
192
+ function register(self, routine, previous) --[[VERBOSE]] self.verbose:threads("registering ",routine)
193
+ return not self.sleeping:contains(routine) and
194
+ self.running:insert(routine, previous)
195
+ end
196
+
197
+ function remove(self, routine) --[[VERBOSE]] self.verbose:threads("removing ",routine)
198
+ if routine == self.current then
199
+ return self.running:remove(routine, self.currentkey)
200
+ elseif routine == self.currentkey then
201
+ self.currentkey = self.running:previous(routine)
202
+ return self.running:remove(routine, self.currentkey)
203
+ elseif self.running:remove(routine) then
204
+ return routine
205
+ else
206
+ return self.sleeping:remove(routine)
207
+ end
208
+ end
209
+
210
+ function suspend(self, time, ...)
211
+ local routine = self:checkcurrent()
212
+ self.running:remove(routine, self.currentkey)
213
+ if time then self.sleeping:enqueue(routine, self:time() + time) end --[[VERBOSE]] self.verbose:threads(routine," waiting for ",time," seconds")
214
+ return coroutine.yield(...)
215
+ end
216
+
217
+ function resume(self, routine, ...) --[[VERBOSE]] self.verbose:threads("resuming ",routine)
218
+ local current = self:checkcurrent()
219
+ if not self:register(routine, current) then
220
+ self:register(self:remove(routine), current)
221
+ end
222
+ return coroutine.yield(...)
223
+ end
224
+
225
+ function start(self, func, ...)
226
+ self.running:insert(coroutine.create(func), self:checkcurrent()) --[[VERBOSE]] self.verbose:threads("starting ",self.running[self.current])
227
+ return coroutine.yield(...)
228
+ end
229
+
230
+ --------------------------------------------------------------------------------
231
+ -- Control Functions -----------------------------------------------------------
232
+ --------------------------------------------------------------------------------
233
+
234
+ function step(self, ...) --[[VERBOSE]] local verbose = self.verbose; verbose:scheduler(true, "performing scheduling step")
235
+ local woken = self:wakeupall()
236
+ local resumed = self:resumeall(nil, ...) --[[VERBOSE]] verbose:scheduler(false, "scheduling step performed")
237
+ return woken or resumed
238
+ end
239
+
240
+ function run(self, ...) --[[VERBOSE]] local verbose = self.verbose; verbose:scheduler(true, "running scheduler")
241
+ if self:step(...) and not self.halted then
242
+ local running = self.running
243
+ if running:empty() then
244
+ local sleeping = self.sleeping
245
+ local nextwake = sleeping:head()
246
+ if nextwake then nextwake = sleeping:wakeup(nextwake) end --[[VERBOSE]] verbose:scheduler(true, "idle until ",nextwake)
247
+ self:idle(nextwake) --[[VERBOSE]] verbose:scheduler(false, "resuming scheduling")
248
+ end --[[VERBOSE]] verbose:scheduler(false, "reissue scheduling")
249
+ return self:run()
250
+ else --[[VERBOSE]] verbose:scheduler(false, "no thread pending scheduling or scheduler halted")
251
+ self.halted = nil
252
+ end
253
+ end
254
+
255
+ function halt(self)
256
+ self.halted = true
257
+ end
258
+
259
+ --------------------------------------------------------------------------------
260
+ -- Verbose Support -------------------------------------------------------------
261
+ --------------------------------------------------------------------------------
262
+
263
+ --[[VERBOSE]] verbose = Verbose()
264
+ --[[VERBOSE]]
265
+ --[[VERBOSE]] local LabelStart = string.byte("A")
266
+ --[[VERBOSE]] verbose.labels = ObjectCache{ current = 0 }
267
+ --[[VERBOSE]] function verbose.labels:retrieve(value)
268
+ --[[VERBOSE]] if type(value) == "thread" then
269
+ --[[VERBOSE]] local id = self.current
270
+ --[[VERBOSE]] local label = {}
271
+ --[[VERBOSE]] repeat
272
+ --[[VERBOSE]] label[#label+1] = LabelStart + (id % 26)
273
+ --[[VERBOSE]] id = math.floor(id / 26)
274
+ --[[VERBOSE]] until id <= 0
275
+ --[[VERBOSE]] self.current = self.current + 1
276
+ --[[VERBOSE]] value = string.char(unpack(label))
277
+ --[[VERBOSE]] end
278
+ --[[VERBOSE]] return value
279
+ --[[VERBOSE]] end
280
+ --[[VERBOSE]]
281
+ --[[VERBOSE]] verbose.groups.concurrency = { "scheduler", "threads", "copcall" }
282
+ --[[VERBOSE]] verbose:newlevel{"threads"}
283
+ --[[VERBOSE]] verbose:newlevel{"scheduler"}
284
+ --[[VERBOSE]] verbose:newlevel{"copcall"}
285
+ --[[VERBOSE]] function verbose.custom:threads(...)
286
+ --[[VERBOSE]] local viewer = self.viewer
287
+ --[[VERBOSE]] local output = self.viewer.output
288
+ --[[VERBOSE]]
289
+ --[[VERBOSE]] for i = 1, select("#", ...) do
290
+ --[[VERBOSE]] local value = select(i, ...)
291
+ --[[VERBOSE]] if type(value) == "string" then
292
+ --[[VERBOSE]] output:write(value)
293
+ --[[VERBOSE]] elseif type(value) == "thread" then
294
+ --[[VERBOSE]] output:write("thread ", self.labels[value], "[", tostring(value):match("%l+: (.+)"), "]")
295
+ --[[VERBOSE]] else
296
+ --[[VERBOSE]] viewer:write(value)
297
+ --[[VERBOSE]] end
298
+ --[[VERBOSE]] end
299
+ --[[VERBOSE]]
300
+ --[[VERBOSE]] local scheduler = rawget(self, "schedulerdetails")
301
+ --[[VERBOSE]] if scheduler then
302
+ --[[VERBOSE]] local newline = "\n"..viewer.prefix..viewer.indentation
303
+ --[[VERBOSE]]
304
+ --[[VERBOSE]] output:write(newline)
305
+ --[[VERBOSE]] output:write("Current: ")
306
+ --[[VERBOSE]] output:write(tostring(self.labels[scheduler.current]))
307
+ --[[VERBOSE]]
308
+ --[[VERBOSE]] output:write(newline)
309
+ --[[VERBOSE]] output:write("Running:")
310
+ --[[VERBOSE]] for current in scheduler.running:sequence() do
311
+ --[[VERBOSE]] output:write(" ")
312
+ --[[VERBOSE]] output:write(tostring(self.labels[current]))
313
+ --[[VERBOSE]] end
314
+ --[[VERBOSE]]
315
+ --[[VERBOSE]] output:write(newline)
316
+ --[[VERBOSE]] output:write("Sleeping:")
317
+ --[[VERBOSE]] for current in scheduler.sleeping:sequence() do
318
+ --[[VERBOSE]] output:write(" ")
319
+ --[[VERBOSE]] output:write(tostring(self.labels[current]))
320
+ --[[VERBOSE]] end
321
+ --[[VERBOSE]] end
322
+ --[[VERBOSE]] end
323
+ --[[VERBOSE]] verbose.custom.copcall = verbose.custom.threads
324
+ --[[VERBOSE]]
325
+ --[[DEBUG]] verbose.I = Inspector{ viewer = viewer }
326
+ --[[DEBUG]] function verbose.inspect:debug() self.I:stop(4) end
327
+ --[[DEBUG]] verbose:flag("debug", true)