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,30 @@
1
+ -- RAII in metalua.
2
+ --
3
+ -- Write:
4
+ -- with var_1, var_2... = val_1, val_2... do
5
+ -- ...
6
+ -- end
7
+ --
8
+ -- will assign val_n to var_n foreach n, and guaranty that var_n:close() will be called,
9
+ -- no matter what, even if the body causes an error, even if it returns, even
10
+ -- if another :close() call causes an error, etc. No. Matter. What.
11
+
12
+ require 'metalua.extension.trycatch'
13
+
14
+ function withdo_builder (x)
15
+ local names, vals, body = unpack(x)
16
+ for i = #names, 1, -1 do
17
+ local name, val = names[i], vals[i]
18
+ body = trycatch_builder{ { `Set{ {name}, {val} }, body }, -- try-block
19
+ { }, -- catch-block
20
+ { +{ print ("closing "..-{`String{name[1]}}) },
21
+ `Invoke{ name, `String "close" } } }
22
+ end
23
+ table.insert(body, 1, `Local{ names })
24
+ return body
25
+ end
26
+
27
+ mlp.lexer:add 'with'
28
+ mlp.stat:add{
29
+ 'with', mlp.id_list, '=', mlp.expr_list, 'do', mlp.block, 'end',
30
+ builder = withdo_builder }
@@ -0,0 +1,41 @@
1
+ local _G = getfenv()
2
+ local _G_mt = getmetatable(_G)
3
+
4
+
5
+ -- Set the __globals metafield in the global environment's metatable,
6
+ -- if not already there.
7
+ if _G_mt then
8
+ if _G_mt.__globals then return else
9
+ print( "Warning: _G already has a metatable,"..
10
+ " which might interfere with xglobals")
11
+ _G_mt.__globals = { }
12
+ end
13
+ else
14
+ _G_mt = { __globals = { } }
15
+ setmetatable(_G, _G_mt)
16
+ end
17
+
18
+ -- add a series of variable names to the list of declared globals
19
+ function _G_mt.__newglobal(...)
20
+ local g = _G_mt.__globals
21
+ for v in ivalues{...} do g[v]=true end
22
+ end
23
+
24
+ -- Try to set a global that's not in _G:
25
+ -- if it isn't declared, fail
26
+ function _G_mt.__newindex(_G, var, val)
27
+ if not _G_mt.__globals[var] then
28
+ error ("Setting undeclared global variable "..var)
29
+ end
30
+ rawset(_G, var, val)
31
+ end
32
+
33
+ -- Try to read a global that's not in _G:
34
+ -- if it isn't declared, fail
35
+ function _G_mt.__index(_G, var)
36
+ if not _G_mt.__globals[var] then
37
+ error ("Reading undeclared global variable "..var)
38
+ end
39
+ return nil
40
+ end
41
+
@@ -0,0 +1,20 @@
1
+ -- WARNING, this is undertested, especially in cases where mutliple
2
+ -- modules have their own fenvs. Use at your own risks.
3
+
4
+ require 'strict'
5
+
6
+ local function decl_builder(x)
7
+ local ids, vals = unpack(x)
8
+ local ids_as_strings = table.imap(|x| `String{x[1]}, ids)
9
+ local decl = `Call{ +{getmetatable(getfenv()).__newglobal},
10
+ unpack(ids_as_strings) }
11
+ if vals then return { decl, `Set{ ids, vals } }
12
+ else return decl end
13
+ end
14
+
15
+ mlp.lexer:add 'global'
16
+ mlp.stat:add{
17
+ 'global', mlp.id_list, gg.onkeyword{ '=', mlp.expr_list },
18
+ builder = decl_builder }
19
+
20
+ return +{ require (-{ `String{ package.metalua_extension_prefix .. 'xglobal-runtime' } }) }
@@ -0,0 +1,100 @@
1
+ -{ extension 'match' }
2
+ -{ extension 'log' }
3
+
4
+ require 'metalua.walk'
5
+
6
+ ----------------------------------------------------------------------
7
+ -- Back-end:
8
+ ----------------------------------------------------------------------
9
+
10
+ -- Parse additional elements in a loop
11
+ loop_element = gg.multisequence{
12
+ { 'while', mlp.expr, builder = |x| `Until{ `Op{ 'not', x[1] } } },
13
+ { 'until', mlp.expr, builder = |x| `Until{ x[1] } },
14
+ { 'if', mlp.expr, builder = |x| `If{ x[1] } },
15
+ { 'unless', mlp.expr, builder = |x| `If{ `Op{ 'not', x[1] } } },
16
+ { 'for', mlp.for_header, builder = |x| x[1] } }
17
+
18
+ -- Recompose the loop
19
+ function xloop_builder(x)
20
+ local first, elements, body = unpack(x)
21
+
22
+ -------------------------------------------------------------------
23
+ -- If it's a regular loop, don't bloat the code
24
+ -------------------------------------------------------------------
25
+ if not next(elements) then
26
+ table.insert(first, body)
27
+ return first
28
+ end
29
+
30
+ -------------------------------------------------------------------
31
+ -- There's no reason to treat the first element in a special way
32
+ -------------------------------------------------------------------
33
+ table.insert(elements, 1, first)
34
+
35
+ -------------------------------------------------------------------
36
+ -- if a header or a break must be able to exit the loops, ti will
37
+ -- set exit_label and use it (a regular break wouldn't be enough,
38
+ -- as it couldn't escape several nested loops.)
39
+ -------------------------------------------------------------------
40
+ local exit_label
41
+ local function exit()
42
+ if not exit_label then exit_label = mlp.gensym 'break' [1] end
43
+ return `Goto{ exit_label }
44
+ end
45
+
46
+ -------------------------------------------------------------------
47
+ -- Compile all headers elements, from last to first
48
+ -------------------------------------------------------------------
49
+ for i = #elements, 1, -1 do
50
+ local e = elements[i]
51
+ match e with
52
+ | `If{ cond } ->
53
+ body = `If{ cond, {body} }
54
+ | `Until{ cond } ->
55
+ body = +{stat: if -{cond} then -{exit()} else -{body} end }
56
+ | `Forin{ ... } | `Fornum{ ... } ->
57
+ table.insert (e, {body}); body=e
58
+ end
59
+ end
60
+
61
+ -------------------------------------------------------------------
62
+ -- Change breaks into gotos that escape all loops at once.
63
+ -------------------------------------------------------------------
64
+ local cfg = { stat = { }, expr = { } }
65
+ function cfg.stat.down(x)
66
+ match x with
67
+ | `Break -> x <- exit()
68
+ | `Forin{ ... } | `Fornum{ ... } | `While{ ... } | `Repeat{ ... } ->
69
+ return 'break'
70
+ | _ -> -- pass
71
+ end
72
+ end
73
+ function cfg.expr.down(x) if x.tag=='Function' then return 'break' end end
74
+ walk.stat(cfg, body)
75
+
76
+ if exit_label then body = { body, `Label{ exit_label } } end
77
+ return body
78
+ end
79
+
80
+ ----------------------------------------------------------------------
81
+ -- Front-end:
82
+ ----------------------------------------------------------------------
83
+
84
+ mlp.lexer:add 'unless'
85
+ mlp.stat:del 'for'
86
+ mlp.stat:del 'while'
87
+
88
+ loop_element_list = gg.list{ loop_element, terminators='do' }
89
+
90
+ mlp.stat:add{
91
+ 'for', mlp.for_header, loop_element_list, 'do', mlp.block, 'end',
92
+ builder = xloop_builder }
93
+
94
+ mlp.stat:add{
95
+ 'while', mlp.expr, loop_element_list, 'do', mlp.block, 'end',
96
+ builder = |x| xloop_builder{ `While{x[1]}, x[2], x[3] } }
97
+
98
+ mlp.stat:add{
99
+ 'unless', mlp.expr, 'then', mlp.block, 'end',
100
+ builder = |x| +{stat: if not -{x[1]} then -{x[2]} end} }
@@ -0,0 +1,216 @@
1
+
2
+ require 'metalua.extension.match'
3
+
4
+ module ('spmatch', package.seeall)
5
+
6
+ require 'metalua.walk.id'
7
+
8
+ -{extension 'log'}
9
+
10
+ ----------------------------------------------------------------------
11
+ -- Back-end for statements
12
+ -- "match function ..." and "local match function...".
13
+ -- Tag must be either "Localrec" or "Set".
14
+ ----------------------------------------------------------------------
15
+ named_match_function_builder = |tag| function (x)
16
+ local func_name, _, cases = unpack(x)
17
+ local arity = #cases[1][1][1]
18
+ if arity==0 then
19
+ error "There must be at least 1 case in match function"
20
+ end
21
+ local args = { }
22
+ for i=1, arity do args[i] = mlp.gensym("arg."..i) end
23
+ local body = match_builder{args, cases}
24
+ return { tag=tag, {func_name}, { `Function{ args, {body} } } }
25
+ end
26
+
27
+ -- Get rid of the former parser, it will be blended in a multiseq:
28
+ mlp.stat:del 'match'
29
+
30
+ ----------------------------------------------------------------------
31
+ -- "match function", "match ... with"
32
+ ----------------------------------------------------------------------
33
+ mlp.stat:add{ 'match',
34
+ gg.multisequence{
35
+
36
+ ----------------------------------------------------------------
37
+ -- Shortcut for declaration of functions containing only a match:
38
+ -- "function f($1) match $1 with $2 end end" can be written:
39
+ -- "match function f $2 end"
40
+ ----------------------------------------------------------------
41
+ { 'function', mlp.expr, gg.optkeyword '|',
42
+ match_cases_list_parser, 'end',
43
+ builder = named_match_function_builder 'Set' },
44
+
45
+ ----------------------------------------------------------------
46
+ -- Reintroduce the original match statement:
47
+ ----------------------------------------------------------------
48
+ default = gg.sequence{
49
+ mlp.expr_list, 'with', gg.optkeyword '|',
50
+ match_cases_list_parser, 'end',
51
+ builder = |x| match_builder{ x[1], x[3] } } } }
52
+
53
+ ----------------------------------------------------------------------
54
+ -- Shortcut: "local match function f $cases end" translates to:
55
+ -- "local function f($args) match $args with $cases end end"
56
+ ----------------------------------------------------------------------
57
+ mlp.stat:get'local'[2]:add{
58
+ 'match', 'function', mlp.expr, gg.optkeyword '|',
59
+ match_cases_list_parser, 'end',
60
+ builder = named_match_function_builder 'Localrec' }
61
+
62
+ ----------------------------------------------------------------------
63
+ -- "match...with" expressions and "match function..."
64
+ ----------------------------------------------------------------------
65
+ mlp.expr:add{ 'match', builder = |x| x[1], gg.multisequence{
66
+
67
+ ----------------------------------------------------------------
68
+ -- Anonymous match functions:
69
+ -- "function ($1) match $1 with $2 end end" can be written:
70
+ -- "match function $2 end"
71
+ ----------------------------------------------------------------
72
+ { 'function', gg.optkeyword '|',
73
+ match_cases_list_parser,
74
+ 'end',
75
+ builder = function(x)
76
+ local _, cases = unpack(x)
77
+ local v = mlp.gensym()
78
+ local body = match_builder{v, cases}
79
+ return `Function{ {v}, {body} }
80
+ end },
81
+
82
+ ----------------------------------------------------------------
83
+ -- match expressions: you can put a match where an expression
84
+ -- is expected. The case bodies are then expected to be
85
+ -- expressions, not blocks.
86
+ ----------------------------------------------------------------
87
+ default = gg.sequence{
88
+ mlp.expr_list, 'with', gg.optkeyword '|',
89
+ gg.list{ name = "match cases list",
90
+ gg.sequence{ name = "match expr case",
91
+ gg.list{ name = "match expr case patterns list",
92
+ primary = mlp.expr_list,
93
+ separators = "|",
94
+ terminators = { "->", "if" } },
95
+ gg.onkeyword{ "if", mlp.expr, consume = true },
96
+ "->",
97
+ mlp.expr }, -- Notice: expression, not block!
98
+ separators = "|" },
99
+ -- Notice: no "end" keyword!
100
+ builder = function (x)
101
+ local tested_term_seq, _, cases = unpack(x)
102
+ local v = mlp.gensym 'match_expr'
103
+ -- Replace expressions with blocks
104
+ for case in ivalues (cases) do
105
+ local body = case[3]
106
+ case[3] = { `Set{ {v}, {body} } }
107
+ end
108
+ local m = match_builder { tested_term_seq, cases }
109
+ return `Stat{ { `Local{{v}}; m }, v }
110
+ end } } }
111
+
112
+ function bind (x)
113
+ local patterns, values = unpack(x)
114
+
115
+ -------------------------------------------------------------------
116
+ -- Generate pattern code: "bind vars = vals" translates to:
117
+ -- do
118
+ -- pattern matching code, goto 'fail' on mismatch
119
+ -- goto 'success'
120
+ -- label 'fail': error "..."
121
+ -- label success
122
+ -- end
123
+ -- vars is the set of variables used by the pattern
124
+ -------------------------------------------------------------------
125
+ local code, vars do
126
+ local match_cfg = {
127
+ on_failure = mlp.gensym 'mismatch' [1],
128
+ locals = { },
129
+ code = { } }
130
+ pattern_seq_builder(patterns, values, match_cfg)
131
+ local on_success = mlp.gensym 'on_success' [1]
132
+ code = {
133
+ match_cfg.code;
134
+ `Goto{ on_success };
135
+ `Label{ match_cfg.on_failure };
136
+ +{error "bind error"};
137
+ `Label{ on_success } }
138
+ vars = match_cfg.locals
139
+ end
140
+
141
+ -------------------------------------------------------------------
142
+ -- variables that actually appear in the pattern:
143
+ -------------------------------------------------------------------
144
+ local vars_in_pattern do
145
+ vars_in_pattern = { }
146
+ local walk_cfg = { id = { } }
147
+ function walk_cfg.id.free(v) vars_in_pattern[v[1]]=true end
148
+ walk_id.expr_list(walk_cfg, patterns)
149
+ end
150
+
151
+ -------------------------------------------------------------------
152
+ -- temp variables that are generated for destructuring,
153
+ -- but aren't explicitly typed by the user. These must be made
154
+ -- local.
155
+ -------------------------------------------------------------------
156
+ local vars_not_in_pattern do
157
+ vars_not_in_pattern = { }
158
+ for k in keys(vars) do
159
+ if not vars_in_pattern[k] then
160
+ vars_not_in_pattern[k] = true
161
+ end
162
+ end
163
+ end
164
+
165
+ -------------------------------------------------------------------
166
+ -- Declare the temp variables as local to the statement.
167
+ -------------------------------------------------------------------
168
+ if next(vars_not_in_pattern) then
169
+ local loc = { }
170
+ for k in keys (vars_not_in_pattern) do
171
+ table.insert (loc, `Id{k})
172
+ end
173
+ table.insert (code, 1, `Local{ loc, { } })
174
+ end
175
+
176
+ -------------------------------------------------------------------
177
+ -- Transform the set of pattern variable names into a list of `Id{}
178
+ -------------------------------------------------------------------
179
+ local decl_list do
180
+ decl_list = { }
181
+ for k in keys (vars_in_pattern) do
182
+ table.insert (decl_list, `Id{k})
183
+ end
184
+ end
185
+
186
+ return code, decl_list
187
+ end
188
+
189
+ function local_bind(x)
190
+ local code, vars = bind (x)
191
+ return { `Local{ vars, { } }; code }
192
+ end
193
+
194
+ function non_local_bind(x)
195
+ local code, _ = bind (x)
196
+ code.tag = 'Do'
197
+ return code
198
+ end
199
+
200
+ ----------------------------------------------------------------------
201
+ -- Syntax front-end
202
+ ----------------------------------------------------------------------
203
+ mlp.lexer:add 'bind'
204
+
205
+ ----------------------------------------------------------------------
206
+ -- bind patterns = vars
207
+ ----------------------------------------------------------------------
208
+ mlp.stat:add{ 'bind', mlp.expr_list, '=', mlp.expr_list,
209
+ builder = non_local_bind }
210
+
211
+ ----------------------------------------------------------------------
212
+ -- local bind patterns = vars
213
+ -- Some monkey-patching of "local ..." must take place
214
+ ----------------------------------------------------------------------
215
+ mlp.stat:get'local'[2]:add{ 'bind', mlp.expr_list, '=', mlp.expr_list,
216
+ builder = local_bind }
@@ -0,0 +1,76 @@
1
+ require 'metalua.compiler'
2
+
3
+ module ('metaloop', package.seeall)
4
+
5
+ PRINT_AST = true
6
+ LINE_WIDTH = 60
7
+ PROMPT = "M> "
8
+ PROMPT2 = ">> "
9
+
10
+ do -- set readline() to a line reader, either editline otr a default
11
+ local status, _ = pcall(require, 'editline')
12
+ if status then
13
+ local rl_handle = editline.init 'metalua'
14
+ readline = |p| rl_handle:read(p)
15
+ else
16
+ function readline (p)
17
+ io.write (p)
18
+ io.flush ()
19
+ return io.read '*l'
20
+ end
21
+ end
22
+ end
23
+
24
+ function reached_eof(lx, msg)
25
+ return lx:peek().tag=='Eof' or msg:find "token `Eof"
26
+ end
27
+
28
+ printf ("Metalua, interactive REPLoop.\n"..
29
+ "(c) 2006-2008 <metalua@gmail.com>")
30
+
31
+ function run()
32
+ local lines = { }
33
+ while true do
34
+ local src, lx, ast, f, results, success
35
+ repeat
36
+ local line = readline(next(lines) and PROMPT2 or PROMPT)
37
+ if not line then print(); os.exit(0) end -- line==nil iff eof on stdin
38
+ if not next(lines) then
39
+ line = line:gsub('^%s*=', 'return ')
40
+ end
41
+ table.insert(lines, line)
42
+ src = table.concat (lines, "\n")
43
+ until #line>0
44
+
45
+ lx = mlc.lexstream_of_luastring(src)
46
+ success, ast = pcall(mlc.ast_of_lexstream, lx)
47
+ if success then
48
+ success, f = pcall(mlc.function_of_ast, ast, '=stdin')
49
+ if success then
50
+ results = { pcall(f) }
51
+ success = table.remove (results, 1)
52
+ if success then
53
+ -- Success!
54
+ table.iforeach(|x| table.print(x, LINE_WIDTH), results)
55
+ lines = { }
56
+ else
57
+ print "Evaluation error:"
58
+ print (results[1])
59
+ lines = { }
60
+ end
61
+ else
62
+ print "Can't compile into bytecode:"
63
+ print (f)
64
+ lines = { }
65
+ end
66
+ else
67
+ -- If lx has been read entirely, try to read another
68
+ -- line before failing.
69
+ if not reached_eof(lx, ast) then
70
+ print "Can't compile source into AST:"
71
+ print (ast)
72
+ lines = { }
73
+ end
74
+ end
75
+ end
76
+ end