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,1821 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
------------------------------ ##### ## ------------------------------
|
|
3
|
+
------------------------------ ## ## # ## ------------------------------
|
|
4
|
+
------------------------------ ## ## ## ## ------------------------------
|
|
5
|
+
------------------------------ ## ## # ## ------------------------------
|
|
6
|
+
------------------------------ ##### ### ###### ------------------------------
|
|
7
|
+
-------------------------------- --------------------------------
|
|
8
|
+
----------------------- An Object Request Broker in Lua ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: OiL - ORB in Lua: An Object Request Broker in Lua --
|
|
11
|
+
-- Release: 0.5 --
|
|
12
|
+
-- Title : IDL Definition Registry --
|
|
13
|
+
-- Authors: Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
-- interfaces:Facet
|
|
16
|
+
-- interface:table register(definition:table)
|
|
17
|
+
-- interface:table resolve(id:string)
|
|
18
|
+
-- [interface:table] lookup(name:string)
|
|
19
|
+
-- [interface:table] lookup_id(repid:string)
|
|
20
|
+
--------------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
local error = error
|
|
23
|
+
local getmetatable = getmetatable
|
|
24
|
+
local ipairs = ipairs
|
|
25
|
+
local next = next
|
|
26
|
+
local pairs = pairs
|
|
27
|
+
local rawget = rawget
|
|
28
|
+
local select = select
|
|
29
|
+
local setmetatable = setmetatable
|
|
30
|
+
local type = type
|
|
31
|
+
local unpack = unpack
|
|
32
|
+
|
|
33
|
+
local string = require "string"
|
|
34
|
+
local table = require "table"
|
|
35
|
+
|
|
36
|
+
local OrderedSet = require "loop.collection.OrderedSet"
|
|
37
|
+
local Publisher = require "loop.object.Publisher"
|
|
38
|
+
|
|
39
|
+
local oo = require "oil.oo"
|
|
40
|
+
local assert = require "oil.assert"
|
|
41
|
+
local idl = require "oil.corba.idl"
|
|
42
|
+
local iridl = require("oil.corba.idl.ir").definitions
|
|
43
|
+
local Exception = require "oil.corba.giop.Exception" --[[VERBOSE]] local verbose = require "oil.verbose"
|
|
44
|
+
|
|
45
|
+
module "oil.corba.idl.Registry"
|
|
46
|
+
|
|
47
|
+
--------------------------------------------------------------------------------
|
|
48
|
+
-- Internal classes ------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
IRObject = oo.class()
|
|
51
|
+
Contained = oo.class({}, IRObject)
|
|
52
|
+
Container = oo.class({}, IRObject)
|
|
53
|
+
IDLType = oo.class({}, IRObject)
|
|
54
|
+
|
|
55
|
+
PrimitiveDef = oo.class({ __type = "IDL:omg.org/CORBA/PrimitiveDef:1.0" }, IDLType)
|
|
56
|
+
ArrayDef = oo.class({ __type = "IDL:omg.org/CORBA/ArrayDef:1.0" }, IDLType)
|
|
57
|
+
SequenceDef = oo.class({ __type = "IDL:omg.org/CORBA/SequenceDef:1.0" }, IDLType)
|
|
58
|
+
StringDef = oo.class({ __type = "IDL:omg.org/CORBA/StringDef:1.0" }, IDLType)
|
|
59
|
+
--WstringDef = oo.class({ __type = "IDL:omg.org/CORBA/WstringDef:1.0" }, IDLType)
|
|
60
|
+
--FixedDef = oo.class({ __type = "IDL:omg.org/CORBA/FixedDef:1.0" }, IDLType)
|
|
61
|
+
|
|
62
|
+
MemberDef = oo.class(nil , Contained)
|
|
63
|
+
|
|
64
|
+
AttributeDef = oo.class({ __type = "IDL:omg.org/CORBA/AttributeDef:1.0" }, MemberDef)
|
|
65
|
+
OperationDef = oo.class({ __type = "IDL:omg.org/CORBA/OperationDef:1.0" }, MemberDef)
|
|
66
|
+
ValueMemberDef = oo.class({ __type = "IDL:omg.org/CORBA/ValueMemberDef:1.0" }, MemberDef)
|
|
67
|
+
--ConstantDef = oo.class({ __type = "IDL:omg.org/CORBA/ConstantDef:1.0" }, Contained)
|
|
68
|
+
TypedefDef = oo.class({ __type = "IDL:omg.org/CORBA/TypedefDef:1.0" }, IDLType, Contained)
|
|
69
|
+
|
|
70
|
+
StructDef = oo.class({ __type = "IDL:omg.org/CORBA/StructDef:1.0" }, TypedefDef , Container)
|
|
71
|
+
UnionDef = oo.class({ __type = "IDL:omg.org/CORBA/UnionDef:1.0" }, TypedefDef , Container)
|
|
72
|
+
EnumDef = oo.class({ __type = "IDL:omg.org/CORBA/EnumDef:1.0" }, TypedefDef)
|
|
73
|
+
AliasDef = oo.class({ __type = "IDL:omg.org/CORBA/AliasDef:1.0" }, TypedefDef)
|
|
74
|
+
--NativeDef = oo.class({ __type = "IDL:omg.org/CORBA/NativeDef:1.0" }, TypedefDef)
|
|
75
|
+
ValueBoxDef = oo.class({ __type = "IDL:omg.org/CORBA/ValueBoxDef:1.0" }, TypedefDef)
|
|
76
|
+
|
|
77
|
+
Repository = oo.class({ __type = "IDL:omg.org/CORBA/Repository:1.0" }, Container)
|
|
78
|
+
ModuleDef = oo.class({ __type = "IDL:omg.org/CORBA/ModuleDef:1.0" }, Contained, Container)
|
|
79
|
+
ExceptionDef = oo.class({ __type = "IDL:omg.org/CORBA/ExceptionDef:1.0" }, Contained, Container)
|
|
80
|
+
InterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/InterfaceDef:1.0" }, IDLType, Contained, Container)
|
|
81
|
+
ValueDef = oo.class({ __type = "IDL:omg.org/CORBA/ValueDef:1.0" }, Container, Contained, IDLType)
|
|
82
|
+
|
|
83
|
+
AbstractInterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/AbstractInterfaceDef:1.0" }, InterfaceDef)
|
|
84
|
+
LocalInterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/LocalInterfaceDef:1.0" }, InterfaceDef)
|
|
85
|
+
|
|
86
|
+
--ExtAttributeDef = oo.class({ __type = "IDL:omg.org/CORBA/ExtAttributeDef:1.0" }, AttributeDef)
|
|
87
|
+
--ExtValueDef = oo.class({ __type = "IDL:omg.org/CORBA/ExtValueDef:1.0" }, ValueDef)
|
|
88
|
+
--ExtInterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/ExtInterfaceDef:1.0" }, InterfaceDef, InterfaceAttrExtension)
|
|
89
|
+
--ExtAbstractInterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/ExtAbstractInterfaceDef:1.0" }, AbstractInterfaceDef, InterfaceAttrExtension)
|
|
90
|
+
--ExtLocalInterfaceDef = oo.class({ __type = "IDL:omg.org/CORBA/ExtLocalInterfaceDef:1.0" }, LocalInterfaceDef, InterfaceAttrExtension)
|
|
91
|
+
|
|
92
|
+
ObjectRef = oo.class() -- fake class
|
|
93
|
+
|
|
94
|
+
--[[VERBOSE]] local ClassName = {}
|
|
95
|
+
--[[VERBOSE]] for name, class in pairs(_M) do
|
|
96
|
+
--[[VERBOSE]] if oo.isclass(class) then
|
|
97
|
+
--[[VERBOSE]] ClassName[class] = name
|
|
98
|
+
--[[VERBOSE]] end
|
|
99
|
+
--[[VERBOSE]] end
|
|
100
|
+
|
|
101
|
+
--------------------------------------------------------------------------------
|
|
102
|
+
--------------------------------------------------------------------------------
|
|
103
|
+
|
|
104
|
+
local Empty = setmetatable({}, { __newindex = function(_, field) verbose:debug("attempt to set table 'Empty'") end })
|
|
105
|
+
|
|
106
|
+
--------------------------------------------------------------------------------
|
|
107
|
+
--------------------------------------------------------------------------------
|
|
108
|
+
|
|
109
|
+
--
|
|
110
|
+
-- Implementation
|
|
111
|
+
--
|
|
112
|
+
|
|
113
|
+
function IRObject:__init(...)
|
|
114
|
+
self = oo.rawnew(self, ...)
|
|
115
|
+
self.references = self.references or {}
|
|
116
|
+
self.observer = self.observer or Publisher()
|
|
117
|
+
return self
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
function IRObject:watch(object, field)
|
|
121
|
+
local references = object.references
|
|
122
|
+
if references then
|
|
123
|
+
if not references[self] then
|
|
124
|
+
references[self] = {}
|
|
125
|
+
end
|
|
126
|
+
references[self][field] = true
|
|
127
|
+
end
|
|
128
|
+
return object
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
function IRObject:nowatch(object, field)
|
|
132
|
+
local references = object.references
|
|
133
|
+
if references then
|
|
134
|
+
references[self][field] = nil
|
|
135
|
+
if next(references[self]) == nil then
|
|
136
|
+
references[self] = nil
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
function IRObject:notify(...)
|
|
142
|
+
local queue = OrderedSet()
|
|
143
|
+
queue:enqueue(self)
|
|
144
|
+
repeat
|
|
145
|
+
if self.observer then self.observer:notify(...) end
|
|
146
|
+
if self.references then
|
|
147
|
+
for ref in pairs(self.references) do queue:enqueue(ref) end
|
|
148
|
+
end
|
|
149
|
+
self = queue[self]
|
|
150
|
+
until self == nil
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
--
|
|
154
|
+
-- Operations
|
|
155
|
+
--
|
|
156
|
+
function IRObject:destroy()
|
|
157
|
+
if self.observer == nil or next(self.references) ~= nil then
|
|
158
|
+
assert.exception{ "BAD_INV_ORDER", minor_error_code = 1,
|
|
159
|
+
message = "attempt to destroy IR definition in use",
|
|
160
|
+
reason = "irdestroy",
|
|
161
|
+
object = self,
|
|
162
|
+
}
|
|
163
|
+
end
|
|
164
|
+
if self.defined_in then
|
|
165
|
+
self.defined_in.definitions:_remove(self)
|
|
166
|
+
end
|
|
167
|
+
self.containing_repository.definition_map[self.repID] = nil
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
--------------------------------------------------------------------------------
|
|
171
|
+
|
|
172
|
+
--
|
|
173
|
+
-- Implementation
|
|
174
|
+
--
|
|
175
|
+
Contained.version = "1.0"
|
|
176
|
+
Contained.definition_fields = {
|
|
177
|
+
defined_in = { type = Container, optional = true },
|
|
178
|
+
repID = { type = "string" , optional = true },
|
|
179
|
+
version = { type = "string" , optional = true },
|
|
180
|
+
name = { type = "string" },
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function Contained:update(new)
|
|
184
|
+
new.defined_in = new.defined_in or self.containing_repository
|
|
185
|
+
if new.defined_in.containing_repository ~= self.containing_repository then
|
|
186
|
+
assert.illegal(defined_in,
|
|
187
|
+
"container, repository does not match",
|
|
188
|
+
"BAD_PARAM")
|
|
189
|
+
end
|
|
190
|
+
if new.repID then
|
|
191
|
+
self:_set_id(new.repID)
|
|
192
|
+
end
|
|
193
|
+
self:move(new.defined_in, new.name, new.version)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
local RepIDFormat = "IDL:%s:%s"
|
|
197
|
+
function Contained:updatename()
|
|
198
|
+
local old = self.absolute_name
|
|
199
|
+
self.absolute_name = self.defined_in.absolute_name.."::"..self.name
|
|
200
|
+
if not self.repID then
|
|
201
|
+
self:_set_id(RepIDFormat:format(self.absolute_name:gsub("::", "/"):sub(2),
|
|
202
|
+
self.version))
|
|
203
|
+
end
|
|
204
|
+
if self.definitions then
|
|
205
|
+
for _, contained in ipairs(self.definitions) do
|
|
206
|
+
contained:updatename()
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
if self.absolute_name ~= old then self:notify("absolute_name") end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
--
|
|
213
|
+
-- Attributes
|
|
214
|
+
--
|
|
215
|
+
function Contained:_set_id(id)
|
|
216
|
+
local definitions = self.containing_repository.definition_map
|
|
217
|
+
if definitions[id] and definitions[id] ~= self then
|
|
218
|
+
assert.illegal(id, "repository ID, already exists", "BAD_PARAM", 2)
|
|
219
|
+
end
|
|
220
|
+
if self.repID then
|
|
221
|
+
definitions[self.repID] = nil
|
|
222
|
+
end
|
|
223
|
+
local old = self.repID
|
|
224
|
+
self.repID = id
|
|
225
|
+
self.id = id
|
|
226
|
+
definitions[id] = self
|
|
227
|
+
if self.repID ~= old then self:notify("repID") end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
function Contained:_set_name(name)
|
|
231
|
+
local contents = self.defined_in.definitions
|
|
232
|
+
if contents[name] and contents[name] ~= self then
|
|
233
|
+
assert.illegal(name, "contained name, name clash", "BAD_PARAM", 1)
|
|
234
|
+
end
|
|
235
|
+
local old = self.name
|
|
236
|
+
contents:_remove(self)
|
|
237
|
+
self.name = name
|
|
238
|
+
contents:_add(self)
|
|
239
|
+
self:updatename()
|
|
240
|
+
if self.name ~= old then self:notify("name") end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
--
|
|
244
|
+
-- Operations
|
|
245
|
+
--
|
|
246
|
+
local ContainedDescription = iridl.Contained.definitions.Description
|
|
247
|
+
function Contained:describe()
|
|
248
|
+
local description = self:get_description()
|
|
249
|
+
description.name = self.name
|
|
250
|
+
description.id = self.repID
|
|
251
|
+
description.defined_in = self.defined_in.repID
|
|
252
|
+
description.version = self.version
|
|
253
|
+
return setmetatable({
|
|
254
|
+
kind = self.def_kind,
|
|
255
|
+
value = description,
|
|
256
|
+
}, ContainedDescription)
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
--function Contained:within() -- TODO:[maia] This op is described in specs but
|
|
260
|
+
--end -- is not listed in IR IDL!
|
|
261
|
+
|
|
262
|
+
function Contained:move(new_container, new_name, new_version)
|
|
263
|
+
if new_container.containing_repository ~= self.containing_repository then
|
|
264
|
+
assert.illegal(new_container, "container", "BAD_PARAM", 4)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
local new = new_container.definitions
|
|
268
|
+
if new[new_name] and new[new_name] ~= self then
|
|
269
|
+
assert.illegal(new_name, "contained name, already exists", "BAD_PARAM", 3)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
if self.defined_in then
|
|
273
|
+
self.defined_in.definitions:_remove(self)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
local old = self.defined_in
|
|
277
|
+
self.defined_in = new_container
|
|
278
|
+
self.version = new_version
|
|
279
|
+
self:_set_name(new_name)
|
|
280
|
+
if self.defined_in ~= old then
|
|
281
|
+
if old then old:notify("contents") end
|
|
282
|
+
self.defined_in:notify("contents")
|
|
283
|
+
self:notify("defined_in")
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
--------------------------------------------------------------------------------
|
|
288
|
+
|
|
289
|
+
--
|
|
290
|
+
-- Implementation
|
|
291
|
+
--
|
|
292
|
+
function Container:update()
|
|
293
|
+
if not self.expandable then self.definitions = nil end
|
|
294
|
+
idl.Container(self)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
local function isingle(self, ended)
|
|
298
|
+
if not ended then return self end
|
|
299
|
+
end
|
|
300
|
+
function Container:hierarchy()
|
|
301
|
+
return isingle, self
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
--
|
|
305
|
+
-- Read interface
|
|
306
|
+
--
|
|
307
|
+
|
|
308
|
+
function Container:lookup(search_name)
|
|
309
|
+
local scope
|
|
310
|
+
if search_name:find("^::") then
|
|
311
|
+
scope = self.containing_repository
|
|
312
|
+
else
|
|
313
|
+
scope = self
|
|
314
|
+
search_name = "::"..search_name
|
|
315
|
+
end
|
|
316
|
+
for nextscope in string.gmatch(search_name, "::([^:]+)") do
|
|
317
|
+
if not scope or not scope.definitions then return nil end
|
|
318
|
+
scope = scope.definitions[nextscope]
|
|
319
|
+
end
|
|
320
|
+
return scope
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
function Container:contents(limit_type, exclude_inherited, max_returned_objs)
|
|
324
|
+
max_returned_objs = max_returned_objs or -1
|
|
325
|
+
local contents = {}
|
|
326
|
+
for container in self:hierarchy() do
|
|
327
|
+
for _, contained in ipairs(container.definitions) do
|
|
328
|
+
if limit_type == "dk_all" or contained.def_kind == limit_type then
|
|
329
|
+
if max_returned_objs == 0 then break end
|
|
330
|
+
contents[#contents+1] = contained
|
|
331
|
+
max_returned_objs = max_returned_objs - 1
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
if exclude_inherited then break end
|
|
335
|
+
end
|
|
336
|
+
return contents, max_returned_objs
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
function Container:lookup_name(search_name, levels_to_search,
|
|
340
|
+
limit_type, exclude_inherited)
|
|
341
|
+
local results = {}
|
|
342
|
+
for container in self:hierarchy() do
|
|
343
|
+
for _, contained in ipairs(container.definitions) do
|
|
344
|
+
if
|
|
345
|
+
contained.name == search_name and
|
|
346
|
+
(limit_type == "dk_all" or contained.def_kind == limit_type)
|
|
347
|
+
then
|
|
348
|
+
results[#results+1] = contained
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
if exclude_inherited then break end
|
|
352
|
+
end
|
|
353
|
+
return results
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
local ContainerDescription = iridl.Container.definitions.Description
|
|
357
|
+
function Container:describe_contents(limit_type, exclude_inherited,
|
|
358
|
+
max_returned_objs)
|
|
359
|
+
local contents = self:contents(limit_type,
|
|
360
|
+
exclude_inherited,
|
|
361
|
+
max_returned_objs)
|
|
362
|
+
for index, content in ipairs(contents) do
|
|
363
|
+
contents[index] = setmetatable({
|
|
364
|
+
contained_object = content,
|
|
365
|
+
kind = content.def_kind,
|
|
366
|
+
value = content:describe(),
|
|
367
|
+
}, ContainerDescription)
|
|
368
|
+
end
|
|
369
|
+
return contents
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
--
|
|
373
|
+
-- Write interface
|
|
374
|
+
--
|
|
375
|
+
|
|
376
|
+
function Container:create_module(id, name, version)
|
|
377
|
+
local created = ModuleDef{ containing_repository=self.containing_repository }
|
|
378
|
+
created:update{
|
|
379
|
+
defined_in = self,
|
|
380
|
+
|
|
381
|
+
repID = id,
|
|
382
|
+
name = name,
|
|
383
|
+
version = version,
|
|
384
|
+
}
|
|
385
|
+
return created
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
--function Container:create_constant(id, name, version, type, value)
|
|
389
|
+
--end
|
|
390
|
+
|
|
391
|
+
function Container:create_struct(id, name, version, members)
|
|
392
|
+
local created = StructDef{ containing_repository=self.containing_repository }
|
|
393
|
+
created:update{
|
|
394
|
+
defined_in = self,
|
|
395
|
+
|
|
396
|
+
repID = id,
|
|
397
|
+
name = name,
|
|
398
|
+
version = version,
|
|
399
|
+
|
|
400
|
+
fields = members,
|
|
401
|
+
}
|
|
402
|
+
return created
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
function Container:create_union(id, name, version, discriminator_type, members)
|
|
406
|
+
local created = UnionDef{ containing_repository=self.containing_repository }
|
|
407
|
+
created:update{
|
|
408
|
+
defined_in = self,
|
|
409
|
+
|
|
410
|
+
repID = id,
|
|
411
|
+
name = name,
|
|
412
|
+
version = version,
|
|
413
|
+
|
|
414
|
+
switch = discriminator_type.type,
|
|
415
|
+
members = members,
|
|
416
|
+
}
|
|
417
|
+
return created
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
function Container:create_enum(id, name, version, members)
|
|
421
|
+
local created = EnumDef{ containing_repository=self.containing_repository }
|
|
422
|
+
created:update{
|
|
423
|
+
defined_in = self,
|
|
424
|
+
|
|
425
|
+
repID = id,
|
|
426
|
+
name = name,
|
|
427
|
+
version = version,
|
|
428
|
+
|
|
429
|
+
enumvalues = members,
|
|
430
|
+
}
|
|
431
|
+
return created
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
function Container:create_alias(id, name, version, original_type)
|
|
435
|
+
local created = AliasDef{ containing_repository=self.containing_repository }
|
|
436
|
+
created:update{
|
|
437
|
+
defined_in = self,
|
|
438
|
+
|
|
439
|
+
repID = id,
|
|
440
|
+
name = name,
|
|
441
|
+
version = version,
|
|
442
|
+
|
|
443
|
+
original_type = original_type.type
|
|
444
|
+
}
|
|
445
|
+
return created
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
function Container:create_interface(id, name, version, base_interfaces)
|
|
449
|
+
local created = InterfaceDef{ containing_repository=self.containing_repository }
|
|
450
|
+
created:update{
|
|
451
|
+
defined_in = self,
|
|
452
|
+
|
|
453
|
+
repID = id,
|
|
454
|
+
name = name,
|
|
455
|
+
version = version,
|
|
456
|
+
|
|
457
|
+
base_interfaces = base_interfaces,
|
|
458
|
+
}
|
|
459
|
+
return created
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
function Container:create_value(id, name, version,
|
|
463
|
+
is_custom,
|
|
464
|
+
is_abstract,
|
|
465
|
+
base_value,
|
|
466
|
+
is_truncatable,
|
|
467
|
+
abstract_base_values,
|
|
468
|
+
supported_interfaces,
|
|
469
|
+
initializers)
|
|
470
|
+
local created = ValueDef{ containing_repository=self.containing_repository }
|
|
471
|
+
created:update{
|
|
472
|
+
defined_in = self,
|
|
473
|
+
|
|
474
|
+
repID = id,
|
|
475
|
+
name = name,
|
|
476
|
+
version = version,
|
|
477
|
+
|
|
478
|
+
is_custom = is_custom,
|
|
479
|
+
is_abstract = is_abstract,
|
|
480
|
+
is_truncatable = is_truncatable,
|
|
481
|
+
|
|
482
|
+
base_value = base_value,
|
|
483
|
+
abstract_base_values = abstract_base_values,
|
|
484
|
+
supported_interfaces = supported_interfaces,
|
|
485
|
+
|
|
486
|
+
initializers = initializers,
|
|
487
|
+
}
|
|
488
|
+
return created
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
function Container:create_value_box(id, name, version, original_type)
|
|
492
|
+
local created = ValueBoxDef{ containing_repository=self.containing_repository }
|
|
493
|
+
created:update{
|
|
494
|
+
defined_in = self,
|
|
495
|
+
|
|
496
|
+
repID = id,
|
|
497
|
+
name = name,
|
|
498
|
+
version = version,
|
|
499
|
+
|
|
500
|
+
original_type = original_type.type
|
|
501
|
+
}
|
|
502
|
+
return created
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
function Container:create_exception(id, name, version, members)
|
|
506
|
+
local created = ExceptionDef{ containing_repository=self.containing_repository }
|
|
507
|
+
created:update{
|
|
508
|
+
defined_in = self,
|
|
509
|
+
|
|
510
|
+
repID = id,
|
|
511
|
+
name = name,
|
|
512
|
+
version = version,
|
|
513
|
+
|
|
514
|
+
members = members,
|
|
515
|
+
}
|
|
516
|
+
return created
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
--function Container:create_native(id, name, version)
|
|
520
|
+
--end
|
|
521
|
+
|
|
522
|
+
function Container:create_abstract_interface(id, name, version, base_interfaces)
|
|
523
|
+
local created = AbstractInterfaceDef{ containing_repository=self.containing_repository }
|
|
524
|
+
created:update{
|
|
525
|
+
defined_in = self,
|
|
526
|
+
|
|
527
|
+
repID = id,
|
|
528
|
+
name = name,
|
|
529
|
+
version = version,
|
|
530
|
+
|
|
531
|
+
base_interfaces = base_interfaces,
|
|
532
|
+
}
|
|
533
|
+
return created
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
function Container:create_local_interface(id, name, version, base_interfaces)
|
|
537
|
+
local created = LocalInterfaceDef{ containing_repository=self.containing_repository }
|
|
538
|
+
created:update{
|
|
539
|
+
defined_in = self,
|
|
540
|
+
|
|
541
|
+
repID = id,
|
|
542
|
+
name = name,
|
|
543
|
+
version = version,
|
|
544
|
+
|
|
545
|
+
base_interfaces = base_interfaces,
|
|
546
|
+
}
|
|
547
|
+
return created
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
--function Container:create_ext_value(id, name, version,
|
|
551
|
+
-- is_custom,
|
|
552
|
+
-- is_abstract,
|
|
553
|
+
-- base_value,
|
|
554
|
+
-- is_truncatable,
|
|
555
|
+
-- abstract_base_values,
|
|
556
|
+
-- supported_interfaces,
|
|
557
|
+
-- initializers)
|
|
558
|
+
--end
|
|
559
|
+
|
|
560
|
+
--------------------------------------------------------------------------------
|
|
561
|
+
|
|
562
|
+
function IDLType:update()
|
|
563
|
+
self.type = self
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
--------------------------------------------------------------------------------
|
|
567
|
+
|
|
568
|
+
local PrimitiveTypes = {
|
|
569
|
+
pk_null = idl.null,
|
|
570
|
+
pk_void = idl.void,
|
|
571
|
+
pk_short = idl.short,
|
|
572
|
+
pk_long = idl.long,
|
|
573
|
+
pk_longlong = idl.longlong,
|
|
574
|
+
pk_ushort = idl.ushort,
|
|
575
|
+
pk_ulong = idl.ulong,
|
|
576
|
+
pk_ulonglong = idl.ulonglong,
|
|
577
|
+
pk_float = idl.float,
|
|
578
|
+
pk_double = idl.double,
|
|
579
|
+
pk_longdouble = idl.double,
|
|
580
|
+
pk_boolean = idl.boolean,
|
|
581
|
+
pk_char = idl.char,
|
|
582
|
+
pk_octet = idl.octet,
|
|
583
|
+
pk_any = idl.any,
|
|
584
|
+
pk_TypeCode = idl.TypeCode,
|
|
585
|
+
pk_string = idl.string,
|
|
586
|
+
pk_objref = idl.object,
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
PrimitiveDef.def_kind = "dk_Primitive"
|
|
590
|
+
|
|
591
|
+
function PrimitiveDef:__init(object)
|
|
592
|
+
self = oo.rawnew(self, object)
|
|
593
|
+
IDLType.update(self)
|
|
594
|
+
return self
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
for kind, type in pairs(PrimitiveTypes) do
|
|
598
|
+
PrimitiveDef(type).kind = kind
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
--------------------------------------------------------------------------------
|
|
602
|
+
|
|
603
|
+
function ObjectRef:__init(object, registry)
|
|
604
|
+
if object.repID ~= PrimitiveTypes.pk_objref.repID then
|
|
605
|
+
return registry.repository:lookup_id(object.repID) or
|
|
606
|
+
assert.illegal(new, "Object type, use interface definition instead")
|
|
607
|
+
end
|
|
608
|
+
return PrimitiveTypes.pk_objref
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
--------------------------------------------------------------------------------
|
|
612
|
+
|
|
613
|
+
ArrayDef._type = "array"
|
|
614
|
+
ArrayDef.def_kind = "dk_Array"
|
|
615
|
+
ArrayDef.definition_fields = {
|
|
616
|
+
length = { type = "number" },
|
|
617
|
+
elementtype = { type = IDLType },
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
function ArrayDef:update(new, registry)
|
|
621
|
+
self.length = new.length
|
|
622
|
+
self:_set_element_type_def(new.elementtype, registry)
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
function ArrayDef:_get_element_type() return self.elementtype end
|
|
626
|
+
|
|
627
|
+
function ArrayDef:_set_element_type_def(type_def, registry)
|
|
628
|
+
local old = self.elementtype
|
|
629
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
630
|
+
if self.element_type_def then
|
|
631
|
+
self:nowatch(self.element_type_def, "elementtype")
|
|
632
|
+
end
|
|
633
|
+
self.element_type_def = type_def
|
|
634
|
+
self.elementtype = type_def.type
|
|
635
|
+
self:watch(self.element_type_def, "elementtype")
|
|
636
|
+
if self.elementtype ~= old then self:notify("elementtype") end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
--------------------------------------------------------------------------------
|
|
640
|
+
|
|
641
|
+
SequenceDef._type = "sequence"
|
|
642
|
+
SequenceDef.def_kind = "dk_Sequence"
|
|
643
|
+
SequenceDef.maxlength = 0
|
|
644
|
+
SequenceDef.definition_fields = {
|
|
645
|
+
maxlength = { type = "number", optional = true },
|
|
646
|
+
elementtype = { type = IDLType },
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
function SequenceDef:update(new, registry)
|
|
650
|
+
self.maxlength = new.maxlength
|
|
651
|
+
self:_set_element_type_def(new.elementtype, registry)
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
SequenceDef._get_element_type = ArrayDef._get_element_type
|
|
655
|
+
SequenceDef._set_element_type_def = ArrayDef._set_element_type_def
|
|
656
|
+
function SequenceDef:_set_bound(value) self.maxlength = value end
|
|
657
|
+
function SequenceDef:_get_bound() return self.maxlength end
|
|
658
|
+
|
|
659
|
+
--------------------------------------------------------------------------------
|
|
660
|
+
|
|
661
|
+
StringDef._type = "string"
|
|
662
|
+
StringDef.def_kind = "dk_String"
|
|
663
|
+
StringDef.maxlength = 0
|
|
664
|
+
StringDef.definition_fields = {
|
|
665
|
+
maxlength = { type = "number", optional = true },
|
|
666
|
+
}
|
|
667
|
+
StringDef._set_bound = SequenceDef._set_bound
|
|
668
|
+
StringDef._get_bound = SequenceDef._get_bound
|
|
669
|
+
|
|
670
|
+
function StringDef:update(new)
|
|
671
|
+
self.maxlength = new.maxlength
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
--------------------------------------------------------------------------------
|
|
675
|
+
|
|
676
|
+
function MemberDef:move(new_container, new_name, new_version)
|
|
677
|
+
local name = self.name
|
|
678
|
+
local container = self.defined_in
|
|
679
|
+
Contained.move(self, new_container, new_name, new_version)
|
|
680
|
+
if container then container:nowatch(self, name) end
|
|
681
|
+
self.defined_in:watch(self, self.name)
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
--------------------------------------------------------------------------------
|
|
685
|
+
|
|
686
|
+
AttributeDef._type = "attribute"
|
|
687
|
+
AttributeDef.def_kind = "dk_Attribute"
|
|
688
|
+
AttributeDef.definition_fields = {
|
|
689
|
+
defined_in = { type = Container, optional = true },
|
|
690
|
+
readonly = { type = "boolean", optional = true },
|
|
691
|
+
type = { type = IDLType },
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
function AttributeDef:update(new, registry)
|
|
695
|
+
self:_set_mode(new.readonly and "ATTR_READONLY" or "ATTR_NORMAL")
|
|
696
|
+
self:_set_type_def(new.type, registry)
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
function AttributeDef:_set_mode(value)
|
|
700
|
+
local old = self.readonly
|
|
701
|
+
self.mode = value
|
|
702
|
+
self.readonly = (value == "ATTR_READONLY")
|
|
703
|
+
if self.readonly ~= old then self:notify("readonly") end
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
function AttributeDef:_set_type_def(type_def, registry)
|
|
707
|
+
local old = self.type
|
|
708
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
709
|
+
if self.type_def then
|
|
710
|
+
self:nowatch(self.type_def, "type")
|
|
711
|
+
end
|
|
712
|
+
self.type_def = type_def
|
|
713
|
+
self.type = type_def.type
|
|
714
|
+
self:watch(self.type_def, "type")
|
|
715
|
+
if self.type ~= old then self:notify("type") end
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
function AttributeDef:get_description()
|
|
719
|
+
return setmetatable({
|
|
720
|
+
type = self.type,
|
|
721
|
+
mode = self.mode,
|
|
722
|
+
}, iridl.AttributeDescription)
|
|
723
|
+
end
|
|
724
|
+
|
|
725
|
+
--------------------------------------------------------------------------------
|
|
726
|
+
|
|
727
|
+
OperationDef._type = "operation"
|
|
728
|
+
OperationDef.def_kind = "dk_Operation"
|
|
729
|
+
OperationDef.contexts = Empty
|
|
730
|
+
OperationDef.parameters = Empty
|
|
731
|
+
OperationDef.inputs = Empty
|
|
732
|
+
OperationDef.outputs = Empty
|
|
733
|
+
OperationDef.exceptions = Empty
|
|
734
|
+
OperationDef.result = idl.void
|
|
735
|
+
OperationDef.result_def = idl.void
|
|
736
|
+
OperationDef.definition_fields = {
|
|
737
|
+
defined_in = { type = Container , optional = true },
|
|
738
|
+
oneway = { type = "boolean" , optional = true },
|
|
739
|
+
contexts = { type = "table" , optional = true },
|
|
740
|
+
exceptions = { type = ExceptionDef, optional = true, list = true },
|
|
741
|
+
result = { type = IDLType , optional = true },
|
|
742
|
+
parameters = { type = {
|
|
743
|
+
name = { type = "string" },
|
|
744
|
+
type = { type = IDLType },
|
|
745
|
+
mode = { type = "string", optional = true },
|
|
746
|
+
}, optional = true, list = true },
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
function OperationDef:update(new, registry)
|
|
750
|
+
self:_set_mode(new.oneway and "OP_ONEWAY" or "OP_NORMAL")
|
|
751
|
+
if new.exceptions then self:_set_exceptions(new.exceptions, registry) end
|
|
752
|
+
if new.result then self:_set_result_def(new.result, registry) end
|
|
753
|
+
if new.parameters then self:_set_params(new.parameters, registry) end
|
|
754
|
+
self.contexts = new.contexts
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
function OperationDef:_set_mode(value)
|
|
758
|
+
local old = self.oneway
|
|
759
|
+
self.mode = value
|
|
760
|
+
self.oneway = (value == "OP_ONEWAY")
|
|
761
|
+
if self.oneway ~= old then self:notify("oneway") end
|
|
762
|
+
end
|
|
763
|
+
|
|
764
|
+
function OperationDef:_set_result_def(type_def, registry)
|
|
765
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
766
|
+
local current = self.result
|
|
767
|
+
local newval = type_def.type
|
|
768
|
+
if current ~= newval then
|
|
769
|
+
if self.result_def then
|
|
770
|
+
self:nowatch(self.result_def, "result")
|
|
771
|
+
end
|
|
772
|
+
self.result_def = type_def
|
|
773
|
+
self.result = newval
|
|
774
|
+
self:watch(self.result_def, "result")
|
|
775
|
+
if current == idl.void then
|
|
776
|
+
if self.outputs == Empty then
|
|
777
|
+
self.outputs = { newval }
|
|
778
|
+
else
|
|
779
|
+
self.outputs = { newval, unpack(self.outputs) }
|
|
780
|
+
end
|
|
781
|
+
elseif newval == idl.void then
|
|
782
|
+
self.outputs = { unpack(self.outputs, 2) }
|
|
783
|
+
else
|
|
784
|
+
self.outputs = { newval, unpack(self.outputs, 2) }
|
|
785
|
+
end
|
|
786
|
+
self:notify("result")
|
|
787
|
+
end
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
function OperationDef:_get_params() return self.parameters end
|
|
791
|
+
function OperationDef:_set_params(parameters, registry)
|
|
792
|
+
local inputs = {}
|
|
793
|
+
local outputs = {}
|
|
794
|
+
if self.result ~= idl.void then
|
|
795
|
+
outputs[#outputs+1] = self.result
|
|
796
|
+
end
|
|
797
|
+
for index, param in ipairs(parameters) do
|
|
798
|
+
param.type_def = self.containing_repository:put(param.type, registry)
|
|
799
|
+
param.type = param.type_def.type
|
|
800
|
+
param.mode = param.mode or "PARAM_IN"
|
|
801
|
+
if param.mode == "PARAM_IN" then
|
|
802
|
+
inputs[#inputs+1] = param.type
|
|
803
|
+
elseif param.mode == "PARAM_OUT" then
|
|
804
|
+
outputs[#outputs+1] = param.type
|
|
805
|
+
elseif param.mode == "PARAM_INOUT" then
|
|
806
|
+
inputs[#inputs+1] = param.type
|
|
807
|
+
outputs[#outputs+1] = param.type
|
|
808
|
+
else
|
|
809
|
+
assert.illegal(mode, "operation parameter mode")
|
|
810
|
+
end
|
|
811
|
+
end
|
|
812
|
+
for index, param in ipairs(self.parameters) do
|
|
813
|
+
self:nowatch(param.type_def, "parameter "..index)
|
|
814
|
+
end
|
|
815
|
+
self.parameters = parameters
|
|
816
|
+
self.inputs = inputs
|
|
817
|
+
self.outputs = outputs
|
|
818
|
+
for index, param in ipairs(self.parameters) do
|
|
819
|
+
self:watch(param.type_def, "parameter "..index)
|
|
820
|
+
end
|
|
821
|
+
self:notify("parameters")
|
|
822
|
+
end
|
|
823
|
+
|
|
824
|
+
function OperationDef:_set_exceptions(exceptions, registry)
|
|
825
|
+
for index, except in ipairs(exceptions) do
|
|
826
|
+
except = self.containing_repository:put(except:get_description().type, registry)
|
|
827
|
+
exceptions[index] = except
|
|
828
|
+
exceptions[except.repID] = except
|
|
829
|
+
end
|
|
830
|
+
for index, except in ipairs(self.exceptions) do
|
|
831
|
+
self:nowatch(except, "exception "..index)
|
|
832
|
+
end
|
|
833
|
+
self.exceptions = exceptions
|
|
834
|
+
for index, except in ipairs(self.exceptions) do
|
|
835
|
+
self:watch(except, "exception "..index)
|
|
836
|
+
end
|
|
837
|
+
self:notify("exceptions")
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
function OperationDef:get_description()
|
|
841
|
+
local exceptions = {}
|
|
842
|
+
for _, except in ipairs(self.exceptions) do
|
|
843
|
+
exceptions[#exceptions+1] = except:describe().value
|
|
844
|
+
end
|
|
845
|
+
return setmetatable({
|
|
846
|
+
result = self.result,
|
|
847
|
+
mode = self.mode,
|
|
848
|
+
contexts = self.contexts,
|
|
849
|
+
parameters = self.parameters,
|
|
850
|
+
exceptions = exceptions,
|
|
851
|
+
}, iridl.OperationDescription)
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
--------------------------------------------------------------------------------
|
|
855
|
+
|
|
856
|
+
ValueMemberDef._type = "valuemember"
|
|
857
|
+
ValueMemberDef.def_kind = "dk_ValueMember"
|
|
858
|
+
ValueMemberDef.access = 0
|
|
859
|
+
ValueMemberDef.definition_fields = {
|
|
860
|
+
defined_in = { type = ValueDef, optional = true },
|
|
861
|
+
type = { type = IDLType },
|
|
862
|
+
access = { type = "number" },
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
function ValueMemberDef:update(new, registry)
|
|
866
|
+
self.access = new.access
|
|
867
|
+
self:_set_type_def(new.type, registry)
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
function ValueMemberDef:move(new_container, new_name, new_version)
|
|
871
|
+
local old_container = self.defined_in
|
|
872
|
+
if old_container and old_container ~= self.containing_repository then
|
|
873
|
+
local members = old_container.members
|
|
874
|
+
for index, member in ipairs(members) do
|
|
875
|
+
if member == self then
|
|
876
|
+
table.remove(members, index)
|
|
877
|
+
break
|
|
878
|
+
end
|
|
879
|
+
end
|
|
880
|
+
end
|
|
881
|
+
MemberDef.move(self, new_container, new_name, new_version)
|
|
882
|
+
if new_container._type == "valuetype" then
|
|
883
|
+
local members = new_container.members
|
|
884
|
+
members[#members+1] = self
|
|
885
|
+
elseif new_container ~= self.containing_repository then
|
|
886
|
+
assert.illegal(new_container, "ValueMemberDef container", "BAD_PARAM", 4)
|
|
887
|
+
end
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
function ValueMemberDef:get_description()
|
|
891
|
+
return setmetatable({
|
|
892
|
+
type = self.type,
|
|
893
|
+
type_def = self.type_def,
|
|
894
|
+
access = self.access,
|
|
895
|
+
}, iridl.ValueMember)
|
|
896
|
+
end
|
|
897
|
+
|
|
898
|
+
function ValueMemberDef:_set_type_def(type_def, registry)
|
|
899
|
+
local old = self.type
|
|
900
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
901
|
+
self.type_def = type_def
|
|
902
|
+
self.type = type_def.type
|
|
903
|
+
if self.type ~= old then self:notify("type") end
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
--------------------------------------------------------------------------------
|
|
907
|
+
|
|
908
|
+
TypedefDef._type = "typedef"
|
|
909
|
+
TypedefDef.def_kind = "dk_Typedef"
|
|
910
|
+
|
|
911
|
+
function TypedefDef:get_description()
|
|
912
|
+
return setmetatable({ type = self.type }, iridl.TypeDescription)
|
|
913
|
+
end
|
|
914
|
+
|
|
915
|
+
--------------------------------------------------------------------------------
|
|
916
|
+
|
|
917
|
+
StructDef._type = "struct"
|
|
918
|
+
StructDef.def_kind = "dk_Struct"
|
|
919
|
+
StructDef.fields = Empty
|
|
920
|
+
StructDef.definition_fields = {
|
|
921
|
+
fields = {
|
|
922
|
+
type = {
|
|
923
|
+
name = { type = "string" },
|
|
924
|
+
type = { type = IDLType },
|
|
925
|
+
},
|
|
926
|
+
optional = true,
|
|
927
|
+
list = true,
|
|
928
|
+
},
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
function StructDef:update(new, registry)
|
|
932
|
+
if new.fields then self:_set_members(new.fields, registry) end
|
|
933
|
+
end
|
|
934
|
+
|
|
935
|
+
function StructDef:_get_members() return self.fields end
|
|
936
|
+
function StructDef:_set_members(members, registry)
|
|
937
|
+
for index, field in ipairs(members) do
|
|
938
|
+
field.type_def = self.containing_repository:put(field.type, registry)
|
|
939
|
+
field.type = field.type_def.type
|
|
940
|
+
end
|
|
941
|
+
for index, field in ipairs(self.fields) do
|
|
942
|
+
self:nowatch(field.type_def, "field "..field.name)
|
|
943
|
+
end
|
|
944
|
+
self.fields = members
|
|
945
|
+
for index, field in ipairs(self.fields) do
|
|
946
|
+
self:watch(field.type_def, "field "..field.name)
|
|
947
|
+
end
|
|
948
|
+
self:notify("fields")
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
--------------------------------------------------------------------------------
|
|
952
|
+
|
|
953
|
+
UnionDef._type = "union"
|
|
954
|
+
UnionDef.def_kind = "dk_Union"
|
|
955
|
+
UnionDef.default = -1
|
|
956
|
+
UnionDef.options = Empty
|
|
957
|
+
UnionDef.members = Empty
|
|
958
|
+
UnionDef.definition_fields = {
|
|
959
|
+
switch = { type = IDLType },
|
|
960
|
+
default = { type = "number", optional = true },
|
|
961
|
+
options = { type = {
|
|
962
|
+
label = { type = nil },
|
|
963
|
+
name = { type = "string" },
|
|
964
|
+
type = { type = IDLType },
|
|
965
|
+
}, optional = true, list = true },
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
function UnionDef:update(new, registry)
|
|
969
|
+
self:_set_discriminator_type_def(new.switch, registry)
|
|
970
|
+
|
|
971
|
+
if new.options then
|
|
972
|
+
for _, option in ipairs(new.options) do
|
|
973
|
+
option.label = {
|
|
974
|
+
_anyval = option.label,
|
|
975
|
+
_anytype = self.switch,
|
|
976
|
+
}
|
|
977
|
+
end
|
|
978
|
+
self:_set_members(new.options)
|
|
979
|
+
end
|
|
980
|
+
|
|
981
|
+
function self.__index(union, field)
|
|
982
|
+
if rawget(union, "_switch") == self.selector[field] then
|
|
983
|
+
return rawget(union, "_value")
|
|
984
|
+
end
|
|
985
|
+
end
|
|
986
|
+
function self.__newindex(union, field, value)
|
|
987
|
+
local label = self.selector[field]
|
|
988
|
+
if label then
|
|
989
|
+
rawset(union, "_switch", label)
|
|
990
|
+
rawset(union, "_value", value)
|
|
991
|
+
rawset(union, "_field", field)
|
|
992
|
+
end
|
|
993
|
+
end
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
function UnionDef:_get_discriminator_type() return self.switch end
|
|
997
|
+
|
|
998
|
+
function UnionDef:_set_discriminator_type_def(type_def, registry)
|
|
999
|
+
local old = self.switch
|
|
1000
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
1001
|
+
if self.discriminator_type_def then
|
|
1002
|
+
self:nowatch(self.discriminator_type_def, "switch")
|
|
1003
|
+
end
|
|
1004
|
+
self.discriminator_type_def = type_def
|
|
1005
|
+
self.switch = type_def.type
|
|
1006
|
+
self:watch(self.discriminator_type_def, "switch")
|
|
1007
|
+
if self.switch ~= old then self:notify("switch") end
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
function UnionDef:_set_members(members, registry)
|
|
1011
|
+
local options = {}
|
|
1012
|
+
local selector = {}
|
|
1013
|
+
local selection = {}
|
|
1014
|
+
for index, member in ipairs(members) do
|
|
1015
|
+
member.type_def = self.containing_repository:put(member.type, registry)
|
|
1016
|
+
member.type = member.type_def.type
|
|
1017
|
+
local option = {
|
|
1018
|
+
label = member.label._anyval,
|
|
1019
|
+
name = member.name,
|
|
1020
|
+
type = member.type,
|
|
1021
|
+
type_def = member.type_def,
|
|
1022
|
+
}
|
|
1023
|
+
options[index] = option
|
|
1024
|
+
selector[option.name] = option.label
|
|
1025
|
+
selection[option.label] = option
|
|
1026
|
+
end
|
|
1027
|
+
for index, member in ipairs(self.members) do
|
|
1028
|
+
self:nowatch(member.type_def, "option "..index)
|
|
1029
|
+
end
|
|
1030
|
+
self.options = options
|
|
1031
|
+
self.selector = selector
|
|
1032
|
+
self.selection = selection
|
|
1033
|
+
self.members = members
|
|
1034
|
+
for index, member in ipairs(self.members) do
|
|
1035
|
+
self:watch(member.type_def, "option "..index)
|
|
1036
|
+
end
|
|
1037
|
+
self:notify("options")
|
|
1038
|
+
end
|
|
1039
|
+
|
|
1040
|
+
--------------------------------------------------------------------------------
|
|
1041
|
+
|
|
1042
|
+
EnumDef._type = "enum"
|
|
1043
|
+
EnumDef.def_kind = "dk_Enum"
|
|
1044
|
+
EnumDef.definition_fields = {
|
|
1045
|
+
enumvalues = { type = "string", list = true },
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
function EnumDef:update(new)
|
|
1049
|
+
self:_set_members(new.enumvalues)
|
|
1050
|
+
end
|
|
1051
|
+
|
|
1052
|
+
function EnumDef:_get_members() return self.enumvalues end
|
|
1053
|
+
function EnumDef:_set_members(members)
|
|
1054
|
+
local labelvalue = {}
|
|
1055
|
+
for index, label in ipairs(members) do
|
|
1056
|
+
labelvalue[label] = index - 1
|
|
1057
|
+
end
|
|
1058
|
+
self.enumvalues = members
|
|
1059
|
+
self.labelvalue = labelvalue
|
|
1060
|
+
self:notify("enumvalues")
|
|
1061
|
+
end
|
|
1062
|
+
|
|
1063
|
+
--------------------------------------------------------------------------------
|
|
1064
|
+
|
|
1065
|
+
AliasDef._type = "typedef"
|
|
1066
|
+
AliasDef.def_kind = "dk_Alias"
|
|
1067
|
+
AliasDef.definition_fields = {
|
|
1068
|
+
original_type = { type = IDLType },
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
function AliasDef:update(new, registry)
|
|
1072
|
+
self:_set_original_type_def(new.original_type, registry)
|
|
1073
|
+
end
|
|
1074
|
+
|
|
1075
|
+
function AliasDef:_set_original_type_def(type_def, registry)
|
|
1076
|
+
local old = self.type
|
|
1077
|
+
type_def = self.containing_repository:put(type_def.type, registry)
|
|
1078
|
+
self.original_type_def = type_def
|
|
1079
|
+
self.original_type = type_def.type
|
|
1080
|
+
if self.type ~= old then self:notify("type") end
|
|
1081
|
+
end
|
|
1082
|
+
|
|
1083
|
+
--------------------------------------------------------------------------------
|
|
1084
|
+
|
|
1085
|
+
ValueBoxDef._type = "valuebox"
|
|
1086
|
+
ValueBoxDef.def_kind = "dk_ValueBox"
|
|
1087
|
+
ValueBoxDef.definition_fields = AliasDef.definition_fields
|
|
1088
|
+
ValueBoxDef.update = AliasDef.update
|
|
1089
|
+
ValueBoxDef._set_original_type_def = AliasDef._set_original_type_def
|
|
1090
|
+
|
|
1091
|
+
--------------------------------------------------------------------------------
|
|
1092
|
+
|
|
1093
|
+
Repository.def_kind = "dk_Repository"
|
|
1094
|
+
Repository.repID = ""
|
|
1095
|
+
Repository.absolute_name = ""
|
|
1096
|
+
|
|
1097
|
+
function Repository:__init(object)
|
|
1098
|
+
self = oo.rawnew(self, object)
|
|
1099
|
+
self.containing_repository = self
|
|
1100
|
+
self.definition_map = self.definition_map or {}
|
|
1101
|
+
Container.update(self, self)
|
|
1102
|
+
return self
|
|
1103
|
+
end
|
|
1104
|
+
|
|
1105
|
+
--
|
|
1106
|
+
-- Read interface
|
|
1107
|
+
--
|
|
1108
|
+
|
|
1109
|
+
function Repository:lookup_id(search_id)
|
|
1110
|
+
return self.definition_map[search_id]
|
|
1111
|
+
end
|
|
1112
|
+
|
|
1113
|
+
--function Repository:get_canonical_typecode(tc)
|
|
1114
|
+
--end
|
|
1115
|
+
|
|
1116
|
+
function Repository:get_primitive(kind)
|
|
1117
|
+
return PrimitiveTypes[kind]
|
|
1118
|
+
end
|
|
1119
|
+
|
|
1120
|
+
--
|
|
1121
|
+
-- Write interface
|
|
1122
|
+
--
|
|
1123
|
+
--
|
|
1124
|
+
--function Repository:create_string(bound)
|
|
1125
|
+
--end
|
|
1126
|
+
--
|
|
1127
|
+
--function Repository:create_wstring(bound)
|
|
1128
|
+
--end
|
|
1129
|
+
|
|
1130
|
+
function Repository:create_sequence(bound, element_type)
|
|
1131
|
+
local created = SequenceDef{ containing_repository=self.containing_repository }
|
|
1132
|
+
created:update{
|
|
1133
|
+
elementtype = element_type.type,
|
|
1134
|
+
maxlength = bound,
|
|
1135
|
+
}
|
|
1136
|
+
return created
|
|
1137
|
+
end
|
|
1138
|
+
|
|
1139
|
+
function Repository:create_array(length, element_type)
|
|
1140
|
+
local created = ArrayDef{ containing_repository=self.containing_repository }
|
|
1141
|
+
created:update{
|
|
1142
|
+
elementtype = element_type.type,
|
|
1143
|
+
length = length,
|
|
1144
|
+
}
|
|
1145
|
+
return created
|
|
1146
|
+
end
|
|
1147
|
+
|
|
1148
|
+
--function Repository:create_fixed(digits, scale)
|
|
1149
|
+
--end
|
|
1150
|
+
|
|
1151
|
+
--------------------------------------------------------------------------------
|
|
1152
|
+
|
|
1153
|
+
--function ExtAttributeDef:describe_attribute()
|
|
1154
|
+
--end
|
|
1155
|
+
|
|
1156
|
+
--------------------------------------------------------------------------------
|
|
1157
|
+
|
|
1158
|
+
ModuleDef._type = "module"
|
|
1159
|
+
ModuleDef.def_kind = "dk_Module"
|
|
1160
|
+
ModuleDef.expandable = true
|
|
1161
|
+
|
|
1162
|
+
function ModuleDef:get_description()
|
|
1163
|
+
return setmetatable({}, iridl.ModuleDescription)
|
|
1164
|
+
end
|
|
1165
|
+
|
|
1166
|
+
--------------------------------------------------------------------------------
|
|
1167
|
+
|
|
1168
|
+
ExceptionDef._type = "except"
|
|
1169
|
+
ExceptionDef.def_kind = "dk_Exception"
|
|
1170
|
+
ExceptionDef.members = Empty
|
|
1171
|
+
ExceptionDef.definition_fields = {
|
|
1172
|
+
members = { type = {
|
|
1173
|
+
name = { type = "string" },
|
|
1174
|
+
type = { type = IDLType },
|
|
1175
|
+
}, optional = true, list = true },
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
function ExceptionDef:update(new, registry)
|
|
1179
|
+
self.type = self
|
|
1180
|
+
if new.members then self:_set_members(new.members, registry) end
|
|
1181
|
+
end
|
|
1182
|
+
|
|
1183
|
+
function ExceptionDef:_set_members(members, registry)
|
|
1184
|
+
for index, member in ipairs(members) do
|
|
1185
|
+
member.type_def = self.containing_repository:put(member.type, registry)
|
|
1186
|
+
member.type = member.type_def.type
|
|
1187
|
+
end
|
|
1188
|
+
for index, member in ipairs(self.members) do
|
|
1189
|
+
self:nowatch(member.type_def, "member "..member.name)
|
|
1190
|
+
end
|
|
1191
|
+
self.members = members
|
|
1192
|
+
for index, member in ipairs(self.members) do
|
|
1193
|
+
self:watch(member.type_def, "member "..member.name)
|
|
1194
|
+
end
|
|
1195
|
+
self:notify("members")
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1198
|
+
function ExceptionDef:get_description()
|
|
1199
|
+
return setmetatable({ type = self }, iridl.ExceptionDescription)
|
|
1200
|
+
end
|
|
1201
|
+
|
|
1202
|
+
--------------------------------------------------------------------------------
|
|
1203
|
+
|
|
1204
|
+
local function changeinheritance(container, old, new, type)
|
|
1205
|
+
for _, base in ipairs(new) do
|
|
1206
|
+
if type then
|
|
1207
|
+
assert.type(base, type, "inherited definition", "BAD_PARAM", 4)
|
|
1208
|
+
end
|
|
1209
|
+
for _, contained in ipairs(container.definitions) do
|
|
1210
|
+
if #base:lookup_name(contained.name, -1, "dk_All", false) > 0 then
|
|
1211
|
+
assert.illegal(ifaces,
|
|
1212
|
+
"inheritance, member '"..
|
|
1213
|
+
member.name..
|
|
1214
|
+
"' override not allowed",
|
|
1215
|
+
"BAD_PARAM", 5)
|
|
1216
|
+
end
|
|
1217
|
+
end
|
|
1218
|
+
end
|
|
1219
|
+
for index, base in ipairs(old) do
|
|
1220
|
+
container:nowatch(base, "base "..index)
|
|
1221
|
+
end
|
|
1222
|
+
for index, base in ipairs(new) do
|
|
1223
|
+
container:watch(base, "base "..index)
|
|
1224
|
+
end
|
|
1225
|
+
container:notify("inheritance", type)
|
|
1226
|
+
return new
|
|
1227
|
+
end
|
|
1228
|
+
|
|
1229
|
+
--------------------------------------------------------------------------------
|
|
1230
|
+
|
|
1231
|
+
InterfaceDef._type = "interface"
|
|
1232
|
+
InterfaceDef.def_kind = "dk_Interface"
|
|
1233
|
+
InterfaceDef.base_interfaces = Empty
|
|
1234
|
+
InterfaceDef.definition_fields = {
|
|
1235
|
+
base_interfaces = { type = InterfaceDef, optional = true, list = true },
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
InterfaceDef.hierarchy = idl.basesof
|
|
1239
|
+
|
|
1240
|
+
function InterfaceDef:update(new)
|
|
1241
|
+
if new.base_interfaces then
|
|
1242
|
+
self:_set_base_interfaces(new.base_interfaces)
|
|
1243
|
+
end
|
|
1244
|
+
end
|
|
1245
|
+
|
|
1246
|
+
function InterfaceDef:get_description()
|
|
1247
|
+
local base_interfaces = {}
|
|
1248
|
+
for index, base in ipairs(self.base_interfaces) do
|
|
1249
|
+
base_interfaces[index] = base.repID
|
|
1250
|
+
end
|
|
1251
|
+
return setmetatable({ base_interfaces = base_interfaces },
|
|
1252
|
+
iridl.InterfaceDescription)
|
|
1253
|
+
end
|
|
1254
|
+
|
|
1255
|
+
--
|
|
1256
|
+
-- Read interface
|
|
1257
|
+
--
|
|
1258
|
+
|
|
1259
|
+
function InterfaceDef:is_a(interface_id)
|
|
1260
|
+
if interface_id == self.repID then return true end
|
|
1261
|
+
for _, base in ipairs(self.base_interfaces) do
|
|
1262
|
+
if base:is_a(interface_id) then return true end
|
|
1263
|
+
end
|
|
1264
|
+
return false
|
|
1265
|
+
end
|
|
1266
|
+
|
|
1267
|
+
local FullIfaceDescription = iridl.InterfaceDef.definitions.FullInterfaceDescription
|
|
1268
|
+
function InterfaceDef:describe_interface()
|
|
1269
|
+
local operations = {}
|
|
1270
|
+
local attributes = {}
|
|
1271
|
+
local base_interfaces = {}
|
|
1272
|
+
for index, base in ipairs(self.base_interfaces) do
|
|
1273
|
+
base_interfaces[index] = base.repID
|
|
1274
|
+
end
|
|
1275
|
+
for base in self:hierarchy() do
|
|
1276
|
+
for _, contained in ipairs(base.definitions) do
|
|
1277
|
+
if contained._type == "attribute" then
|
|
1278
|
+
attributes[#attributes+1] = contained:describe().value
|
|
1279
|
+
elseif contained._type == "operation" then
|
|
1280
|
+
operations[#operations+1] = contained:describe().value
|
|
1281
|
+
end
|
|
1282
|
+
end
|
|
1283
|
+
end
|
|
1284
|
+
return setmetatable({
|
|
1285
|
+
name = self.name,
|
|
1286
|
+
id = self.id,
|
|
1287
|
+
defined_in = self.defined_in.repID,
|
|
1288
|
+
version = self.version,
|
|
1289
|
+
base_interfaces = base_interfaces,
|
|
1290
|
+
type = self,
|
|
1291
|
+
operations = operations,
|
|
1292
|
+
attributes = attributes,
|
|
1293
|
+
}, FullIfaceDescription)
|
|
1294
|
+
end
|
|
1295
|
+
|
|
1296
|
+
--
|
|
1297
|
+
-- Write interface
|
|
1298
|
+
--
|
|
1299
|
+
|
|
1300
|
+
function InterfaceDef:_set_base_interfaces(bases)
|
|
1301
|
+
for _, base in ipairs(bases) do
|
|
1302
|
+
if base._type ~= "interface" and base._type ~= "abstract_interface" then
|
|
1303
|
+
assert.illegal(base, "inherited definition", "BAD_PARAM", 4)
|
|
1304
|
+
end
|
|
1305
|
+
end
|
|
1306
|
+
self.base_interfaces = changeinheritance(self,
|
|
1307
|
+
self.base_interfaces,
|
|
1308
|
+
bases)
|
|
1309
|
+
end
|
|
1310
|
+
|
|
1311
|
+
function InterfaceDef:create_attribute(id, name, version, type, mode)
|
|
1312
|
+
local created = AttributeDef{ containing_repository=self.containing_repository }
|
|
1313
|
+
created:update{
|
|
1314
|
+
defined_in = self,
|
|
1315
|
+
|
|
1316
|
+
repID = id,
|
|
1317
|
+
name = name,
|
|
1318
|
+
version = version,
|
|
1319
|
+
|
|
1320
|
+
type = type.type,
|
|
1321
|
+
readonly = (mode == "ATTR_READONLY"),
|
|
1322
|
+
}
|
|
1323
|
+
return created
|
|
1324
|
+
end
|
|
1325
|
+
|
|
1326
|
+
function InterfaceDef:create_operation(id, name, version,
|
|
1327
|
+
result, mode, params,
|
|
1328
|
+
exceptions, contexts)
|
|
1329
|
+
local created = OperationDef{ containing_repository=self.containing_repository }
|
|
1330
|
+
created:update{
|
|
1331
|
+
defined_in = self,
|
|
1332
|
+
|
|
1333
|
+
repID = id,
|
|
1334
|
+
name = name,
|
|
1335
|
+
version = version,
|
|
1336
|
+
|
|
1337
|
+
result = result.type,
|
|
1338
|
+
|
|
1339
|
+
parameters = params,
|
|
1340
|
+
exceptions = exceptions,
|
|
1341
|
+
contexts = contexts,
|
|
1342
|
+
|
|
1343
|
+
oneway = (mode == "OP_ONEWAY"),
|
|
1344
|
+
}
|
|
1345
|
+
return created
|
|
1346
|
+
end
|
|
1347
|
+
|
|
1348
|
+
--------------------------------------------------------------------------------
|
|
1349
|
+
|
|
1350
|
+
--
|
|
1351
|
+
-- Write interface
|
|
1352
|
+
--
|
|
1353
|
+
|
|
1354
|
+
AbstractInterfaceDef._type = "abstract_interface"
|
|
1355
|
+
AbstractInterfaceDef.def_kind = "dk_AbstractInterface"
|
|
1356
|
+
AbstractInterfaceDef.definition_fields = {
|
|
1357
|
+
base_interfaces = { type = AbstractInterfaceDef, optional = true, list = true },
|
|
1358
|
+
}
|
|
1359
|
+
function AbstractInterfaceDef:_set_base_interfaces(bases)
|
|
1360
|
+
self.base_interfaces = changeinheritance(self,
|
|
1361
|
+
self.base_interfaces,
|
|
1362
|
+
bases,
|
|
1363
|
+
"idl abstract_interface")
|
|
1364
|
+
end
|
|
1365
|
+
|
|
1366
|
+
--------------------------------------------------------------------------------
|
|
1367
|
+
|
|
1368
|
+
--
|
|
1369
|
+
-- Write interface
|
|
1370
|
+
--
|
|
1371
|
+
|
|
1372
|
+
LocalInterfaceDef._type = "local_interface"
|
|
1373
|
+
LocalInterfaceDef.def_kind = "dk_LocalInterface"
|
|
1374
|
+
function LocalInterfaceDef:_set_base_interfaces(bases)
|
|
1375
|
+
for _, base in ipairs(bases) do
|
|
1376
|
+
if base._type ~= "interface" and base._type ~= "local_interface" then
|
|
1377
|
+
assert.illegal(base, "inherited definition", "BAD_PARAM", 4)
|
|
1378
|
+
end
|
|
1379
|
+
end
|
|
1380
|
+
self.base_interfaces = changeinheritance(self,
|
|
1381
|
+
self.base_interfaces,
|
|
1382
|
+
bases)
|
|
1383
|
+
end
|
|
1384
|
+
|
|
1385
|
+
--------------------------------------------------------------------------------
|
|
1386
|
+
|
|
1387
|
+
--
|
|
1388
|
+
-- Read interface
|
|
1389
|
+
--
|
|
1390
|
+
--
|
|
1391
|
+
--function InterfaceAttrExtension:describe_ext_interface()
|
|
1392
|
+
--end
|
|
1393
|
+
|
|
1394
|
+
--
|
|
1395
|
+
-- Write interface
|
|
1396
|
+
--
|
|
1397
|
+
--
|
|
1398
|
+
--function InterfaceAttrExtension:create_ext_attribute()
|
|
1399
|
+
--end
|
|
1400
|
+
|
|
1401
|
+
--------------------------------------------------------------------------------
|
|
1402
|
+
|
|
1403
|
+
ValueDef._type = "valuetype"
|
|
1404
|
+
ValueDef.def_kind = "dk_Value"
|
|
1405
|
+
ValueDef.supported_interfaces = Empty
|
|
1406
|
+
ValueDef.abstract_base_values = Empty
|
|
1407
|
+
ValueDef.initializers = Empty
|
|
1408
|
+
ValueDef.kind = 0
|
|
1409
|
+
ValueDef.definition_fields = {
|
|
1410
|
+
kind = { type = "number", optional = true },
|
|
1411
|
+
is_abstract = { type = "boolean", optional = true },
|
|
1412
|
+
is_custom = { type = "boolean", optional = true },
|
|
1413
|
+
is_truncatable = { type = "boolean", optional = true },
|
|
1414
|
+
base_value = { type = IDLType, optional = true },
|
|
1415
|
+
abstract_base_values = { type = ValueDef, optional = true, list = true },
|
|
1416
|
+
supported_interfaces = { type = InterfaceDef, optional = true, list = true },
|
|
1417
|
+
initializers = {
|
|
1418
|
+
type = {
|
|
1419
|
+
name = { type = "string" },
|
|
1420
|
+
members = {
|
|
1421
|
+
type = {
|
|
1422
|
+
name = { type = "string" },
|
|
1423
|
+
type = { type = IDLType },
|
|
1424
|
+
},
|
|
1425
|
+
list = true,
|
|
1426
|
+
},
|
|
1427
|
+
},
|
|
1428
|
+
optional = true,
|
|
1429
|
+
list = true,
|
|
1430
|
+
},
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
function ValueDef:update(new)
|
|
1434
|
+
self.members = {}
|
|
1435
|
+
if new.kind then
|
|
1436
|
+
self:_set_is_custom(new.kind==1)
|
|
1437
|
+
self:_set_is_abstract(new.kind==2)
|
|
1438
|
+
self:_set_is_truncatable(new.kind==3)
|
|
1439
|
+
else
|
|
1440
|
+
self:_set_is_custom(new.is_custom)
|
|
1441
|
+
self:_set_is_abstract(new.is_abstract)
|
|
1442
|
+
self:_set_is_truncatable(new.is_truncatable)
|
|
1443
|
+
end
|
|
1444
|
+
if new.base_value == idl.null then
|
|
1445
|
+
self:_set_base_value(nil)
|
|
1446
|
+
else
|
|
1447
|
+
assert.type(new.base_value, "idl valuetype", "base value", "BAD_PARAM", 4)
|
|
1448
|
+
self:_set_base_value(new.base_value)
|
|
1449
|
+
end
|
|
1450
|
+
if new.abstract_base_values then
|
|
1451
|
+
self:_set_abstract_base_values(new.abstract_base_values)
|
|
1452
|
+
end
|
|
1453
|
+
if new.supported_interfaces then
|
|
1454
|
+
self:_set_supported_interfaces(new.supported_interfaces)
|
|
1455
|
+
end
|
|
1456
|
+
end
|
|
1457
|
+
|
|
1458
|
+
function ValueDef:get_description()
|
|
1459
|
+
local base_value = self.base_value
|
|
1460
|
+
if base_value == idl.null then
|
|
1461
|
+
base_value = idl.ValueBase
|
|
1462
|
+
end
|
|
1463
|
+
local abstract_base_values = {}
|
|
1464
|
+
for index, base in ipairs(self.abstract_base_values) do
|
|
1465
|
+
abstract_base_values[index] = base.repID
|
|
1466
|
+
end
|
|
1467
|
+
local supported_interfaces = {}
|
|
1468
|
+
for index, iface in ipairs(self.supported_interfaces) do
|
|
1469
|
+
supported_interfaces[index] = iface.repID
|
|
1470
|
+
end
|
|
1471
|
+
return setmetatable({
|
|
1472
|
+
is_abstract = self.is_abstract,
|
|
1473
|
+
is_custom = self.is_custom,
|
|
1474
|
+
is_truncatable = self.is_truncatable,
|
|
1475
|
+
base_value = base_value.repID,
|
|
1476
|
+
abstract_base_values = abstract_base_values,
|
|
1477
|
+
supported_interfaces = supported_interfaces,
|
|
1478
|
+
}, iridl.ValueDescription)
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
--
|
|
1482
|
+
-- Read interface
|
|
1483
|
+
--
|
|
1484
|
+
|
|
1485
|
+
function ValueDef:is_a(id)
|
|
1486
|
+
if id == self.repID then return true end
|
|
1487
|
+
local base = self.base_value
|
|
1488
|
+
if base ~= idl.null and base:is_a(id) then return true end
|
|
1489
|
+
for _, base in ipairs(self.abstract_base_values) do
|
|
1490
|
+
if base:is_a(id) then return true end
|
|
1491
|
+
end
|
|
1492
|
+
for _, iface in ipairs(self.supported_interfaces) do
|
|
1493
|
+
if iface:is_a(id) then return true end
|
|
1494
|
+
end
|
|
1495
|
+
return false
|
|
1496
|
+
end
|
|
1497
|
+
|
|
1498
|
+
local FullValueDescription = iridl.ValueDef.definitions.FullValueDescription
|
|
1499
|
+
function ValueDef:describe_value()
|
|
1500
|
+
local operations = {}
|
|
1501
|
+
local attributes = {}
|
|
1502
|
+
local members = {}
|
|
1503
|
+
for base in self:hierarchy() do
|
|
1504
|
+
for _, contained in ipairs(base.definitions) do
|
|
1505
|
+
if contained._type == "attribute" then
|
|
1506
|
+
attributes[#attributes+1] = contained:describe().value
|
|
1507
|
+
elseif contained._type == "operation" then
|
|
1508
|
+
operations[#operations+1] = contained:describe().value
|
|
1509
|
+
elseif contained._type == "valuemember" then
|
|
1510
|
+
members[#members+1] = contained:describe().value
|
|
1511
|
+
end
|
|
1512
|
+
end
|
|
1513
|
+
end
|
|
1514
|
+
local desc = self:get_description()
|
|
1515
|
+
desc.name = self.name
|
|
1516
|
+
desc.id = self.id
|
|
1517
|
+
desc.defined_in = self.defined_in.repID
|
|
1518
|
+
desc.version = self.version
|
|
1519
|
+
desc.type = self
|
|
1520
|
+
desc.operations = operations
|
|
1521
|
+
desc.attributes = attributes
|
|
1522
|
+
desc.members = members
|
|
1523
|
+
desc.initializers = self.initializers
|
|
1524
|
+
return setmetatable(desc, FullValueDescription)
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1527
|
+
--
|
|
1528
|
+
-- Write interface
|
|
1529
|
+
--
|
|
1530
|
+
|
|
1531
|
+
function ValueDef:_set_is_custom(value)
|
|
1532
|
+
self.is_custom = value
|
|
1533
|
+
if value then self.kind = 1 end
|
|
1534
|
+
end
|
|
1535
|
+
|
|
1536
|
+
function ValueDef:_set_is_abstract(value)
|
|
1537
|
+
self.is_abstract = value
|
|
1538
|
+
if value then self.kind = 2 end
|
|
1539
|
+
end
|
|
1540
|
+
|
|
1541
|
+
function ValueDef:_set_is_truncatable(value)
|
|
1542
|
+
self.is_truncatable = value
|
|
1543
|
+
if value then self.kind = 3 end
|
|
1544
|
+
end
|
|
1545
|
+
|
|
1546
|
+
function ValueDef:_set_supported_interfaces(ifaces)
|
|
1547
|
+
self.supported_interfaces = changeinheritance(self,
|
|
1548
|
+
self.supported_interfaces,
|
|
1549
|
+
ifaces,
|
|
1550
|
+
"idl interface")
|
|
1551
|
+
end
|
|
1552
|
+
|
|
1553
|
+
function ValueDef:_set_base_value(base)
|
|
1554
|
+
if base then
|
|
1555
|
+
if base.is_abstract then
|
|
1556
|
+
assert.illegal(base, "invalid base value", "BAD_PARAM", 4)
|
|
1557
|
+
end
|
|
1558
|
+
local list = changeinheritance(self, {self.base_value}, {base}, "idl valuetype")
|
|
1559
|
+
base = list[1]
|
|
1560
|
+
else
|
|
1561
|
+
base = idl.null
|
|
1562
|
+
end
|
|
1563
|
+
self.base_value = base
|
|
1564
|
+
end
|
|
1565
|
+
|
|
1566
|
+
function ValueDef:_get_base_value()
|
|
1567
|
+
local base = self.base_value
|
|
1568
|
+
if base == idl.null then base = nil end
|
|
1569
|
+
return base
|
|
1570
|
+
end
|
|
1571
|
+
|
|
1572
|
+
function ValueDef:_set_abstract_base_values(bases)
|
|
1573
|
+
for i = 1, #bases do
|
|
1574
|
+
local base = bases[i]
|
|
1575
|
+
if not base.is_abstract then
|
|
1576
|
+
assert.illegal(base, "invalid abstract base value", "BAD_PARAM", 4)
|
|
1577
|
+
end
|
|
1578
|
+
end
|
|
1579
|
+
self.abstract_base_values = changeinheritance(self,
|
|
1580
|
+
self.abstract_base_values,
|
|
1581
|
+
bases,
|
|
1582
|
+
"idl valuetype")
|
|
1583
|
+
end
|
|
1584
|
+
|
|
1585
|
+
function ValueDef:create_value_member(id, name, version, type, access)
|
|
1586
|
+
local created = ValueMemberDef{ containing_repository=self.containing_repository }
|
|
1587
|
+
created:update{
|
|
1588
|
+
defined_in = self,
|
|
1589
|
+
|
|
1590
|
+
repID = id,
|
|
1591
|
+
name = name,
|
|
1592
|
+
version = version,
|
|
1593
|
+
|
|
1594
|
+
type = type.type,
|
|
1595
|
+
access = access,
|
|
1596
|
+
}
|
|
1597
|
+
return created
|
|
1598
|
+
end
|
|
1599
|
+
|
|
1600
|
+
ValueDef.create_attribute = InterfaceDef.create_attribute
|
|
1601
|
+
ValueDef.create_operation = InterfaceDef.create_operation
|
|
1602
|
+
|
|
1603
|
+
--------------------------------------------------------------------------------
|
|
1604
|
+
|
|
1605
|
+
--
|
|
1606
|
+
-- Read interface
|
|
1607
|
+
--
|
|
1608
|
+
--
|
|
1609
|
+
--function ExtValueDef:describe_ext_value()
|
|
1610
|
+
--end
|
|
1611
|
+
|
|
1612
|
+
--
|
|
1613
|
+
-- Write interface
|
|
1614
|
+
--
|
|
1615
|
+
--
|
|
1616
|
+
--function ExtValueDef:create_ext_attribute(id, name, version, type, mode,
|
|
1617
|
+
-- get_exceptions, set_exceptions)
|
|
1618
|
+
--end
|
|
1619
|
+
|
|
1620
|
+
|
|
1621
|
+
--------------------------------------------------------------------------------
|
|
1622
|
+
-- Implementation --------------------------------------------------------------
|
|
1623
|
+
|
|
1624
|
+
oo.class(_M, Repository)
|
|
1625
|
+
|
|
1626
|
+
Classes = {
|
|
1627
|
+
struct = StructDef,
|
|
1628
|
+
union = UnionDef,
|
|
1629
|
+
enum = EnumDef,
|
|
1630
|
+
sequence = SequenceDef,
|
|
1631
|
+
array = ArrayDef,
|
|
1632
|
+
string = StringDef,
|
|
1633
|
+
typedef = AliasDef,
|
|
1634
|
+
except = ExceptionDef,
|
|
1635
|
+
module = ModuleDef,
|
|
1636
|
+
interface = InterfaceDef,
|
|
1637
|
+
abstract_interface = AbstractInterfaceDef,
|
|
1638
|
+
local_interface = LocalInterfaceDef,
|
|
1639
|
+
attribute = AttributeDef,
|
|
1640
|
+
operation = OperationDef,
|
|
1641
|
+
valuetype = ValueDef,
|
|
1642
|
+
valuemember = ValueMemberDef,
|
|
1643
|
+
valuebox = ValueBoxDef,
|
|
1644
|
+
Object = ObjectRef,
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
--------------------------------------------------------------------------------
|
|
1648
|
+
|
|
1649
|
+
local function topdown(stack, class)
|
|
1650
|
+
while stack[class] do
|
|
1651
|
+
local ready = true
|
|
1652
|
+
for _, super in oo.supers(stack[class]) do
|
|
1653
|
+
if stack:insert(super, class) then
|
|
1654
|
+
ready = false
|
|
1655
|
+
break
|
|
1656
|
+
end
|
|
1657
|
+
end
|
|
1658
|
+
if ready then return stack[class] end
|
|
1659
|
+
end
|
|
1660
|
+
end
|
|
1661
|
+
local function iconstruct(class)
|
|
1662
|
+
local stack = OrderedSet()
|
|
1663
|
+
stack:push(class)
|
|
1664
|
+
return topdown, stack, OrderedSet.firstkey
|
|
1665
|
+
end
|
|
1666
|
+
|
|
1667
|
+
local function getupdate(self, value, name, typespec) --[[VERBOSE]] verbose:repository("[attribute ",name,"]")
|
|
1668
|
+
if type(typespec) == "string" then
|
|
1669
|
+
assert.type(value, typespec, name)
|
|
1670
|
+
elseif type(typespec) == "table" then
|
|
1671
|
+
if oo.isclass(typespec) then
|
|
1672
|
+
value = self[value]
|
|
1673
|
+
if not oo.instanceof(value, typespec) then
|
|
1674
|
+
assert.illegal(value, name)
|
|
1675
|
+
end
|
|
1676
|
+
else
|
|
1677
|
+
local new = {}
|
|
1678
|
+
for name, field in pairs(typespec) do
|
|
1679
|
+
local result = value[name]
|
|
1680
|
+
if result ~= nil or not field.optional then
|
|
1681
|
+
if field.list then
|
|
1682
|
+
local new = {}
|
|
1683
|
+
for index, value in ipairs(result) do
|
|
1684
|
+
new[index] = getupdate(self, value, name, field.type)
|
|
1685
|
+
end
|
|
1686
|
+
result = new
|
|
1687
|
+
else
|
|
1688
|
+
result = getupdate(self, result, name, field.type)
|
|
1689
|
+
end
|
|
1690
|
+
end
|
|
1691
|
+
new[name] = result
|
|
1692
|
+
end
|
|
1693
|
+
value = new
|
|
1694
|
+
end
|
|
1695
|
+
end
|
|
1696
|
+
return value
|
|
1697
|
+
end
|
|
1698
|
+
|
|
1699
|
+
Registry = oo.class()
|
|
1700
|
+
|
|
1701
|
+
function Registry:__init(object)
|
|
1702
|
+
self = oo.rawnew(self, object)
|
|
1703
|
+
self[PrimitiveTypes.pk_null ] = PrimitiveTypes.pk_null
|
|
1704
|
+
self[PrimitiveTypes.pk_void ] = PrimitiveTypes.pk_void
|
|
1705
|
+
self[PrimitiveTypes.pk_short ] = PrimitiveTypes.pk_short
|
|
1706
|
+
self[PrimitiveTypes.pk_long ] = PrimitiveTypes.pk_long
|
|
1707
|
+
self[PrimitiveTypes.pk_longlong ] = PrimitiveTypes.pk_longlong
|
|
1708
|
+
self[PrimitiveTypes.pk_ushort ] = PrimitiveTypes.pk_ushort
|
|
1709
|
+
self[PrimitiveTypes.pk_ulong ] = PrimitiveTypes.pk_ulong
|
|
1710
|
+
self[PrimitiveTypes.pk_ulonglong ] = PrimitiveTypes.pk_ulonglong
|
|
1711
|
+
self[PrimitiveTypes.pk_float ] = PrimitiveTypes.pk_float
|
|
1712
|
+
self[PrimitiveTypes.pk_double ] = PrimitiveTypes.pk_double
|
|
1713
|
+
self[PrimitiveTypes.pk_longdouble] = PrimitiveTypes.pk_longdouble
|
|
1714
|
+
self[PrimitiveTypes.pk_boolean ] = PrimitiveTypes.pk_boolean
|
|
1715
|
+
self[PrimitiveTypes.pk_char ] = PrimitiveTypes.pk_char
|
|
1716
|
+
self[PrimitiveTypes.pk_octet ] = PrimitiveTypes.pk_octet
|
|
1717
|
+
self[PrimitiveTypes.pk_any ] = PrimitiveTypes.pk_any
|
|
1718
|
+
self[PrimitiveTypes.pk_TypeCode ] = PrimitiveTypes.pk_TypeCode
|
|
1719
|
+
self[PrimitiveTypes.pk_string ] = PrimitiveTypes.pk_string
|
|
1720
|
+
self[PrimitiveTypes.pk_objref ] = PrimitiveTypes.pk_objref
|
|
1721
|
+
self[self.repository ] = self.repository
|
|
1722
|
+
return self
|
|
1723
|
+
end
|
|
1724
|
+
|
|
1725
|
+
function Registry:__index(definition)
|
|
1726
|
+
if definition then
|
|
1727
|
+
local repository = self.repository
|
|
1728
|
+
local class = repository.Classes[definition._type]
|
|
1729
|
+
|
|
1730
|
+
--<PROBLEM WITH LUAIDL>
|
|
1731
|
+
if class == InterfaceDef then
|
|
1732
|
+
if definition.abstract then
|
|
1733
|
+
class = AbstractInterfaceDef
|
|
1734
|
+
elseif definition["local"] then
|
|
1735
|
+
class = LocalInterfaceDef
|
|
1736
|
+
end
|
|
1737
|
+
end
|
|
1738
|
+
--<\PROBLEM WITH LUAIDL>
|
|
1739
|
+
|
|
1740
|
+
local result
|
|
1741
|
+
if class then
|
|
1742
|
+
result = repository:lookup_id(definition.repID)
|
|
1743
|
+
if definition ~= result then --[[VERBOSE]] verbose:repository(true, definition._type," ",definition.repID or definition.name)
|
|
1744
|
+
result = class(result)
|
|
1745
|
+
result.containing_repository = repository
|
|
1746
|
+
self[definition] = result -- to avoid loops in cycles during 'getupdate'
|
|
1747
|
+
self[result] = result
|
|
1748
|
+
for class in iconstruct(class) do --[[VERBOSE]] verbose:repository("[",ClassName[class],"]")
|
|
1749
|
+
local update = oo.memberof(class, "update")
|
|
1750
|
+
if update then
|
|
1751
|
+
local fields = oo.memberof(class, "definition_fields")
|
|
1752
|
+
local new = fields and getupdate(self, definition, "object", fields)
|
|
1753
|
+
update(result, new, self)
|
|
1754
|
+
end
|
|
1755
|
+
end --[[VERBOSE]] verbose:repository(false)
|
|
1756
|
+
if oo.instanceof(result, Container) then
|
|
1757
|
+
for _, contained in ipairs(definition.definitions) do
|
|
1758
|
+
getupdate(self, contained, "contained", Contained)
|
|
1759
|
+
end
|
|
1760
|
+
end
|
|
1761
|
+
end
|
|
1762
|
+
elseif oo.classof(definition) == _M then
|
|
1763
|
+
result = self.repository
|
|
1764
|
+
end
|
|
1765
|
+
self[definition] = result
|
|
1766
|
+
self[result] = result
|
|
1767
|
+
return result
|
|
1768
|
+
end
|
|
1769
|
+
end
|
|
1770
|
+
|
|
1771
|
+
--------------------------------------------------------------------------------
|
|
1772
|
+
|
|
1773
|
+
function put(self, definition, registry)
|
|
1774
|
+
registry = registry or self.Registry{ repository = self }
|
|
1775
|
+
return registry[definition]
|
|
1776
|
+
end
|
|
1777
|
+
|
|
1778
|
+
function register(self, ...)
|
|
1779
|
+
local registry = self.Registry{ repository = self }
|
|
1780
|
+
local results = {}
|
|
1781
|
+
local count = select("#", ...)
|
|
1782
|
+
for i = 1, count do
|
|
1783
|
+
local definition = select(i, ...)
|
|
1784
|
+
assert.type(definition, "table", "IR object definition")
|
|
1785
|
+
results[i] = registry[definition]
|
|
1786
|
+
end
|
|
1787
|
+
return unpack(results, 1, count)
|
|
1788
|
+
end
|
|
1789
|
+
|
|
1790
|
+
local TypeCodesOfInterface = {
|
|
1791
|
+
Object = true,
|
|
1792
|
+
abstract_interface = true,
|
|
1793
|
+
}
|
|
1794
|
+
function resolve(self, typeref)
|
|
1795
|
+
local luatype = type(typeref)
|
|
1796
|
+
local result, errmsg
|
|
1797
|
+
if luatype == "table" then
|
|
1798
|
+
if typeref._type == "interface" then
|
|
1799
|
+
result, errmsg = self:register(typeref)
|
|
1800
|
+
elseif TypeCodesOfInterface[typeref._type] then
|
|
1801
|
+
typeref, luatype = typeref.repID, "string"
|
|
1802
|
+
end
|
|
1803
|
+
end
|
|
1804
|
+
if luatype == "string" then
|
|
1805
|
+
result = self:lookup(typeref) or self:lookup_id(typeref)
|
|
1806
|
+
if not result then
|
|
1807
|
+
errmsg = Exception{ "INTERNAL", minor_code_value = 0,
|
|
1808
|
+
reason = "interface",
|
|
1809
|
+
message = "unknown interface",
|
|
1810
|
+
interface = typeref,
|
|
1811
|
+
}
|
|
1812
|
+
end
|
|
1813
|
+
elseif result == nil then
|
|
1814
|
+
result, errmsg = nil, Exception{ "INTERNAL", minor_code_value = 0,
|
|
1815
|
+
reason = "interface",
|
|
1816
|
+
message = "illegal IDL type",
|
|
1817
|
+
type = typeref,
|
|
1818
|
+
}
|
|
1819
|
+
end
|
|
1820
|
+
return result, errmsg
|
|
1821
|
+
end
|