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,180 @@
1
+ --- Provides a reuseable and convenient framework for creating classes in Lua.
2
+ -- Two possible notations:
3
+ --
4
+ -- B = class(A)
5
+ -- class.B(A)
6
+ --
7
+ -- The latter form creates a named class.
8
+ --
9
+ -- See the Guide for further @{01-introduction.md.Simplifying_Object_Oriented_Programming_in_Lua|discussion}
10
+ -- @module pl.class
11
+
12
+ local error, getmetatable, io, pairs, rawget, rawset, setmetatable, tostring, type =
13
+ _G.error, _G.getmetatable, _G.io, _G.pairs, _G.rawget, _G.rawset, _G.setmetatable, _G.tostring, _G.type
14
+ -- this trickery is necessary to prevent the inheritance of 'super' and
15
+ -- the resulting recursive call problems.
16
+ local function call_ctor (c,obj,...)
17
+ -- nice alias for the base class ctor
18
+ local base = rawget(c,'_base')
19
+ if base then
20
+ local parent_ctor = rawget(base,'_init')
21
+ if parent_ctor then
22
+ obj.super = function(obj,...)
23
+ call_ctor(base,obj,...)
24
+ end
25
+ end
26
+ end
27
+ local res = c._init(obj,...)
28
+ obj.super = nil
29
+ return res
30
+ end
31
+
32
+ local function is_a(self,klass)
33
+ local m = getmetatable(self)
34
+ if not m then return false end --*can't be an object!
35
+ while m do
36
+ if m == klass then return true end
37
+ m = rawget(m,'_base')
38
+ end
39
+ return false
40
+ end
41
+
42
+ local function class_of(klass,obj)
43
+ if type(klass) ~= 'table' or not rawget(klass,'is_a') then return false end
44
+ return klass.is_a(obj,klass)
45
+ end
46
+
47
+ local function _class_tostring (obj)
48
+ local mt = obj._class
49
+ local name = rawget(mt,'_name')
50
+ setmetatable(obj,nil)
51
+ local str = tostring(obj)
52
+ setmetatable(obj,mt)
53
+ if name then str = name ..str:gsub('table','') end
54
+ return str
55
+ end
56
+
57
+ local function tupdate(td,ts)
58
+ for k,v in pairs(ts) do
59
+ td[k] = v
60
+ end
61
+ end
62
+
63
+ local function _class(base,c_arg,c)
64
+ c = c or {} -- a new class instance, which is the metatable for all objects of this type
65
+ -- the class will be the metatable for all its objects,
66
+ -- and they will look up their methods in it.
67
+ local mt = {} -- a metatable for the class instance
68
+
69
+ if type(base) == 'table' then
70
+ -- our new class is a shallow copy of the base class!
71
+ tupdate(c,base)
72
+ c._base = base
73
+ -- inherit the 'not found' handler, if present
74
+ if rawget(c,'_handler') then mt.__index = c._handler end
75
+ elseif base ~= nil then
76
+ error("must derive from a table type",3)
77
+ end
78
+
79
+ c.__index = c
80
+ setmetatable(c,mt)
81
+ c._init = nil
82
+
83
+ if base and rawget(base,'_class_init') then
84
+ base._class_init(c,c_arg)
85
+ end
86
+
87
+ -- expose a ctor which can be called by <classname>(<args>)
88
+ mt.__call = function(class_tbl,...)
89
+ local obj = {}
90
+ setmetatable(obj,c)
91
+
92
+ if rawget(c,'_init') then -- explicit constructor
93
+ local res = call_ctor(c,obj,...)
94
+ if res then -- _if_ a ctor returns a value, it becomes the object...
95
+ obj = res
96
+ setmetatable(obj,c)
97
+ end
98
+ elseif base and rawget(base,'_init') then -- default constructor
99
+ -- make sure that any stuff from the base class is initialized!
100
+ call_ctor(base,obj,...)
101
+ end
102
+
103
+ if base and rawget(base,'_post_init') then
104
+ base._post_init(obj)
105
+ end
106
+
107
+ if not rawget(c,'__tostring') then
108
+ c.__tostring = _class_tostring
109
+ end
110
+ return obj
111
+ end
112
+ -- Call Class.catch to set a handler for methods/properties not found in the class!
113
+ c.catch = function(handler)
114
+ c._handler = handler
115
+ mt.__index = handler
116
+ end
117
+ c.is_a = is_a
118
+ c.class_of = class_of
119
+ c._class = c
120
+
121
+ return c
122
+ end
123
+
124
+ --- create a new class, derived from a given base class.
125
+ -- Supporting two class creation syntaxes:
126
+ -- either `Name = class(base)` or `class.Name(base)`
127
+ -- @function class
128
+ -- @param base optional base class
129
+ -- @param c_arg optional parameter to class ctor
130
+ -- @param c optional table to be used as class
131
+ local class
132
+ class = setmetatable({},{
133
+ __call = function(fun,...)
134
+ return _class(...)
135
+ end,
136
+ __index = function(tbl,key)
137
+ if key == 'class' then
138
+ io.stderr:write('require("pl.class").class is deprecated. Use require("pl.class")\n')
139
+ return class
140
+ end
141
+ local env = _G
142
+ return function(...)
143
+ local c = _class(...)
144
+ c._name = key
145
+ rawset(env,key,c)
146
+ return c
147
+ end
148
+ end
149
+ })
150
+
151
+ class.properties = class()
152
+
153
+ function class.properties._class_init(klass)
154
+ klass.__index = function(t,key)
155
+ -- normal class lookup!
156
+ local v = klass[key]
157
+ if v then return v end
158
+ -- is it a getter?
159
+ v = rawget(klass,'get_'..key)
160
+ if v then
161
+ return v(t)
162
+ end
163
+ -- is it a field?
164
+ return rawget(t,'_'..key)
165
+ end
166
+ klass.__newindex = function (t,key,value)
167
+ -- if there's a setter, use that, otherwise directly set table
168
+ local p = 'set_'..key
169
+ local setter = klass[p]
170
+ if setter then
171
+ setter(t,value)
172
+ else
173
+ rawset(t,key,value)
174
+ end
175
+ end
176
+ end
177
+
178
+
179
+ return class
180
+
@@ -0,0 +1,286 @@
1
+ --- List comprehensions implemented in Lua.
2
+ --
3
+ -- See the [wiki page](http://lua-users.org/wiki/ListComprehensions)
4
+ --
5
+ -- local C= require 'pl.comprehension' . new()
6
+ --
7
+ -- C ('x for x=1,10') ()
8
+ -- ==> {1,2,3,4,5,6,7,8,9,10}
9
+ -- C 'x^2 for x=1,4' ()
10
+ -- ==> {1,4,9,16}
11
+ -- C '{x,x^2} for x=1,4' ()
12
+ -- ==> {{1,1},{2,4},{3,9},{4,16}}
13
+ -- C '2*x for x' {1,2,3}
14
+ -- ==> {2,4,6}
15
+ -- dbl = C '2*x for x'
16
+ -- dbl {10,20,30}
17
+ -- ==> {20,40,60}
18
+ -- C 'x for x if x % 2 == 0' {1,2,3,4,5}
19
+ -- ==> {2,4}
20
+ -- C '{x,y} for x = 1,2 for y = 1,2' ()
21
+ -- ==> {{1,1},{1,2},{2,1},{2,2}}
22
+ -- C '{x,y} for x for y' ({1,2},{10,20})
23
+ -- ==> {{1,10},{1,20},{2,10},{2,20}}
24
+ -- assert(C 'sum(x^2 for x)' {2,3,4} == 2^2+3^2+4^2)
25
+ --
26
+ -- (c) 2008 David Manura. Licensed under the same terms as Lua (MIT license).
27
+ --
28
+ -- Dependencies: `pl.utils`, `pl.luabalanced`
29
+ --
30
+ -- See @{07-functional.md.List_Comprehensions|the Guide}
31
+ -- @module pl.comprehension
32
+
33
+ local utils = require 'pl.utils'
34
+
35
+ local status,lb = pcall(require, "pl.luabalanced")
36
+ if not status then
37
+ lb = require 'luabalanced'
38
+ end
39
+
40
+ local math_max = math.max
41
+ local table_concat = table.concat
42
+
43
+ -- fold operations
44
+ -- http://en.wikipedia.org/wiki/Fold_(higher-order_function)
45
+ local ops = {
46
+ list = {init=' {} ', accum=' __result[#__result+1] = (%s) '},
47
+ table = {init=' {} ', accum=' local __k, __v = %s __result[__k] = __v '},
48
+ sum = {init=' 0 ', accum=' __result = __result + (%s) '},
49
+ min = {init=' nil ', accum=' local __tmp = %s ' ..
50
+ ' if __result then if __tmp < __result then ' ..
51
+ '__result = __tmp end else __result = __tmp end '},
52
+ max = {init=' nil ', accum=' local __tmp = %s ' ..
53
+ ' if __result then if __tmp > __result then ' ..
54
+ '__result = __tmp end else __result = __tmp end '},
55
+ }
56
+
57
+
58
+ -- Parses comprehension string expr.
59
+ -- Returns output expression list <out> string, array of for types
60
+ -- ('=', 'in' or nil) <fortypes>, array of input variable name
61
+ -- strings <invarlists>, array of input variable value strings
62
+ -- <invallists>, array of predicate expression strings <preds>,
63
+ -- operation name string <opname>, and number of placeholder
64
+ -- parameters <max_param>.
65
+ --
66
+ -- The is equivalent to the mathematical set-builder notation:
67
+ --
68
+ -- <opname> { <out> | <invarlist> in <invallist> , <preds> }
69
+ --
70
+ -- @usage "x^2 for x" -- array values
71
+ -- @usage "x^2 for x=1,10,2" -- numeric for
72
+ -- @usage "k^v for k,v in pairs(_1)" -- iterator for
73
+ -- @usage "(x+y)^2 for x for y if x > y" -- nested
74
+ --
75
+ local function parse_comprehension(expr)
76
+ local t = {}
77
+ local pos = 1
78
+
79
+ -- extract opname (if exists)
80
+ local opname
81
+ local tok, post = expr:match('^%s*([%a_][%w_]*)%s*%(()', pos)
82
+ local pose = #expr + 1
83
+ if tok then
84
+ local tok2, posb = lb.match_bracketed(expr, post-1)
85
+ assert(tok2, 'syntax error')
86
+ if expr:match('^%s*$', posb) then
87
+ opname = tok
88
+ pose = posb - 1
89
+ pos = post
90
+ end
91
+ end
92
+ opname = opname or "list"
93
+
94
+ -- extract out expression list
95
+ local out; out, pos = lb.match_explist(expr, pos)
96
+ assert(out, "syntax error: missing expression list")
97
+ out = table_concat(out, ', ')
98
+
99
+ -- extract "for" clauses
100
+ local fortypes = {}
101
+ local invarlists = {}
102
+ local invallists = {}
103
+ while 1 do
104
+ local post = expr:match('^%s*for%s+()', pos)
105
+ if not post then break end
106
+ pos = post
107
+
108
+ -- extract input vars
109
+ local iv; iv, pos = lb.match_namelist(expr, pos)
110
+ assert(#iv > 0, 'syntax error: zero variables')
111
+ for _,ident in ipairs(iv) do
112
+ assert(not ident:match'^__',
113
+ "identifier " .. ident .. " may not contain __ prefix")
114
+ end
115
+ invarlists[#invarlists+1] = iv
116
+
117
+ -- extract '=' or 'in' (optional)
118
+ local fortype, post = expr:match('^(=)%s*()', pos)
119
+ if not fortype then fortype, post = expr:match('^(in)%s+()', pos) end
120
+ if fortype then
121
+ pos = post
122
+ -- extract input value range
123
+ local il; il, pos = lb.match_explist(expr, pos)
124
+ assert(#il > 0, 'syntax error: zero expressions')
125
+ assert(fortype ~= '=' or #il == 2 or #il == 3,
126
+ 'syntax error: numeric for requires 2 or three expressions')
127
+ fortypes[#invarlists] = fortype
128
+ invallists[#invarlists] = il
129
+ else
130
+ fortypes[#invarlists] = false
131
+ invallists[#invarlists] = false
132
+ end
133
+ end
134
+ assert(#invarlists > 0, 'syntax error: missing "for" clause')
135
+
136
+ -- extract "if" clauses
137
+ local preds = {}
138
+ while 1 do
139
+ local post = expr:match('^%s*if%s+()', pos)
140
+ if not post then break end
141
+ pos = post
142
+ local pred; pred, pos = lb.match_expression(expr, pos)
143
+ assert(pred, 'syntax error: predicated expression not found')
144
+ preds[#preds+1] = pred
145
+ end
146
+
147
+ -- extract number of parameter variables (name matching "_%d+")
148
+ local stmp = ''; lb.gsub(expr, function(u, sin) -- strip comments/strings
149
+ if u == 'e' then stmp = stmp .. ' ' .. sin .. ' ' end
150
+ end)
151
+ local max_param = 0; stmp:gsub('[%a_][%w_]*', function(s)
152
+ local s = s:match('^_(%d+)$')
153
+ if s then max_param = math_max(max_param, tonumber(s)) end
154
+ end)
155
+
156
+ if pos ~= pose then
157
+ assert(false, "syntax error: unrecognized " .. expr:sub(pos))
158
+ end
159
+
160
+ --DEBUG:
161
+ --print('----\n', string.format("%q", expr), string.format("%q", out), opname)
162
+ --for k,v in ipairs(invarlists) do print(k,v, invallists[k]) end
163
+ --for k,v in ipairs(preds) do print(k,v) end
164
+
165
+ return out, fortypes, invarlists, invallists, preds, opname, max_param
166
+ end
167
+
168
+
169
+ -- Create Lua code string representing comprehension.
170
+ -- Arguments are in the form returned by parse_comprehension.
171
+ local function code_comprehension(
172
+ out, fortypes, invarlists, invallists, preds, opname, max_param
173
+ )
174
+ local op = assert(ops[opname])
175
+ local code = op.accum:gsub('%%s', out)
176
+
177
+ for i=#preds,1,-1 do local pred = preds[i]
178
+ code = ' if ' .. pred .. ' then ' .. code .. ' end '
179
+ end
180
+ for i=#invarlists,1,-1 do
181
+ if not fortypes[i] then
182
+ local arrayname = '__in' .. i
183
+ local idx = '__idx' .. i
184
+ code =
185
+ ' for ' .. idx .. ' = 1, #' .. arrayname .. ' do ' ..
186
+ ' local ' .. invarlists[i][1] .. ' = ' .. arrayname .. '['..idx..'] ' ..
187
+ code .. ' end '
188
+ else
189
+ code =
190
+ ' for ' ..
191
+ table_concat(invarlists[i], ', ') ..
192
+ ' ' .. fortypes[i] .. ' ' ..
193
+ table_concat(invallists[i], ', ') ..
194
+ ' do ' .. code .. ' end '
195
+ end
196
+ end
197
+ code = ' local __result = ( ' .. op.init .. ' ) ' .. code
198
+ return code
199
+ end
200
+
201
+
202
+ -- Convert code string represented by code_comprehension
203
+ -- into Lua function. Also must pass ninputs = #invarlists,
204
+ -- max_param, and invallists (from parse_comprehension).
205
+ -- Uses environment env.
206
+ local function wrap_comprehension(code, ninputs, max_param, invallists, env)
207
+ assert(ninputs > 0)
208
+ local ts = {}
209
+ for i=1,max_param do
210
+ ts[#ts+1] = '_' .. i
211
+ end
212
+ for i=1,ninputs do
213
+ if not invallists[i] then
214
+ local name = '__in' .. i
215
+ ts[#ts+1] = name
216
+ end
217
+ end
218
+ if #ts > 0 then
219
+ code = ' local ' .. table_concat(ts, ', ') .. ' = ... ' .. code
220
+ end
221
+ code = code .. ' return __result '
222
+ --print('DEBUG:', code)
223
+ local f, err = utils.load(code,'tmp','t',env)
224
+ if not f then assert(false, err .. ' with generated code ' .. code) end
225
+ return f
226
+ end
227
+
228
+
229
+ -- Build Lua function from comprehension string.
230
+ -- Uses environment env.
231
+ local function build_comprehension(expr, env)
232
+ local out, fortypes, invarlists, invallists, preds, opname, max_param
233
+ = parse_comprehension(expr)
234
+ local code = code_comprehension(
235
+ out, fortypes, invarlists, invallists, preds, opname, max_param)
236
+ local f = wrap_comprehension(code, #invarlists, max_param, invallists, env)
237
+ return f
238
+ end
239
+
240
+
241
+ -- Creates new comprehension cache.
242
+ -- Any list comprehension function created are set to the environment
243
+ -- env (defaults to caller of new).
244
+ local function new(env)
245
+ -- Note: using a single global comprehension cache would have had
246
+ -- security implications (e.g. retrieving cached functions created
247
+ -- in other environments).
248
+ -- The cache lookup function could have instead been written to retrieve
249
+ -- the caller's environment, lookup up the cache private to that
250
+ -- environment, and then looked up the function in that cache.
251
+ -- That would avoid the need for this <new> call to
252
+ -- explicitly manage caches; however, that might also have an undue
253
+ -- performance penalty.
254
+
255
+ if not env then
256
+ env = getfenv(2)
257
+ end
258
+
259
+ local mt = {}
260
+ local cache = setmetatable({}, mt)
261
+
262
+ -- Index operator builds, caches, and returns Lua function
263
+ -- corresponding to comprehension expression string.
264
+ --
265
+ -- Example: f = comprehension['x^2 for x']
266
+ --
267
+ function mt:__index(expr)
268
+ local f = build_comprehension(expr, env)
269
+ self[expr] = f -- cache
270
+ return f
271
+ end
272
+
273
+ -- Convenience syntax.
274
+ -- Allows comprehension 'x^2 for x' instead of comprehension['x^2 for x'].
275
+ mt.__call = mt.__index
276
+
277
+ cache.new = new
278
+
279
+ return cache
280
+ end
281
+
282
+
283
+ local comprehension = {}
284
+ comprehension.new = new
285
+
286
+ return comprehension