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,200 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP Class Library --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Visualization of Lua Values --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
local _G = _G
|
|
17
|
+
local select = select
|
|
18
|
+
local type = type
|
|
19
|
+
local next = next
|
|
20
|
+
local pairs = pairs
|
|
21
|
+
local rawget = rawget
|
|
22
|
+
local rawset = rawset
|
|
23
|
+
local getmetatable = getmetatable
|
|
24
|
+
local setmetatable = setmetatable
|
|
25
|
+
local luatostring = tostring
|
|
26
|
+
local loaded = package and package.loaded
|
|
27
|
+
|
|
28
|
+
local string = require "string"
|
|
29
|
+
local table = require "table"
|
|
30
|
+
local io = require "io"
|
|
31
|
+
local oo = require "loop.base"
|
|
32
|
+
|
|
33
|
+
module("loop.debug.Viewer", oo.class)
|
|
34
|
+
|
|
35
|
+
maxdepth = -1
|
|
36
|
+
indentation = " "
|
|
37
|
+
linebreak = "\n"
|
|
38
|
+
prefix = ""
|
|
39
|
+
output = io.output()
|
|
40
|
+
|
|
41
|
+
function writevalue(self, buffer, value, history, prefix, maxdepth)
|
|
42
|
+
local luatype = type(value)
|
|
43
|
+
if luatype == "nil" or luatype == "boolean" or luatype == "number" then
|
|
44
|
+
buffer:write(luatostring(value))
|
|
45
|
+
elseif luatype == "string" then
|
|
46
|
+
buffer:write(string.format("%q", value))
|
|
47
|
+
else
|
|
48
|
+
local label = history[value]
|
|
49
|
+
if label then
|
|
50
|
+
buffer:write(label)
|
|
51
|
+
else
|
|
52
|
+
label = self.labels[value] or self:label(value)
|
|
53
|
+
history[value] = label
|
|
54
|
+
if luatype == "table" then
|
|
55
|
+
buffer:write("{ --[[",label,"]]")
|
|
56
|
+
local key, field = next(value)
|
|
57
|
+
if key then
|
|
58
|
+
if maxdepth == 0 then
|
|
59
|
+
buffer:write(" ... ")
|
|
60
|
+
else
|
|
61
|
+
maxdepth = maxdepth - 1
|
|
62
|
+
local newprefix = prefix..self.indentation
|
|
63
|
+
for i = 1, #value do
|
|
64
|
+
buffer:write(self.linebreak, newprefix)
|
|
65
|
+
self:writevalue(buffer, value[i], history, newprefix, maxdepth)
|
|
66
|
+
buffer:write(",")
|
|
67
|
+
end
|
|
68
|
+
repeat
|
|
69
|
+
local keytype = type(key)
|
|
70
|
+
if keytype ~= "number" or key<=0 or key>#value or (key%1)~=0 then
|
|
71
|
+
buffer:write(self.linebreak, newprefix)
|
|
72
|
+
if keytype == "string" and key:match("^[%a_][%w_]*$") then
|
|
73
|
+
buffer:write(key)
|
|
74
|
+
else
|
|
75
|
+
buffer:write("[")
|
|
76
|
+
self:writevalue(buffer, key, history, newprefix, maxdepth)
|
|
77
|
+
buffer:write("]")
|
|
78
|
+
end
|
|
79
|
+
buffer:write(" = ")
|
|
80
|
+
self:writevalue(buffer, field, history, newprefix, maxdepth)
|
|
81
|
+
buffer:write(",")
|
|
82
|
+
end
|
|
83
|
+
key, field = next(value, key)
|
|
84
|
+
until not key
|
|
85
|
+
buffer:write(self.linebreak, prefix)
|
|
86
|
+
end
|
|
87
|
+
else
|
|
88
|
+
buffer:write(" ")
|
|
89
|
+
end
|
|
90
|
+
buffer:write("}")
|
|
91
|
+
else
|
|
92
|
+
buffer:write(label)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
function writeto(self, buffer, ...)
|
|
99
|
+
local prefix = self.prefix
|
|
100
|
+
local maxdepth = self.maxdepth
|
|
101
|
+
local history = {}
|
|
102
|
+
for i = 1, select("#", ...) do
|
|
103
|
+
if i ~= 1 then buffer:write(", ") end
|
|
104
|
+
self:writevalue(buffer, select(i, ...), history, prefix, maxdepth)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
local function add(self, ...)
|
|
109
|
+
for i = 1, select("#", ...) do self[#self+1] = select(i, ...) end
|
|
110
|
+
end
|
|
111
|
+
function tostring(self, ...)
|
|
112
|
+
local buffer = { write = add }
|
|
113
|
+
self:writeto(buffer, ...)
|
|
114
|
+
return table.concat(buffer)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
function write(self, ...)
|
|
118
|
+
self:writeto(self.output, ...)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
function print(self, ...)
|
|
122
|
+
local output = self.output
|
|
123
|
+
local prefix = self.prefix
|
|
124
|
+
local maxdepth = self.maxdepth
|
|
125
|
+
local history = {}
|
|
126
|
+
local value
|
|
127
|
+
for i = 1, select("#", ...) do
|
|
128
|
+
value = select(i, ...)
|
|
129
|
+
if type(value) == "string"
|
|
130
|
+
then output:write(value)
|
|
131
|
+
else self:writevalue(output, value, history, prefix, maxdepth)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
output:write("\n")
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
function label(self, value)
|
|
138
|
+
local meta = getmetatable(value)
|
|
139
|
+
if meta then
|
|
140
|
+
local custom = rawget(meta, "__tostring")
|
|
141
|
+
if custom then
|
|
142
|
+
rawset(meta, "__tostring", nil)
|
|
143
|
+
local raw = luatostring(value)
|
|
144
|
+
rawset(meta, "__tostring", custom)
|
|
145
|
+
custom = luatostring(value)
|
|
146
|
+
if raw == custom
|
|
147
|
+
then return raw
|
|
148
|
+
else return custom.." ("..raw..")"
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
return luatostring(value)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
function package(self, name, pack)
|
|
156
|
+
local labels = self.labels
|
|
157
|
+
labels[pack] = name
|
|
158
|
+
for field, member in pairs(pack) do
|
|
159
|
+
local kind = type(member)
|
|
160
|
+
if
|
|
161
|
+
labels[member] == nil and
|
|
162
|
+
(kind == "function" or kind == "userdata") and
|
|
163
|
+
field:match("^[%a_]+[%w_]*$")
|
|
164
|
+
then
|
|
165
|
+
labels[member] = name.."."..field
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
if loaded then
|
|
171
|
+
local luapacks = {
|
|
172
|
+
coroutine = true,
|
|
173
|
+
package = true,
|
|
174
|
+
string = true,
|
|
175
|
+
table = true,
|
|
176
|
+
math = true,
|
|
177
|
+
io = true,
|
|
178
|
+
os = true,
|
|
179
|
+
}
|
|
180
|
+
-- create cache for global values
|
|
181
|
+
labels = { __mode = "k" }
|
|
182
|
+
setmetatable(labels, labels)
|
|
183
|
+
-- cache names of global functions
|
|
184
|
+
for name, func in pairs(_G) do
|
|
185
|
+
if type(func) == "function" then
|
|
186
|
+
labels[func] = name
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
-- label loaded Lua library packages
|
|
190
|
+
for name in pairs(luapacks) do
|
|
191
|
+
local pack = loaded[name]
|
|
192
|
+
if pack then package(_M, name, pack) end
|
|
193
|
+
end
|
|
194
|
+
-- label other loaded packages
|
|
195
|
+
for name, pack in pairs(loaded) do
|
|
196
|
+
if not luapacks[name] and type(pack) == "table" then
|
|
197
|
+
package(_M, name, pack)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP - Lua Object-Oriented Programming --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Multiple Inheritance Class Model --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
-- Exported API: --
|
|
16
|
+
-- class(class, ...) --
|
|
17
|
+
-- new(class, ...) --
|
|
18
|
+
-- classof(object) --
|
|
19
|
+
-- isclass(class) --
|
|
20
|
+
-- instanceof(object, class) --
|
|
21
|
+
-- memberof(class, name) --
|
|
22
|
+
-- members(class) --
|
|
23
|
+
-- superclass(class) --
|
|
24
|
+
-- subclassof(class, super) --
|
|
25
|
+
-- supers(class) --
|
|
26
|
+
--------------------------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
local unpack = unpack
|
|
29
|
+
local require = require
|
|
30
|
+
local ipairs = ipairs
|
|
31
|
+
local select = select
|
|
32
|
+
|
|
33
|
+
local table = require "loop.table"
|
|
34
|
+
|
|
35
|
+
module "loop.multiple"
|
|
36
|
+
--------------------------------------------------------------------------------
|
|
37
|
+
local base = require "loop.simple"
|
|
38
|
+
--------------------------------------------------------------------------------
|
|
39
|
+
table.copy(base, _M)
|
|
40
|
+
--------------------------------------------------------------------------------
|
|
41
|
+
local MultipleClass = {
|
|
42
|
+
__call = new,
|
|
43
|
+
__index = function (self, field)
|
|
44
|
+
self = base.classof(self)
|
|
45
|
+
for _, super in ipairs(self) do
|
|
46
|
+
local value = super[field]
|
|
47
|
+
if value ~= nil then return value end
|
|
48
|
+
end
|
|
49
|
+
end,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function class(class, ...)
|
|
53
|
+
if select("#", ...) > 1
|
|
54
|
+
then return base.rawnew(table.copy(MultipleClass, {...}), initclass(class))
|
|
55
|
+
else return base.class(class, ...)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
--------------------------------------------------------------------------------
|
|
59
|
+
function isclass(class)
|
|
60
|
+
local metaclass = base.classof(class)
|
|
61
|
+
if metaclass then
|
|
62
|
+
return metaclass.__index == MultipleClass.__index or
|
|
63
|
+
base.isclass(class)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
--------------------------------------------------------------------------------
|
|
67
|
+
function superclass(class)
|
|
68
|
+
local metaclass = base.classof(class)
|
|
69
|
+
if metaclass then
|
|
70
|
+
local indexer = metaclass.__index
|
|
71
|
+
if (indexer == MultipleClass.__index)
|
|
72
|
+
then return unpack(metaclass)
|
|
73
|
+
else return metaclass.__index
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
--------------------------------------------------------------------------------
|
|
78
|
+
local function isingle(single, index)
|
|
79
|
+
if single and not index then
|
|
80
|
+
return 1, single
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
function supers(class)
|
|
84
|
+
local metaclass = classof(class)
|
|
85
|
+
if metaclass then
|
|
86
|
+
local indexer = metaclass.__index
|
|
87
|
+
if indexer == MultipleClass.__index
|
|
88
|
+
then return ipairs(metaclass)
|
|
89
|
+
else return isingle, indexer
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
return isingle
|
|
93
|
+
end
|
|
94
|
+
--------------------------------------------------------------------------------
|
|
95
|
+
function subclassof(class, super)
|
|
96
|
+
if class == super then return true end
|
|
97
|
+
for _, superclass in supers(class) do
|
|
98
|
+
if subclassof(superclass, super) then return true end
|
|
99
|
+
end
|
|
100
|
+
return false
|
|
101
|
+
end
|
|
102
|
+
--------------------------------------------------------------------------------
|
|
103
|
+
function instanceof(object, class)
|
|
104
|
+
return subclassof(classof(object), class)
|
|
105
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP Class Library --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Data structure to hold information about exceptions in Lua --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
local error = error
|
|
17
|
+
local type = type
|
|
18
|
+
local traceback = debug and debug.traceback
|
|
19
|
+
|
|
20
|
+
local table = require "table"
|
|
21
|
+
local oo = require "loop.base"
|
|
22
|
+
|
|
23
|
+
module("loop.object.Exception", oo.class)
|
|
24
|
+
|
|
25
|
+
function __init(class, object)
|
|
26
|
+
if traceback then
|
|
27
|
+
if not object then
|
|
28
|
+
object = { traceback = traceback() }
|
|
29
|
+
elseif object.traceback == nil then
|
|
30
|
+
object.traceback = traceback()
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
return oo.rawnew(class, object)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
function __concat(op1, op2)
|
|
37
|
+
if type(op1) == "table" and type(op1.__tostring) == "function" then
|
|
38
|
+
op1 = op1:__tostring()
|
|
39
|
+
end
|
|
40
|
+
if type(op2) == "table" and type(op2.__tostring) == "function" then
|
|
41
|
+
op2 = op2:__tostring()
|
|
42
|
+
end
|
|
43
|
+
return op1..op2
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
function __tostring(self)
|
|
47
|
+
local message = { self[1] or self._NAME or "Exception"," raised" }
|
|
48
|
+
if self.message then
|
|
49
|
+
message[#message + 1] = ": "
|
|
50
|
+
message[#message + 1] = self.message
|
|
51
|
+
end
|
|
52
|
+
if self.traceback then
|
|
53
|
+
message[#message + 1] = "\n"
|
|
54
|
+
message[#message + 1] = self.traceback
|
|
55
|
+
end
|
|
56
|
+
return table.concat(message)
|
|
57
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP Class Library --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Class that Implement Group Invocation --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
local pairs = pairs
|
|
17
|
+
|
|
18
|
+
local oo = require "loop.base"
|
|
19
|
+
local ObjectCache = require "loop.collection.ObjectCache"
|
|
20
|
+
|
|
21
|
+
module("loop.object.Publisher", oo.class)
|
|
22
|
+
|
|
23
|
+
__index = ObjectCache{
|
|
24
|
+
retrieve = function(_, method)
|
|
25
|
+
return function(self, ...)
|
|
26
|
+
for _, object in pairs(self) do
|
|
27
|
+
object[method](object, ...)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function __newindex(self, key, value)
|
|
34
|
+
for _, object in pairs(self) do
|
|
35
|
+
object[key] = value
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
function __call(self, ...)
|
|
40
|
+
for _, object in pairs(self) do
|
|
41
|
+
object(...)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP Class Library --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Class of Dynamic Wrapper Objects for Method Invocation --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
local type = type
|
|
17
|
+
local oo = require "loop.base"
|
|
18
|
+
local ObjectCache = require "loop.collection.ObjectCache"
|
|
19
|
+
|
|
20
|
+
module("loop.object.Wrapper", oo.class)
|
|
21
|
+
|
|
22
|
+
function __init(self, ...)
|
|
23
|
+
self = oo.rawnew(self, ...)
|
|
24
|
+
self.__methods = ObjectCache()
|
|
25
|
+
function self.__methods.retrieve(_, method)
|
|
26
|
+
return function(_, ...)
|
|
27
|
+
return method(self.__object, ...)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
return self
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
function __index(self, key)
|
|
34
|
+
local value = self.__object[key]
|
|
35
|
+
if type(value) == "function"
|
|
36
|
+
then return self.__methods[value]
|
|
37
|
+
else return value
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP - Lua Object-Oriented Programming --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Scoped Class Model --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
-- Exported API: --
|
|
16
|
+
-- class(class, ...) --
|
|
17
|
+
-- new(class, ...) --
|
|
18
|
+
-- classof(object) --
|
|
19
|
+
-- isclass(class) --
|
|
20
|
+
-- instanceof(object, class) --
|
|
21
|
+
-- memberof(class, name) --
|
|
22
|
+
-- members(class) --
|
|
23
|
+
-- superclass(class) --
|
|
24
|
+
-- subclassof(class, super) --
|
|
25
|
+
-- supers(class) --
|
|
26
|
+
-- allmembers(class) --
|
|
27
|
+
-- --
|
|
28
|
+
-- methodfunction(method) --
|
|
29
|
+
-- methodclass(method) --
|
|
30
|
+
-- this(object) --
|
|
31
|
+
-- priv(object, [class]) --
|
|
32
|
+
-- prot(object) --
|
|
33
|
+
--------------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
-- TODO:
|
|
36
|
+
-- Test replacement of all members of a scope by ClassProxy[scope] = { ... }
|
|
37
|
+
-- Test static method call.
|
|
38
|
+
-- Define a default __eq metamethod that compares the object references.
|
|
39
|
+
-- The best way to relink member with numeric, string and boolean values.
|
|
40
|
+
-- Replace conditional compiler by static function constructors.
|
|
41
|
+
|
|
42
|
+
--------------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
local type = type
|
|
45
|
+
local pairs = pairs
|
|
46
|
+
local assert = assert
|
|
47
|
+
local ipairs = ipairs
|
|
48
|
+
local setmetatable = setmetatable
|
|
49
|
+
local unpack = unpack
|
|
50
|
+
local require = require
|
|
51
|
+
local rawset = rawset
|
|
52
|
+
local getmetatable = getmetatable
|
|
53
|
+
local rawget = rawget
|
|
54
|
+
|
|
55
|
+
local debug = require "debug"
|
|
56
|
+
local table = require "loop.table"
|
|
57
|
+
|
|
58
|
+
module "loop.scoped" -- [[VERBOSE]] local verbose = require "loop.verbose"
|
|
59
|
+
|
|
60
|
+
--------------------------------------------------------------------------------
|
|
61
|
+
local ObjectCache = require "loop.collection.ObjectCache"
|
|
62
|
+
local OrderedSet = require "loop.collection.OrderedSet"
|
|
63
|
+
local base = require "loop.multiple"
|
|
64
|
+
--------------------------------------------------------------------------------
|
|
65
|
+
table.copy(require "loop.cached", _M)
|
|
66
|
+
--------------------------------------------------------------------------------
|
|
67
|
+
--- SCOPED DATA CHAIN ----------------------------------------------------------
|
|
68
|
+
--------------------------------------------------------------------------------
|
|
69
|
+
-- maps private and protected state objects to the object (public) table
|
|
70
|
+
local Object = setmetatable({}, { __mode = "kv" })
|
|
71
|
+
--------------------------------------------------------------------------------
|
|
72
|
+
local function newprotected(self, object) -- [[VERBOSE]] verbose:scoped("new 'protected' for 'public' ",object)
|
|
73
|
+
local protected = self.class()
|
|
74
|
+
Object[protected] = object
|
|
75
|
+
return protected
|
|
76
|
+
end
|
|
77
|
+
local function ProtectedPool(members) -- [[VERBOSE]] verbose:scoped "new protected pool"
|
|
78
|
+
return ObjectCache {
|
|
79
|
+
class = base.class(members),
|
|
80
|
+
retrieve = newprotected,
|
|
81
|
+
}
|
|
82
|
+
end
|
|
83
|
+
--------------------------------------------------------------------------------
|
|
84
|
+
local function newprivate(self, outter) -- [[VERBOSE]] verbose:scoped(true, "retrieving 'private' for reference ",outter)
|
|
85
|
+
local object = Object[outter] -- [[VERBOSE]] verbose:scoped("'public' is ",object or outter)
|
|
86
|
+
local private = rawget(self, object)
|
|
87
|
+
if not private then
|
|
88
|
+
private = self.class() -- [[VERBOSE]] verbose:scoped("new 'private' created: ",private)
|
|
89
|
+
if object then
|
|
90
|
+
Object[private] = object -- [[VERBOSE]] verbose:scoped("'public' ",object," registered for the new 'private' ",private)
|
|
91
|
+
self[object] = private -- [[VERBOSE]] verbose:scoped("new 'private' ",private," stored at the pool for 'public' ",object)
|
|
92
|
+
else
|
|
93
|
+
Object[private] = outter -- [[VERBOSE]] verbose:scoped("'public' ",outter," registered for the new 'private' ",private)
|
|
94
|
+
end -- [[VERBOSE]] else verbose:scoped("reusing 'private' ",private," associated to 'public'")
|
|
95
|
+
end -- [[VERBOSE]] verbose:scoped(false, "returning 'private' ",private," for reference ",outter)
|
|
96
|
+
return private
|
|
97
|
+
end
|
|
98
|
+
local function PrivatePool(members) -- [[VERBOSE]] verbose:scoped{"new private pool", members = members}
|
|
99
|
+
return ObjectCache {
|
|
100
|
+
class = base.class(members),
|
|
101
|
+
retrieve = newprivate,
|
|
102
|
+
}
|
|
103
|
+
end
|
|
104
|
+
--------------------------------------------------------------------------------
|
|
105
|
+
local function bindto(class, member)
|
|
106
|
+
if type(member) == "function" then -- [[VERBOSE]] verbose:scoped("new method closure for ",member)
|
|
107
|
+
local pool
|
|
108
|
+
local method = member
|
|
109
|
+
member = function (self, ...)
|
|
110
|
+
pool = rawget(class, getmetatable(self)) -- [[VERBOSE]] verbose:scoped("method call on reference ",self," (pool: ",pool,")")
|
|
111
|
+
if pool
|
|
112
|
+
then return method(pool[self], ...)
|
|
113
|
+
else return method(self, ...)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
return member
|
|
118
|
+
end
|
|
119
|
+
--------------------------------------------------------------------------------
|
|
120
|
+
local ConditionalCompiler = require "loop.compiler.Conditional"
|
|
121
|
+
|
|
122
|
+
local indexer = ConditionalCompiler {
|
|
123
|
+
{[[local Public = select(1, ...) ]],"private or protected" },
|
|
124
|
+
{[[local meta = select(2, ...) ]],"not (newindex and public and nilindex)" },
|
|
125
|
+
{[[local class = select(3, ...) ]],"newindex or private" },
|
|
126
|
+
{[[local bindto = select(4, ...) ]],"newindex" },
|
|
127
|
+
{[[local newindex = select(5, ...) ]],"newindex and not nilindex" },
|
|
128
|
+
{[[local index = select(5, ...) ]],"index and not nilindex" },
|
|
129
|
+
{[[local registry = class.registry ]],"private" },
|
|
130
|
+
{[[local result ]],"index and (private or protected)" },
|
|
131
|
+
{[[return function (state, name, value) ]],"newindex" },
|
|
132
|
+
{[[return function (state, name) ]],"index" },
|
|
133
|
+
{[[ result = meta[name] ]],"index and (private or protected)" },
|
|
134
|
+
{[[ return meta[name] ]],"index and public" },
|
|
135
|
+
{[[ or index[name] ]],"index and tableindex" },
|
|
136
|
+
{[[ or index(state, name) ]],"index and functionindex" },
|
|
137
|
+
{[[ if result == nil then ]],"index and (private or protected)" },
|
|
138
|
+
{[[ if meta[name] == nil then ]],"newindex and (private or protected or not nilindex)" },
|
|
139
|
+
{[[ state = Public[state] ]],"private or protected" },
|
|
140
|
+
{[[ local Protected = registry[getmetatable(state)] ]],"private" },
|
|
141
|
+
{[[ if Protected then state = Protected[state] end ]],"private" },
|
|
142
|
+
{[[ return state[name] ]],"index and (private or protected)" },
|
|
143
|
+
{[[ state[name] = bindto(class, value) ]],"newindex and (private or protected) and nilindex" },
|
|
144
|
+
{[[ newindex[name] = bindto(class, value) ]],"newindex and tableindex" },
|
|
145
|
+
{[[ return newindex(state, name, bindto(class, value))]],"newindex and functionindex" },
|
|
146
|
+
{[[ else ]],"newindex and (private or protected or not nilindex)" },
|
|
147
|
+
{[[ return rawset(state, name, bindto(class, value)) ]],"newindex" },
|
|
148
|
+
{[[ end ]],"private or protected or (newindex and not nilindex)" },
|
|
149
|
+
{[[ return result ]],"index and (private or protected)" },
|
|
150
|
+
{[[end ]]},
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
local function createindexer(class, scope, action)
|
|
154
|
+
local meta = class:getmeta(scope)
|
|
155
|
+
local index = meta["__"..action]
|
|
156
|
+
local indextype = type(index).."index"
|
|
157
|
+
local codename = table.concat({scope,action,index and ("with "..indextype)}," ")
|
|
158
|
+
|
|
159
|
+
return indexer:execute({
|
|
160
|
+
[action] = true,
|
|
161
|
+
[scope] = true,
|
|
162
|
+
[indextype] = true,
|
|
163
|
+
},
|
|
164
|
+
Object,
|
|
165
|
+
meta,
|
|
166
|
+
class,
|
|
167
|
+
bindto,
|
|
168
|
+
index
|
|
169
|
+
)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
local function unwrap(meta, tag)
|
|
173
|
+
local indexer
|
|
174
|
+
local key = "__"..tag
|
|
175
|
+
local func = assert(meta[key], "no indexer found in scoped class metatable.")
|
|
176
|
+
local name, value
|
|
177
|
+
local i = 1
|
|
178
|
+
repeat
|
|
179
|
+
name, value = debug.getupvalue(func, i)
|
|
180
|
+
i = i + 1
|
|
181
|
+
until name == nil or name == tag
|
|
182
|
+
return value
|
|
183
|
+
end
|
|
184
|
+
--------------------------------------------------------------------------------
|
|
185
|
+
--------------------------------------------------------------------------------
|
|
186
|
+
--------------------------------------------------------------------------------
|
|
187
|
+
local function supersiterator(stack, class)
|
|
188
|
+
class = stack[class]
|
|
189
|
+
if class then
|
|
190
|
+
for _, super in ipairs(class.supers) do
|
|
191
|
+
stack:insert(super, class)
|
|
192
|
+
end
|
|
193
|
+
return class
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
local function hierarchyof(class)
|
|
197
|
+
local stack = OrderedSet()
|
|
198
|
+
stack:push(class)
|
|
199
|
+
return supersiterator, stack, OrderedSet.firstkey
|
|
200
|
+
end
|
|
201
|
+
--------------------------------------------------------------------------------
|
|
202
|
+
local function publicproxy_call(_, object)
|
|
203
|
+
return this(object)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
local function protectedproxy_call(_, object)
|
|
207
|
+
return prot(object)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
local function privateproxy_call(_, object, class)
|
|
211
|
+
return priv(object, class)
|
|
212
|
+
end
|
|
213
|
+
--------------------------------------------------------------------------------
|
|
214
|
+
local ScopedClass = base.class({}, CachedClass)
|
|
215
|
+
|
|
216
|
+
function ScopedClass:getmeta(scope)
|
|
217
|
+
return self[scope] and self[scope].class
|
|
218
|
+
or
|
|
219
|
+
(scope == "public") and self.class
|
|
220
|
+
or
|
|
221
|
+
nil
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
function ScopedClass:getmembers(scope)
|
|
225
|
+
return self.members[scope]
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
function ScopedClass:__init(class)
|
|
229
|
+
if not class then class = { public = {} } end
|
|
230
|
+
|
|
231
|
+
-- adjust class definition to use scoped member tables
|
|
232
|
+
if type(class.public) ~= "table" then
|
|
233
|
+
if
|
|
234
|
+
(type(class.protected) == "table")
|
|
235
|
+
or
|
|
236
|
+
(type(class.private) == "table")
|
|
237
|
+
then
|
|
238
|
+
class.public = {}
|
|
239
|
+
else
|
|
240
|
+
local public = table.copy(class)
|
|
241
|
+
table.clear(class)
|
|
242
|
+
class.public = public
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
-- initialize scoped cached class
|
|
247
|
+
self = CachedClass.__init(self, class)
|
|
248
|
+
self.registry = { [self.class] = false }
|
|
249
|
+
|
|
250
|
+
-- define scoped class proxy for public state
|
|
251
|
+
rawset(self.proxy, "public", setmetatable({}, {
|
|
252
|
+
__call = publicproxy_call,
|
|
253
|
+
__index = self.class,
|
|
254
|
+
__newindex = function(_, field, value)
|
|
255
|
+
self:updatefield(field, value, "public")
|
|
256
|
+
end,
|
|
257
|
+
}))
|
|
258
|
+
|
|
259
|
+
return self
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
function ScopedClass:addsubclass(class)
|
|
263
|
+
CachedClass.addsubclass(self, class)
|
|
264
|
+
|
|
265
|
+
local public = class.class
|
|
266
|
+
for super in hierarchyof(self) do
|
|
267
|
+
local registry = super.registry
|
|
268
|
+
if registry then -- if super is a scoped class
|
|
269
|
+
registry[public] = false
|
|
270
|
+
super[public] = super.private
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
function ScopedClass:removesubclass(class)
|
|
276
|
+
CachedClass.removesubclass(self, class)
|
|
277
|
+
|
|
278
|
+
local public = self.class
|
|
279
|
+
local protected = self:getmeta("protected")
|
|
280
|
+
local private = self:getmeta("private")
|
|
281
|
+
|
|
282
|
+
for super in hierarchyof(self) do
|
|
283
|
+
local registry = super.registry
|
|
284
|
+
if registry then -- if super is a scoped class
|
|
285
|
+
registry[public] = nil
|
|
286
|
+
super[public] = nil
|
|
287
|
+
if protected then
|
|
288
|
+
registry[protected] = nil
|
|
289
|
+
super[protected] = nil
|
|
290
|
+
end
|
|
291
|
+
if private then
|
|
292
|
+
registry[private] = nil
|
|
293
|
+
super[private] = nil
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
local function copymembers(class, source, destiny)
|
|
300
|
+
if source then
|
|
301
|
+
if not destiny then destiny = {} end
|
|
302
|
+
for field, value in pairs(source) do
|
|
303
|
+
destiny[field] = bindto(class, value)
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
return destiny
|
|
307
|
+
end
|
|
308
|
+
function ScopedClass:updatemembers()
|
|
309
|
+
--
|
|
310
|
+
-- metatables to collect with current members
|
|
311
|
+
--
|
|
312
|
+
local public = table.clear(self.class)
|
|
313
|
+
local protected
|
|
314
|
+
local private
|
|
315
|
+
|
|
316
|
+
--
|
|
317
|
+
-- copy inherited members
|
|
318
|
+
--
|
|
319
|
+
local publicindex, publicnewindex
|
|
320
|
+
local protectedindex, protectednewindex
|
|
321
|
+
local superclasses = self.supers
|
|
322
|
+
for i = #superclasses, 1, -1 do
|
|
323
|
+
local super = superclasses[i]
|
|
324
|
+
|
|
325
|
+
-- copy members from superclass metatables
|
|
326
|
+
public = table.copy(super.class, public)
|
|
327
|
+
|
|
328
|
+
if base.instanceof(super, ScopedClass) then
|
|
329
|
+
-- copy protected members from superclass metatables
|
|
330
|
+
protected = table.copy(super:getmeta("protected"), protected)
|
|
331
|
+
|
|
332
|
+
-- extract the __index and __newindex values
|
|
333
|
+
publicindex = unwrap(public, "index") or publicindex
|
|
334
|
+
publicnewindex = unwrap(public, "newindex") or publicnewindex
|
|
335
|
+
if protected then
|
|
336
|
+
protectedindex = unwrap(protected, "index") or protectedindex
|
|
337
|
+
protectednewindex = unwrap(protected, "newindex") or protectednewindex
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
public.__index = publicindex
|
|
342
|
+
public.__newindex = publicnewindex
|
|
343
|
+
if protected then
|
|
344
|
+
protected.__index = protectedindex
|
|
345
|
+
protected.__newindex = protectednewindex
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
--
|
|
349
|
+
-- copy members defined in the class
|
|
350
|
+
--
|
|
351
|
+
public = copymembers(self, self.members.public, public)
|
|
352
|
+
protected = copymembers(self, self.members.protected, protected)
|
|
353
|
+
private = copymembers(self, self.members.private, private)
|
|
354
|
+
|
|
355
|
+
--
|
|
356
|
+
-- setup public metatable with proper indexers
|
|
357
|
+
--
|
|
358
|
+
public.__index = createindexer(self, "public", "index")
|
|
359
|
+
public.__newindex = createindexer(self, "public", "newindex")
|
|
360
|
+
|
|
361
|
+
--
|
|
362
|
+
-- setup proper protected state features: pool, proxy and indexers
|
|
363
|
+
--
|
|
364
|
+
if protected then
|
|
365
|
+
if not self.protected then
|
|
366
|
+
-- create state object pool and class proxy for protected state
|
|
367
|
+
self.protected = ProtectedPool(protected)
|
|
368
|
+
rawset(self.proxy, "protected", setmetatable({}, {
|
|
369
|
+
__call = protectedproxy_call,
|
|
370
|
+
__index = protected,
|
|
371
|
+
__newindex = function(_, field, value)
|
|
372
|
+
self:updatefield(field, value, "protected")
|
|
373
|
+
end,
|
|
374
|
+
}))
|
|
375
|
+
-- register new pool in superclasses
|
|
376
|
+
local protected_pool = self.protected
|
|
377
|
+
for super in hierarchyof(self) do
|
|
378
|
+
local registry = super.registry
|
|
379
|
+
if registry then
|
|
380
|
+
registry[public] = protected_pool
|
|
381
|
+
registry[protected] = false
|
|
382
|
+
|
|
383
|
+
local pool = super.private
|
|
384
|
+
if pool then
|
|
385
|
+
super[public] = pool
|
|
386
|
+
super[protected] = pool
|
|
387
|
+
else
|
|
388
|
+
super[public] = protected_pool
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
end
|
|
392
|
+
else
|
|
393
|
+
-- update current metatable with new members
|
|
394
|
+
protected = table.copy(protected, table.clear(self.protected.class))
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
-- setup metatable with proper indexers
|
|
398
|
+
protected.__index = createindexer(self, "protected", "index")
|
|
399
|
+
protected.__newindex = createindexer(self, "protected", "newindex")
|
|
400
|
+
|
|
401
|
+
elseif self.protected then
|
|
402
|
+
-- remove old pool from registry in superclasses
|
|
403
|
+
local protected_pool = self.protected
|
|
404
|
+
for super in hierarchyof(self) do
|
|
405
|
+
local registry = super.registry
|
|
406
|
+
if registry then
|
|
407
|
+
registry[public] = false
|
|
408
|
+
registry[protected_pool.class] = nil
|
|
409
|
+
|
|
410
|
+
super[public] = super.private
|
|
411
|
+
super[protected_pool.class] = nil
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
-- remove state object pool and class proxy for protected state
|
|
415
|
+
self.protected = nil
|
|
416
|
+
rawset(self.proxy, "protected", nil)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
--
|
|
420
|
+
-- setup proper private state features: pool, proxy and indexers
|
|
421
|
+
--
|
|
422
|
+
if private then
|
|
423
|
+
if not self.private then
|
|
424
|
+
-- create state object pool and class proxy for private state
|
|
425
|
+
self.private = PrivatePool(private)
|
|
426
|
+
rawset(self.proxy, "private", setmetatable({}, {
|
|
427
|
+
__call = privateproxy_call,
|
|
428
|
+
__index = private,
|
|
429
|
+
__newindex = function(_, field, value)
|
|
430
|
+
self:updatefield(field, value, "private")
|
|
431
|
+
end
|
|
432
|
+
}))
|
|
433
|
+
-- registry new pool in superclasses
|
|
434
|
+
local private_pool = self.private
|
|
435
|
+
local pool = self.protected or Object
|
|
436
|
+
for _, super in ipairs(superclasses) do
|
|
437
|
+
for class in hierarchyof(super) do
|
|
438
|
+
local registry = class.registry
|
|
439
|
+
if registry then -- if class is a scoped class
|
|
440
|
+
registry[private] = pool
|
|
441
|
+
class[private] = class.private_pool or pool
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
for meta in pairs(self.registry) do
|
|
446
|
+
self[meta] = private_pool
|
|
447
|
+
end
|
|
448
|
+
else
|
|
449
|
+
-- update current metatable with new members
|
|
450
|
+
private = table.copy(private, table.clear(self:getmeta("private")))
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
-- setup metatable with proper indexers
|
|
454
|
+
private.__index = createindexer(self, "private", "index")
|
|
455
|
+
private.__newindex = createindexer(self, "private", "newindex")
|
|
456
|
+
|
|
457
|
+
elseif self.private then
|
|
458
|
+
-- remove old pool from registry in superclasses
|
|
459
|
+
local private_pool = self.private
|
|
460
|
+
for _, super in ipairs(superclasses) do
|
|
461
|
+
for class in hierarchyof(super) do
|
|
462
|
+
local registry = class.registry
|
|
463
|
+
if registry then -- if class is a scoped class
|
|
464
|
+
registry[private_pool.class] = nil
|
|
465
|
+
class[private_pool.class] = nil
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
for meta, pool in pairs(self.registry) do
|
|
470
|
+
self[meta] = pool or nil
|
|
471
|
+
end
|
|
472
|
+
-- remove state object pool and class proxy for private state
|
|
473
|
+
self.private = nil
|
|
474
|
+
rawset(self.proxy, "private", nil)
|
|
475
|
+
end
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
function ScopedClass:updatefield(name, member, scope) -- [[VERBOSE]] verbose:scoped(true, "updating field ",name," on scope ",scope," with value ",member)
|
|
479
|
+
member = bindto(self, member)
|
|
480
|
+
if not scope then
|
|
481
|
+
if
|
|
482
|
+
(
|
|
483
|
+
name == "public"
|
|
484
|
+
or
|
|
485
|
+
name == "protected"
|
|
486
|
+
or
|
|
487
|
+
name == "private"
|
|
488
|
+
) and (
|
|
489
|
+
member == nil
|
|
490
|
+
or
|
|
491
|
+
type(member) == "table"
|
|
492
|
+
)
|
|
493
|
+
then -- [[VERBOSE]] verbose:scoped("updating scope field")
|
|
494
|
+
self.members[name] = member
|
|
495
|
+
return self:updatemembers() -- [[VERBOSE]] , verbose:scoped(false, "whole scope field updated")
|
|
496
|
+
end
|
|
497
|
+
scope = "public"
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
-- Update member list
|
|
501
|
+
local members = self:getmembers(scope)
|
|
502
|
+
members[name] = member
|
|
503
|
+
|
|
504
|
+
-- Create new member linkage and get old linkage
|
|
505
|
+
local metatable = self:getmeta(scope)
|
|
506
|
+
local old = metatable[name]
|
|
507
|
+
|
|
508
|
+
-- Replace old linkage for the new one
|
|
509
|
+
metatable[name] = member
|
|
510
|
+
if scope ~= "private" then
|
|
511
|
+
local queue = OrderedSet()
|
|
512
|
+
for sub in pairs(self.subs) do
|
|
513
|
+
queue:enqueue(sub)
|
|
514
|
+
end
|
|
515
|
+
while queue:head() do
|
|
516
|
+
local current = queue:dequeue()
|
|
517
|
+
metatable = current:getmeta(scope)
|
|
518
|
+
members = current:getmembers(scope)
|
|
519
|
+
if members and (members[name] == nil) then
|
|
520
|
+
for _, super in ipairs(current.supers) do
|
|
521
|
+
local super_meta = super:getmeta(scope)
|
|
522
|
+
if super_meta[name] ~= nil then
|
|
523
|
+
if super_meta[name] ~= metatable[name] then
|
|
524
|
+
metatable[name] = super_meta[name]
|
|
525
|
+
for sub in pairs(current.subs) do
|
|
526
|
+
queue:enqueue(sub)
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
break
|
|
530
|
+
end
|
|
531
|
+
end
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
end -- [[VERBOSE]] verbose:scoped(false, "field updated")
|
|
535
|
+
return old
|
|
536
|
+
end
|
|
537
|
+
--------------------------------------------------------------------------------
|
|
538
|
+
function class(class, ...)
|
|
539
|
+
class = getclass(class) or ScopedClass(class)
|
|
540
|
+
class:updatehierarchy(...)
|
|
541
|
+
class:updateinheritance()
|
|
542
|
+
return class.proxy
|
|
543
|
+
end
|
|
544
|
+
--------------------------------------------------------------------------------
|
|
545
|
+
local cached_classof = classof
|
|
546
|
+
function classof(object)
|
|
547
|
+
return cached_classof(this(object))
|
|
548
|
+
end
|
|
549
|
+
-------------------------------------------------------------------------------
|
|
550
|
+
function methodfunction(method)
|
|
551
|
+
local name, value = debug.getupvalue(method, 5)
|
|
552
|
+
assert(name == "method", "Oops! Got the wrong upvalue in 'methodfunction'")
|
|
553
|
+
return value
|
|
554
|
+
end
|
|
555
|
+
--------------------------------------------------------------------------------
|
|
556
|
+
function methodclass(method)
|
|
557
|
+
local name, value = debug.getupvalue(method, 3)
|
|
558
|
+
assert(name == "class", "Oops! Got the wrong upvalue in 'methodclass'")
|
|
559
|
+
return value.proxy
|
|
560
|
+
end
|
|
561
|
+
--------------------------------------------------------------------------------
|
|
562
|
+
function this(object)
|
|
563
|
+
return Object[object] or object
|
|
564
|
+
end
|
|
565
|
+
--------------------------------------------------------------------------------
|
|
566
|
+
function priv(object, class)
|
|
567
|
+
if not class then class = classof(object) end
|
|
568
|
+
class = getclass(class)
|
|
569
|
+
if class and class.private then
|
|
570
|
+
if base.classof(object) == class.private.class
|
|
571
|
+
then return object -- private object
|
|
572
|
+
else return class.private[object] -- protected or public object
|
|
573
|
+
end
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
--------------------------------------------------------------------------------
|
|
577
|
+
function prot(object)
|
|
578
|
+
local class = getclass(classof(object))
|
|
579
|
+
if class and class.protected then
|
|
580
|
+
if base.classof(object) == class.protected.class
|
|
581
|
+
then return object -- protected object
|
|
582
|
+
else return class.protected[this(object)] -- private or public object
|
|
583
|
+
end
|
|
584
|
+
end
|
|
585
|
+
end
|