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,304 @@
1
+ --------------------------------------------------------------------------------
2
+ -- Code walkers
3
+ -- "Make everything as simple as possible, but not simpler".
4
+ --
5
+ -- This library offers a generic way to write AST transforming
6
+ -- functions. Macros can take bits of AST as parameters and generate a
7
+ -- more complex AST with them; but modifying an AST a posteriori is
8
+ -- much more difficult; typical tasks requiring code walking are
9
+ -- transformation such as lazy evaluation or Continuation Passing
10
+ -- Style, but more mundane operations are required in more macros than
11
+ -- one would thing, such as "transform all returns which aren't inside
12
+ -- a nested function into an error throwing".
13
+ --
14
+ -- AST walking is an intrinsically advanced operation, and the
15
+ -- interface of this library, although it tries to remain as simple as
16
+ -- possible, is not trivial. You'll probably need to write a couple of
17
+ -- walkers with it before feeling comfortable.
18
+ --
19
+ --
20
+ -- We deal here with 3 important kinds of AST: statements, expressions
21
+ -- and blocks. Code walkers for these three kinds for AST are called
22
+ -- [walk.stat (cfg, ast)], [walk.expr (cfg, ast)] and [walk.block
23
+ -- (cfg, ast)] respectively. the [cfg] parameter describes what shall
24
+ -- happen as the AST is traversed by the walker, and [ast] is the tree
25
+ -- itself.
26
+ --
27
+ -- An aparte to fellow functional programmers: although Lua has
28
+ -- got all the features that constitute a functional language, its
29
+ -- heart, and in particular it table data, is imperative. It's often
30
+ -- asking for trouble to work against the host language's nature, so
31
+ -- code walkers are imperative, cope with it. Or use table.deep_copy()
32
+ -- if you don't want issues with shared state.
33
+ --
34
+ -- Since walkers are imperative (i.e. they transform the tree in
35
+ -- place, rather than returning a fresh variant of it), you'll often
36
+ -- want to override a node, i.e. keep its "pointer identity", but
37
+ -- replace its content with a new one; this is done by
38
+ -- table.override(), and is conveniently abbreviated as
39
+ -- "target <- new_content".
40
+ --
41
+ -- So, [cfg] can contain a series of sub-tables fields 'expr', 'stat',
42
+ -- 'block'. each of them can contain a function up() and/or a function
43
+ -- down().
44
+ --
45
+ -- * down() is called when the walker starts visiting a node of the
46
+ -- matching kind, i.e. before any of its sub-nodes have been
47
+ -- visited. down() is allowed to return either the string "break",
48
+ -- which means "don't go further down this tree, don't try to walk
49
+ -- its children", or nil, i.e. "please process with the children
50
+ -- nodes".
51
+ --
52
+ -- There are two reasons why you might want down() to return
53
+ -- "break": either because you really weren't interested into the
54
+ -- children nodes,or because you wanted to walk through them in a
55
+ -- special way, and down() already performed this special walking.
56
+ --
57
+ -- * up() is called just before the node is left, i.e. after all of
58
+ -- its children nodes have been completely parsed, down and up. This
59
+ -- is a good place to put treatments which rely on sub-nodes being
60
+ -- already treated. Notice that if down() returned 'break', up() is
61
+ -- run immediately after.
62
+ --
63
+ -- In previous versions of this library, there were plenty of fancy
64
+ -- configurable ways to decide whether an up() or down() functions
65
+ -- would be triggered or not. Experience suggested that the best way
66
+ -- is to keep it simpler, as done by the current design: the functions
67
+ -- in sub-table expr are run on each expression node, and ditto for
68
+ -- stat and block; the user is expected to use the pattern matching
69
+ -- extension to decide whether to act or not on a given node.
70
+ --
71
+ -- Advanced features
72
+ -- =================
73
+ --
74
+ -- The version above is a strict subset of the truth: there are a
75
+ -- couple of other, more advanced features in the library.
76
+ --
77
+ -- Paths in visitor functions
78
+ -- --------------------------
79
+ -- First, up() and down() don't take only one node as a parameter, but
80
+ -- a series thereof: all the nested expr/stat/block nodes on the way
81
+ -- up to the ast's root. For instance, when a walker works on
82
+ -- +{ foo(bar*2+1) } an is on the node +{2}, up() and down() are called
83
+ -- with arguments (+{bar*2}, +{bar*2+1}, +{foo(bar*2+1)}).
84
+ --
85
+ -- `Call and `Invoke as statements
86
+ -- -------------------------------
87
+ -- `Call and `Invoke are normally expressions, but they can also
88
+ -- appear as statements. In this case, the cfg.expr.xxx() visitors
89
+ -- aren't called on them. Sometimes you want to consider tham as
90
+ -- expressions, sometimes not, and it's much easier to add a special
91
+ -- case in cfg.stat.xxx() visitors than to determine whether we're in
92
+ -- a statament's context in cfg.expr.xxx(),
93
+ --
94
+ -- Extra walkers
95
+ -- -------------
96
+ -- There are some second class walkers: walk.expr_list() and walk.guess().
97
+ --
98
+ -- * The first one walks through a list of expressions. Although used
99
+ -- internally by the other walkers, it remains a second class
100
+ -- citizen: the list it works on won't appear in the path of nested
101
+ -- ASTs that's passed to up() and down(). This design choice has
102
+ -- been made because there's no clear definition of what is or isn't
103
+ -- an expr list in an AST, and anyway such lists are probably not
104
+ -- part of metacoders' mental image of an AST, so it's been thought
105
+ -- best to let people pretend they don't exist.
106
+ --
107
+ -- * walk.guess() tries to guess the type of the AST it receives,
108
+ -- according to its tag, and runs the appropriate walker. Node which
109
+ -- can be both stats and exprs (`Call and `Invoke) are considered as
110
+ -- expr.
111
+ --
112
+ -- These three walkers, although used internally by the other walkers,
113
+ -- remain second class citizens: the lists they work on won't appear
114
+ -- in the path of nested ASTs that's passed to up() and down().
115
+ --
116
+ -- Tag dictionaries
117
+ -- ----------------
118
+ -- There are two public dictionaries, walk.tags.stat and
119
+ -- walk.tags.expr, which keep the set of all tags that can start a
120
+ -- statement or an expression AST. They're used by walk.guess, and
121
+ -- users sometimes need them as well, so they've been kept available.
122
+ --
123
+ -- Binder visitor
124
+ -- --------------
125
+ -- Finally, there's one last field in [cfg]: binder(). This function
126
+ -- is called on identifiers in a binder position, i.e. `Id{ } nodes
127
+ -- which create a scoped local variable, in `Function, `Fornum, `Local
128
+ -- etc. The main use case for that function is to keep track of
129
+ -- variables, captures, etc. and perform alpha conversions. In many
130
+ -- cases that work is best done through the library 'walk.id', which
131
+ -- understands the notions of scope, free variable, bound variable
132
+ -- etc.
133
+ --
134
+ -- Binder visitors are called just before the variable's scope starts,
135
+ -- e.g. they're called after the right-hand-side has been visited in a
136
+ -- `Local node, but before in a `Localrec node.
137
+ --
138
+ -- TODO: document scopes, relaxed cfg descriptions
139
+ -- -----------------------------------------------
140
+ --
141
+ -- Examples of cfg structures:
142
+ --
143
+ -- { Id = f1, Local = f2 }
144
+ -- f
145
+ -- { up = f1, down = f2 }
146
+ -- { scope = { up = f1, down = f2 }, up = f1, down = f2 }
147
+ -- { stat = f1, expr = { up = f1 } }
148
+ --
149
+ --
150
+ --------------------------------------------------------------------------------
151
+
152
+ -{ extension "match" }
153
+
154
+ walk = { traverse = { }; tags = { }; debug = false }
155
+
156
+ --------------------------------------------------------------------------------
157
+ -- Standard tags: can be used to guess the type of an AST, or to check
158
+ -- that the type of an AST is respected.
159
+ --------------------------------------------------------------------------------
160
+ walk.tags.stat = table.transpose{
161
+ 'Do', 'Set', 'While', 'Repeat', 'Local', 'Localrec', 'Return',
162
+ 'Fornum', 'Forin', 'If', 'Break', 'Goto', 'Label',
163
+ 'Call', 'Invoke' }
164
+ walk.tags.expr = table.transpose{
165
+ 'Paren', 'Call', 'Invoke', 'Index', 'Op', 'Function', 'Stat',
166
+ 'Table', 'Nil', 'Dots', 'True', 'False', 'Number', 'String', 'Id' }
167
+
168
+ local function scope (cfg, dir)
169
+ local h = cfg.scope and cfg.scope[dir]
170
+ if h then h() end
171
+ end
172
+
173
+ --------------------------------------------------------------------------------
174
+ -- These [walk.traverse.xxx()] functions are in charge of actually going through
175
+ -- ASTs. At each node, they make sure to call the appropriate walker.
176
+ --------------------------------------------------------------------------------
177
+ function walk.traverse.stat (cfg, x, ...)
178
+ if walk.debug then printf("traverse stat %s", table.tostring(x)) end
179
+ local log = {...}
180
+ local B = |y| walk.block (cfg, y, x, unpack(log))
181
+ local S = |y| walk.stat (cfg, y, x, unpack(log))
182
+ local E = |y| walk.expr (cfg, y, x, unpack(log))
183
+ local EL = |y| walk.expr_list (cfg, y, x, unpack(log))
184
+ local I = |y| walk.binder_list (cfg, y, x, unpack(log))
185
+ local function BS(y)
186
+ scope (cfg, 'down'); B(y); scope (cfg, 'up')
187
+ end
188
+
189
+ match x with
190
+ | {...} if x.tag == nil -> for y in ivalues(x) do walk.stat(cfg, y, ...) end
191
+ -- no tag --> node not inserted in the history log
192
+ | `Do{...} -> BS(x)
193
+ | `Set{ lhs, rhs } -> EL(lhs); EL(rhs)
194
+ | `While{ cond, body } -> E(cond); BS(body)
195
+ | `Repeat{ body, cond } -> scope(cfg, 'down'); B(body); E(cond); scope(cfg, 'up')
196
+ | `Local{ lhs } -> I(lhs)
197
+ | `Local{ lhs, rhs } -> EL(rhs); I(lhs)
198
+ | `Localrec{ lhs, rhs } -> I(lhs); EL(rhs)
199
+ | `Fornum{ i, a, b, body } -> E(a); E(b); I{i}; BS(body)
200
+ | `Fornum{ i, a, b, c, body } -> E(a); E(b); E(c); I{i}; BS(body)
201
+ | `Forin{ i, rhs, body } -> EL(rhs); I(i); BS(body)
202
+ | `If{...} -> for i=1, #x-1, 2 do E(x[i]); BS(x[i+1]) end
203
+ if #x%2 == 1 then BS(x[#x]) end
204
+ | `Call{...}|`Invoke{...}|`Return{...} -> EL(x)
205
+ | `Break | `Goto{ _ } | `Label{ _ } -> -- nothing
206
+ | { tag=tag, ...} if walk.tags.stat[tag]->
207
+ walk.malformed (cfg, x, unpack (log))
208
+ | _ ->
209
+ walk.unknonw (cfg, x, unpack (log))
210
+ end
211
+ end
212
+
213
+ function walk.traverse.expr (cfg, x, ...)
214
+ if walk.debug then printf("traverse expr %s", table.tostring(x)) end
215
+ local log = {...}
216
+ local B = |y| walk.block (cfg, y, x, unpack(log))
217
+ local S = |y| walk.stat (cfg, y, x, unpack(log))
218
+ local E = |y| walk.expr (cfg, y, x, unpack(log))
219
+ local EL = |y| walk.expr_list (cfg, y, x, unpack(log))
220
+ local I = |y| walk.binder_list (cfg, y, x, unpack(log))
221
+ match x with
222
+ | `Paren{ e } -> E(e)
223
+ | `Call{...} | `Invoke{...} -> EL(x)
224
+ | `Index{ a, b } -> E(a); E(b)
225
+ | `Op{ opid, ... } -> E(x[2]); if #x==3 then E(x[3]) end
226
+ | `Function{ params, body } -> I(params); scope(cfg, 'down'); B(body); scope (cfg, 'in')
227
+ | `Stat{ b, e } -> scope(cfg, 'down'); B(b); E(e); scope (cfg, 'in')
228
+ | `Table{ ... } ->
229
+ for i = 1, #x do match x[i] with
230
+ | `Pair{ k, v } -> E(k); E(v)
231
+ | v -> E(v)
232
+ end end
233
+ |`Nil|`Dots|`True|`False|`Number{_}|`String{_}|`Id{_} -> -- nothing
234
+ | { tag=tag, ...} if walk.tags.expr[tag]->
235
+ walk.malformed (cfg, x, unpack (log))
236
+ | _ ->
237
+ walk.unknonw (cfg, x, unpack (log))
238
+ end
239
+ end
240
+
241
+ function walk.traverse.block (cfg, x, ...)
242
+ assert(type(x)=='table', "traverse.block() expects a table")
243
+ for y in ivalues(x) do walk.stat(cfg, y, x, ...) end
244
+ end
245
+
246
+ function walk.traverse.expr_list (cfg, x, ...)
247
+ assert(type(x)=='table', "traverse.expr_list() expects a table")
248
+ -- x doesn't appear in the log
249
+ for y in ivalues(x) do walk.expr(cfg, y, ...) end
250
+ end
251
+
252
+ ----------------------------------------------------------------------
253
+ -- Generic walker generator.
254
+ -- * if `cfg' has an entry matching the tree name, use this entry
255
+ -- * if not, try to use the entry whose name matched the ast kind
256
+ -- * if an entry is a table, look for 'up' and 'down' entries
257
+ -- * if it is a function, consider it as a `down' traverser.
258
+ ----------------------------------------------------------------------
259
+ local walker_builder = |cfg_field, traverse| function (cfg, x, ...)
260
+ local sub_cfg = type (x)=='table' and x.tag and cfg[x.tag]
261
+ or cfg[cfg_field] or cfg
262
+ local broken, down, up = false
263
+ if type(sub_cfg)=='table' then
264
+ down, up = sub_cfg.down, sub_cfg.up
265
+ elseif type(sub_cfg)=='function' or sub_cfg=='break' then
266
+ down, up = sub_cfg, nil
267
+ else error "Invalid walk config" end
268
+
269
+ if down then
270
+ if down=='break' then broken='break'
271
+ else broken = down (x, ...) end
272
+ assert(not broken or broken=='break',
273
+ "Map functions must return 'break' or nil")
274
+ end
275
+ if not broken and traverse then traverse (cfg, x, ...) end
276
+ if up then up (x, ...) end
277
+ end
278
+
279
+ ----------------------------------------------------------------------
280
+ -- Declare [walk.stat], [walk.expr], [walk.block] and [walk.expr_list]
281
+ ----------------------------------------------------------------------
282
+ for w in values{ "stat", "expr", "block", "expr_list",
283
+ "malformed", "unknown" } do
284
+ walk[w] = walker_builder (w, walk.traverse[w])
285
+ end
286
+
287
+ ----------------------------------------------------------------------
288
+ -- Walk a list of `Id{...} (mainly a helper function actually).
289
+ ----------------------------------------------------------------------
290
+ function walk.binder_list (cfg, x, ...)
291
+ local f = cfg.binder
292
+ if f then for v in ivalues(x) do f(v, ...) end end
293
+ end
294
+
295
+ ----------------------------------------------------------------------
296
+ -- Tries to guess the type of the AST then choose the right walkker.
297
+ ----------------------------------------------------------------------
298
+ function walk.guess (cfg, x, ...)
299
+ assert(type(x)=='table', "arg #2 in a walker must be an AST")
300
+ if walk.tags.expr[x.tag] then return walk.expr(cfg, x, ...) end
301
+ if walk.tags.stat[x.tag] then return walk.stat(cfg, x, ...) end
302
+ if not x.tag then return walk.block(cfg, x, ...) end
303
+ error ("Can't guess the AST type from tag "..(x.tag or '<none>'))
304
+ end
@@ -0,0 +1,41 @@
1
+ require 'metalua.walk'
2
+ require 'metalua.walk.scope'
3
+
4
+ function bindings(ast)
5
+ -- binders :: ast => name => occurences
6
+ -- unbound :: name => occurences
7
+ -- scope :: name => ast
8
+
9
+ local binders, unbound, cfg, scope = { }, { }, { scope={ } }, scope:new()
10
+
11
+ -- * id: identifier entering in scope
12
+ -- * ast: statement or expr carrying this id, on of:
13
+ -- Local, Localrec, Forin, Fornum, Function.
14
+ function cfg.binder (id, ast)
15
+ local id_name = id[1]
16
+ -- Reference in scope, so that the binding statement can be retrieved:
17
+ scope.current[id_name] = ast
18
+ -- Init the occurences list for this identifier:
19
+ if binders[ast] then binders[ast][id_name] = { }
20
+ else binders[ast] = { [id_name] = { } } end
21
+ end
22
+
23
+ -- identifier occurence, not as a binder: reference this occurence
24
+ function cfg.Id (id)
25
+ local id_name = id[1]
26
+ -- ast which binds this id, might be nil:
27
+ local binder_ast = scope.current [id_name]
28
+ -- dict id_name => occurences, might be the list of unbound occurences:
29
+ local occur_dict = binder_ast and binders[binder_ast] or unbound
30
+ -- add an occurence of `id' in the occurences list:
31
+ local occurences = occur_dict [id_name]
32
+ if occurences then table.insert (occurences, id)
33
+ else occur_dict [id_name] = { id } end
34
+ end
35
+
36
+ function cfg.scope.down() scope:push() end
37
+ function cfg.scope.up() scope:pop() end
38
+
39
+ walk.guess (cfg, ast)
40
+ return binders, unbound
41
+ end
@@ -0,0 +1,186 @@
1
+ --------------------------------------------------------------------------------
2
+ --
3
+ -- This library walks AST to gather information about the identifiers
4
+ -- in it. It classifies them between free variables and bound
5
+ -- variables, and keeps track of which AST node created a given bound
6
+ -- variable occurence.
7
+ --
8
+ -- walk_id (kind, ast)
9
+ --
10
+ -- Input:
11
+ -- * an AST kind: 'expr', 'stat', 'block', 'expr_list', 'binder_list', 'guess'
12
+ -- * an AST of the corresponding kind.
13
+ --
14
+ -- > string, AST
15
+ --
16
+ -- Output: a table with two fields, 'bound' and 'free';
17
+ -- * free associates the name of each free variable with the list of
18
+ -- all its occurences in the AST. That list is never empty.
19
+ -- * bound associates each stat or expr binding a new variable with
20
+ -- the occurences of that/those new variable(s).
21
+ --
22
+ -- > { free = table (string, AST and `Id{ });
23
+ -- > bound = table (AST, table(AST and `Id{ })) }
24
+ --
25
+ -- How it works
26
+ -- ============
27
+ -- Walk the tree to:
28
+ -- * locate open variables, and keep pointers on them so that they can
29
+ -- be alpha converted.
30
+ -- * locate variable bindings, so that we can find bound variables
31
+ -- * locate bound variables, keep them in association with their
32
+ -- binder, again in order to alpha-convert them.
33
+ --
34
+ -- Special treatments:
35
+ -- * `Function `Local `Localrec `Fornum `Forin have binders;
36
+ -- `Local takes effect from the next statement,
37
+ -- `Localrec from the current statement,
38
+ -- `Function and other statments inside their bodies.
39
+ -- * `Repeat has a special scoping rule for its condition.
40
+ -- * blocks create temporary scopes
41
+ -- * `Splice must stop the walking, so that user code won't be
42
+ -- converted
43
+ --
44
+ --------------------------------------------------------------------------------
45
+
46
+ -{ extension 'match' }
47
+ -{ extension 'log' }
48
+
49
+ require 'metalua.walk'
50
+ require 'metalua.walk.scope'
51
+
52
+ -- variable lists auto-create empty list as values by default.
53
+ local varlist_mt = { __index = function (self, key)
54
+ local x={ }; self[key] = x; return x
55
+ end }
56
+
57
+ local function _walk_id (kind, supercfg, ast, ...)
58
+
59
+ assert(walk[kind], "Inbalid AST kind selector")
60
+ assert(type(supercfg=='table'), "Config table expected")
61
+ assert(type(ast)=='table', "AST expected")
62
+
63
+ local cfg = { expr = { }; block = { }; stat = { } }
64
+ local scope = scope:new()
65
+
66
+ local visit_bound_var, visit_free_var
67
+ if not supercfg.id then
68
+ printf("Warning, you're using the id walker without id visitor. "..
69
+ "If you know what you want do to, then you're probably doing "..
70
+ "something else...")
71
+ visit_bound_var = || nil
72
+ visit_free_var = || nil
73
+ else
74
+ visit_free_var = supercfg.id.free or || nil
75
+ visit_bound_var = supercfg.id.bound or || nil
76
+ end
77
+
78
+ -----------------------------------------------------------------------------
79
+ -- Check identifiers; add functions parameters to scope
80
+ -----------------------------------------------------------------------------
81
+ function cfg.expr.down(x, ...)
82
+ -- Execute the generic expression walker; if it breaks.
83
+ -- don't do the id walking.
84
+ if supercfg.expr and supercfg.expr.down then
85
+ local r = supercfg.expr.down(x, ...)
86
+ if r then return r end
87
+ end
88
+ local parents = {...}
89
+ match x with
90
+ | `Id{ name } ->
91
+ local binder, r = scope.current[name] -- binder :: ast which bound var
92
+ if binder then
93
+ --$log( 'walk.id found a bound var:', x, binder)
94
+ r = visit_bound_var(x, binder, unpack(parents))
95
+ else
96
+ --$log( 'walk.id found a free var:', x, scope.current)
97
+ r = visit_free_var(x, unpack(parents))
98
+ end
99
+ if r then return r end
100
+ | `Function{ params, _ } -> scope:push (params, x)
101
+ | `Stat{ block, expr } ->
102
+ -------------------------------------------------------------
103
+ -- 'expr' is in the scope of 'block': create the scope and
104
+ -- walk the block 'manually', then prevent automatic walk
105
+ -- by returning 'break'.
106
+ -------------------------------------------------------------
107
+ scope:push()
108
+ for stat in values (block) do walk.stat(cfg, stat, x, ...) end
109
+ walk.expr(cfg, expr, x, unpack(parents))
110
+ scope:pop()
111
+ return 'break'
112
+ | _ -> -- pass
113
+ end
114
+
115
+ end
116
+
117
+ -----------------------------------------------------------------------------
118
+ -- Close the function scope opened by 'down()'
119
+ -----------------------------------------------------------------------------
120
+ function cfg.expr.up(x, ...)
121
+ match x with `Function{...} -> scope:pop() | _ -> end
122
+ if supercfg.expr and supercfg.expr.up then supercfg.expr.up(x, ...) end
123
+ end
124
+
125
+ -----------------------------------------------------------------------------
126
+ -- Create a new scope and register loop variable[s] in it
127
+ -----------------------------------------------------------------------------
128
+ function cfg.stat.down(x, ...)
129
+ -- Execute the generic statement walker; if it breaks.
130
+ -- don't do the id walking.
131
+ if supercfg.stat and supercfg.stat.down then
132
+ local r = supercfg.stat.down(x, ...)
133
+ if r then return r end
134
+ end
135
+ match x with
136
+ | `Forin{ vars, ... } -> scope:push (vars, x)
137
+ | `Fornum{ var, ... } -> scope:push ({var}, x)
138
+ | `Localrec{ vars, ... } -> scope:add (vars, x)
139
+ | `Repeat{ block, expr } ->
140
+ -------------------------------------------------------------
141
+ -- 'expr' is in the scope of 'block': create the scope and
142
+ -- walk the block 'manually', then prevent automatic walk
143
+ -- by returning 'break'.
144
+ -------------------------------------------------------------
145
+ scope:push()
146
+ for stat in values (block) do walk.stat(cfg, stat, x, ...) end
147
+ walk.expr(cfg, expr, x, ...)
148
+ scope:pop()
149
+ return 'break'
150
+ | _ -> -- pass
151
+ end
152
+ end
153
+
154
+ -----------------------------------------------------------------------------
155
+ -- Close the scopes opened by 'up()'
156
+ -----------------------------------------------------------------------------
157
+ function cfg.stat.up(x, ...)
158
+ match x with
159
+ | `Forin{ ... } | `Fornum{ ... } -> scope:pop()
160
+ | `Local{ vars, ... } -> scope:add(vars, x)
161
+ | _ -> -- pass
162
+ -- `Repeat has no up(), because it 'break's.
163
+ end
164
+ if supercfg.stat and supercfg.stat.up then supercfg.stat.up(x, ...) end
165
+ end
166
+
167
+ -----------------------------------------------------------------------------
168
+ -- Create a separate scope for each block
169
+ -----------------------------------------------------------------------------
170
+ function cfg.block.down(x, ...)
171
+ if supercfg.block and supercfg.block.down then
172
+ local r = supercfg.block.down(x, ...)
173
+ if r then return r end
174
+ end
175
+ scope:push()
176
+ end
177
+ function cfg.block.up(x, ...)
178
+ scope:pop()
179
+ if supercfg.block and supercfg.block.up then supercfg.block.up(x, ...) end
180
+ end
181
+ cfg.binder = supercfg.binder
182
+ walk[kind](cfg, ast, ...)
183
+ end
184
+
185
+ local mt = { __index = |_,k| |...| _walk_id(k, ...) }
186
+ walk_id = setmetatable({ }, mt)