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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- 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)
|