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