rufus-lua-win 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,200 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Visualization of Lua Values --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ local _G = _G
17
+ local select = select
18
+ local type = type
19
+ local next = next
20
+ local pairs = pairs
21
+ local rawget = rawget
22
+ local rawset = rawset
23
+ local getmetatable = getmetatable
24
+ local setmetatable = setmetatable
25
+ local luatostring = tostring
26
+ local loaded = package and package.loaded
27
+
28
+ local string = require "string"
29
+ local table = require "table"
30
+ local io = require "io"
31
+ local oo = require "loop.base"
32
+
33
+ module("loop.debug.Viewer", oo.class)
34
+
35
+ maxdepth = -1
36
+ indentation = " "
37
+ linebreak = "\n"
38
+ prefix = ""
39
+ output = io.output()
40
+
41
+ function writevalue(self, buffer, value, history, prefix, maxdepth)
42
+ local luatype = type(value)
43
+ if luatype == "nil" or luatype == "boolean" or luatype == "number" then
44
+ buffer:write(luatostring(value))
45
+ elseif luatype == "string" then
46
+ buffer:write(string.format("%q", value))
47
+ else
48
+ local label = history[value]
49
+ if label then
50
+ buffer:write(label)
51
+ else
52
+ label = self.labels[value] or self:label(value)
53
+ history[value] = label
54
+ if luatype == "table" then
55
+ buffer:write("{ --[[",label,"]]")
56
+ local key, field = next(value)
57
+ if key then
58
+ if maxdepth == 0 then
59
+ buffer:write(" ... ")
60
+ else
61
+ maxdepth = maxdepth - 1
62
+ local newprefix = prefix..self.indentation
63
+ for i = 1, #value do
64
+ buffer:write(self.linebreak, newprefix)
65
+ self:writevalue(buffer, value[i], history, newprefix, maxdepth)
66
+ buffer:write(",")
67
+ end
68
+ repeat
69
+ local keytype = type(key)
70
+ if keytype ~= "number" or key<=0 or key>#value or (key%1)~=0 then
71
+ buffer:write(self.linebreak, newprefix)
72
+ if keytype == "string" and key:match("^[%a_][%w_]*$") then
73
+ buffer:write(key)
74
+ else
75
+ buffer:write("[")
76
+ self:writevalue(buffer, key, history, newprefix, maxdepth)
77
+ buffer:write("]")
78
+ end
79
+ buffer:write(" = ")
80
+ self:writevalue(buffer, field, history, newprefix, maxdepth)
81
+ buffer:write(",")
82
+ end
83
+ key, field = next(value, key)
84
+ until not key
85
+ buffer:write(self.linebreak, prefix)
86
+ end
87
+ else
88
+ buffer:write(" ")
89
+ end
90
+ buffer:write("}")
91
+ else
92
+ buffer:write(label)
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ function writeto(self, buffer, ...)
99
+ local prefix = self.prefix
100
+ local maxdepth = self.maxdepth
101
+ local history = {}
102
+ for i = 1, select("#", ...) do
103
+ if i ~= 1 then buffer:write(", ") end
104
+ self:writevalue(buffer, select(i, ...), history, prefix, maxdepth)
105
+ end
106
+ end
107
+
108
+ local function add(self, ...)
109
+ for i = 1, select("#", ...) do self[#self+1] = select(i, ...) end
110
+ end
111
+ function tostring(self, ...)
112
+ local buffer = { write = add }
113
+ self:writeto(buffer, ...)
114
+ return table.concat(buffer)
115
+ end
116
+
117
+ function write(self, ...)
118
+ self:writeto(self.output, ...)
119
+ end
120
+
121
+ function print(self, ...)
122
+ local output = self.output
123
+ local prefix = self.prefix
124
+ local maxdepth = self.maxdepth
125
+ local history = {}
126
+ local value
127
+ for i = 1, select("#", ...) do
128
+ value = select(i, ...)
129
+ if type(value) == "string"
130
+ then output:write(value)
131
+ else self:writevalue(output, value, history, prefix, maxdepth)
132
+ end
133
+ end
134
+ output:write("\n")
135
+ end
136
+
137
+ function label(self, value)
138
+ local meta = getmetatable(value)
139
+ if meta then
140
+ local custom = rawget(meta, "__tostring")
141
+ if custom then
142
+ rawset(meta, "__tostring", nil)
143
+ local raw = luatostring(value)
144
+ rawset(meta, "__tostring", custom)
145
+ custom = luatostring(value)
146
+ if raw == custom
147
+ then return raw
148
+ else return custom.." ("..raw..")"
149
+ end
150
+ end
151
+ end
152
+ return luatostring(value)
153
+ end
154
+
155
+ function package(self, name, pack)
156
+ local labels = self.labels
157
+ labels[pack] = name
158
+ for field, member in pairs(pack) do
159
+ local kind = type(member)
160
+ if
161
+ labels[member] == nil and
162
+ (kind == "function" or kind == "userdata") and
163
+ field:match("^[%a_]+[%w_]*$")
164
+ then
165
+ labels[member] = name.."."..field
166
+ end
167
+ end
168
+ end
169
+
170
+ if loaded then
171
+ local luapacks = {
172
+ coroutine = true,
173
+ package = true,
174
+ string = true,
175
+ table = true,
176
+ math = true,
177
+ io = true,
178
+ os = true,
179
+ }
180
+ -- create cache for global values
181
+ labels = { __mode = "k" }
182
+ setmetatable(labels, labels)
183
+ -- cache names of global functions
184
+ for name, func in pairs(_G) do
185
+ if type(func) == "function" then
186
+ labels[func] = name
187
+ end
188
+ end
189
+ -- label loaded Lua library packages
190
+ for name in pairs(luapacks) do
191
+ local pack = loaded[name]
192
+ if pack then package(_M, name, pack) end
193
+ end
194
+ -- label other loaded packages
195
+ for name, pack in pairs(loaded) do
196
+ if not luapacks[name] and type(pack) == "table" then
197
+ package(_M, name, pack)
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,105 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP - Lua Object-Oriented Programming --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Multiple Inheritance Class Model --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+ -- Exported API: --
16
+ -- class(class, ...) --
17
+ -- new(class, ...) --
18
+ -- classof(object) --
19
+ -- isclass(class) --
20
+ -- instanceof(object, class) --
21
+ -- memberof(class, name) --
22
+ -- members(class) --
23
+ -- superclass(class) --
24
+ -- subclassof(class, super) --
25
+ -- supers(class) --
26
+ --------------------------------------------------------------------------------
27
+
28
+ local unpack = unpack
29
+ local require = require
30
+ local ipairs = ipairs
31
+ local select = select
32
+
33
+ local table = require "loop.table"
34
+
35
+ module "loop.multiple"
36
+ --------------------------------------------------------------------------------
37
+ local base = require "loop.simple"
38
+ --------------------------------------------------------------------------------
39
+ table.copy(base, _M)
40
+ --------------------------------------------------------------------------------
41
+ local MultipleClass = {
42
+ __call = new,
43
+ __index = function (self, field)
44
+ self = base.classof(self)
45
+ for _, super in ipairs(self) do
46
+ local value = super[field]
47
+ if value ~= nil then return value end
48
+ end
49
+ end,
50
+ }
51
+
52
+ function class(class, ...)
53
+ if select("#", ...) > 1
54
+ then return base.rawnew(table.copy(MultipleClass, {...}), initclass(class))
55
+ else return base.class(class, ...)
56
+ end
57
+ end
58
+ --------------------------------------------------------------------------------
59
+ function isclass(class)
60
+ local metaclass = base.classof(class)
61
+ if metaclass then
62
+ return metaclass.__index == MultipleClass.__index or
63
+ base.isclass(class)
64
+ end
65
+ end
66
+ --------------------------------------------------------------------------------
67
+ function superclass(class)
68
+ local metaclass = base.classof(class)
69
+ if metaclass then
70
+ local indexer = metaclass.__index
71
+ if (indexer == MultipleClass.__index)
72
+ then return unpack(metaclass)
73
+ else return metaclass.__index
74
+ end
75
+ end
76
+ end
77
+ --------------------------------------------------------------------------------
78
+ local function isingle(single, index)
79
+ if single and not index then
80
+ return 1, single
81
+ end
82
+ end
83
+ function supers(class)
84
+ local metaclass = classof(class)
85
+ if metaclass then
86
+ local indexer = metaclass.__index
87
+ if indexer == MultipleClass.__index
88
+ then return ipairs(metaclass)
89
+ else return isingle, indexer
90
+ end
91
+ end
92
+ return isingle
93
+ end
94
+ --------------------------------------------------------------------------------
95
+ function subclassof(class, super)
96
+ if class == super then return true end
97
+ for _, superclass in supers(class) do
98
+ if subclassof(superclass, super) then return true end
99
+ end
100
+ return false
101
+ end
102
+ --------------------------------------------------------------------------------
103
+ function instanceof(object, class)
104
+ return subclassof(classof(object), class)
105
+ end
@@ -0,0 +1,57 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Data structure to hold information about exceptions in Lua --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ local error = error
17
+ local type = type
18
+ local traceback = debug and debug.traceback
19
+
20
+ local table = require "table"
21
+ local oo = require "loop.base"
22
+
23
+ module("loop.object.Exception", oo.class)
24
+
25
+ function __init(class, object)
26
+ if traceback then
27
+ if not object then
28
+ object = { traceback = traceback() }
29
+ elseif object.traceback == nil then
30
+ object.traceback = traceback()
31
+ end
32
+ end
33
+ return oo.rawnew(class, object)
34
+ end
35
+
36
+ function __concat(op1, op2)
37
+ if type(op1) == "table" and type(op1.__tostring) == "function" then
38
+ op1 = op1:__tostring()
39
+ end
40
+ if type(op2) == "table" and type(op2.__tostring) == "function" then
41
+ op2 = op2:__tostring()
42
+ end
43
+ return op1..op2
44
+ end
45
+
46
+ function __tostring(self)
47
+ local message = { self[1] or self._NAME or "Exception"," raised" }
48
+ if self.message then
49
+ message[#message + 1] = ": "
50
+ message[#message + 1] = self.message
51
+ end
52
+ if self.traceback then
53
+ message[#message + 1] = "\n"
54
+ message[#message + 1] = self.traceback
55
+ end
56
+ return table.concat(message)
57
+ end
@@ -0,0 +1,43 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Class that Implement Group Invocation --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ local pairs = pairs
17
+
18
+ local oo = require "loop.base"
19
+ local ObjectCache = require "loop.collection.ObjectCache"
20
+
21
+ module("loop.object.Publisher", oo.class)
22
+
23
+ __index = ObjectCache{
24
+ retrieve = function(_, method)
25
+ return function(self, ...)
26
+ for _, object in pairs(self) do
27
+ object[method](object, ...)
28
+ end
29
+ end
30
+ end
31
+ }
32
+
33
+ function __newindex(self, key, value)
34
+ for _, object in pairs(self) do
35
+ object[key] = value
36
+ end
37
+ end
38
+
39
+ function __call(self, ...)
40
+ for _, object in pairs(self) do
41
+ object(...)
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP Class Library --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Class of Dynamic Wrapper Objects for Method Invocation --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+
16
+ local type = type
17
+ local oo = require "loop.base"
18
+ local ObjectCache = require "loop.collection.ObjectCache"
19
+
20
+ module("loop.object.Wrapper", oo.class)
21
+
22
+ function __init(self, ...)
23
+ self = oo.rawnew(self, ...)
24
+ self.__methods = ObjectCache()
25
+ function self.__methods.retrieve(_, method)
26
+ return function(_, ...)
27
+ return method(self.__object, ...)
28
+ end
29
+ end
30
+ return self
31
+ end
32
+
33
+ function __index(self, key)
34
+ local value = self.__object[key]
35
+ if type(value) == "function"
36
+ then return self.__methods[value]
37
+ else return value
38
+ end
39
+ end
@@ -0,0 +1,585 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP - Lua Object-Oriented Programming --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Scoped Class Model --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+ -- Exported API: --
16
+ -- class(class, ...) --
17
+ -- new(class, ...) --
18
+ -- classof(object) --
19
+ -- isclass(class) --
20
+ -- instanceof(object, class) --
21
+ -- memberof(class, name) --
22
+ -- members(class) --
23
+ -- superclass(class) --
24
+ -- subclassof(class, super) --
25
+ -- supers(class) --
26
+ -- allmembers(class) --
27
+ -- --
28
+ -- methodfunction(method) --
29
+ -- methodclass(method) --
30
+ -- this(object) --
31
+ -- priv(object, [class]) --
32
+ -- prot(object) --
33
+ --------------------------------------------------------------------------------
34
+
35
+ -- TODO:
36
+ -- Test replacement of all members of a scope by ClassProxy[scope] = { ... }
37
+ -- Test static method call.
38
+ -- Define a default __eq metamethod that compares the object references.
39
+ -- The best way to relink member with numeric, string and boolean values.
40
+ -- Replace conditional compiler by static function constructors.
41
+
42
+ --------------------------------------------------------------------------------
43
+
44
+ local type = type
45
+ local pairs = pairs
46
+ local assert = assert
47
+ local ipairs = ipairs
48
+ local setmetatable = setmetatable
49
+ local unpack = unpack
50
+ local require = require
51
+ local rawset = rawset
52
+ local getmetatable = getmetatable
53
+ local rawget = rawget
54
+
55
+ local debug = require "debug"
56
+ local table = require "loop.table"
57
+
58
+ module "loop.scoped" -- [[VERBOSE]] local verbose = require "loop.verbose"
59
+
60
+ --------------------------------------------------------------------------------
61
+ local ObjectCache = require "loop.collection.ObjectCache"
62
+ local OrderedSet = require "loop.collection.OrderedSet"
63
+ local base = require "loop.multiple"
64
+ --------------------------------------------------------------------------------
65
+ table.copy(require "loop.cached", _M)
66
+ --------------------------------------------------------------------------------
67
+ --- SCOPED DATA CHAIN ----------------------------------------------------------
68
+ --------------------------------------------------------------------------------
69
+ -- maps private and protected state objects to the object (public) table
70
+ local Object = setmetatable({}, { __mode = "kv" })
71
+ --------------------------------------------------------------------------------
72
+ local function newprotected(self, object) -- [[VERBOSE]] verbose:scoped("new 'protected' for 'public' ",object)
73
+ local protected = self.class()
74
+ Object[protected] = object
75
+ return protected
76
+ end
77
+ local function ProtectedPool(members) -- [[VERBOSE]] verbose:scoped "new protected pool"
78
+ return ObjectCache {
79
+ class = base.class(members),
80
+ retrieve = newprotected,
81
+ }
82
+ end
83
+ --------------------------------------------------------------------------------
84
+ local function newprivate(self, outter) -- [[VERBOSE]] verbose:scoped(true, "retrieving 'private' for reference ",outter)
85
+ local object = Object[outter] -- [[VERBOSE]] verbose:scoped("'public' is ",object or outter)
86
+ local private = rawget(self, object)
87
+ if not private then
88
+ private = self.class() -- [[VERBOSE]] verbose:scoped("new 'private' created: ",private)
89
+ if object then
90
+ Object[private] = object -- [[VERBOSE]] verbose:scoped("'public' ",object," registered for the new 'private' ",private)
91
+ self[object] = private -- [[VERBOSE]] verbose:scoped("new 'private' ",private," stored at the pool for 'public' ",object)
92
+ else
93
+ Object[private] = outter -- [[VERBOSE]] verbose:scoped("'public' ",outter," registered for the new 'private' ",private)
94
+ end -- [[VERBOSE]] else verbose:scoped("reusing 'private' ",private," associated to 'public'")
95
+ end -- [[VERBOSE]] verbose:scoped(false, "returning 'private' ",private," for reference ",outter)
96
+ return private
97
+ end
98
+ local function PrivatePool(members) -- [[VERBOSE]] verbose:scoped{"new private pool", members = members}
99
+ return ObjectCache {
100
+ class = base.class(members),
101
+ retrieve = newprivate,
102
+ }
103
+ end
104
+ --------------------------------------------------------------------------------
105
+ local function bindto(class, member)
106
+ if type(member) == "function" then -- [[VERBOSE]] verbose:scoped("new method closure for ",member)
107
+ local pool
108
+ local method = member
109
+ member = function (self, ...)
110
+ pool = rawget(class, getmetatable(self)) -- [[VERBOSE]] verbose:scoped("method call on reference ",self," (pool: ",pool,")")
111
+ if pool
112
+ then return method(pool[self], ...)
113
+ else return method(self, ...)
114
+ end
115
+ end
116
+ end
117
+ return member
118
+ end
119
+ --------------------------------------------------------------------------------
120
+ local ConditionalCompiler = require "loop.compiler.Conditional"
121
+
122
+ local indexer = ConditionalCompiler {
123
+ {[[local Public = select(1, ...) ]],"private or protected" },
124
+ {[[local meta = select(2, ...) ]],"not (newindex and public and nilindex)" },
125
+ {[[local class = select(3, ...) ]],"newindex or private" },
126
+ {[[local bindto = select(4, ...) ]],"newindex" },
127
+ {[[local newindex = select(5, ...) ]],"newindex and not nilindex" },
128
+ {[[local index = select(5, ...) ]],"index and not nilindex" },
129
+ {[[local registry = class.registry ]],"private" },
130
+ {[[local result ]],"index and (private or protected)" },
131
+ {[[return function (state, name, value) ]],"newindex" },
132
+ {[[return function (state, name) ]],"index" },
133
+ {[[ result = meta[name] ]],"index and (private or protected)" },
134
+ {[[ return meta[name] ]],"index and public" },
135
+ {[[ or index[name] ]],"index and tableindex" },
136
+ {[[ or index(state, name) ]],"index and functionindex" },
137
+ {[[ if result == nil then ]],"index and (private or protected)" },
138
+ {[[ if meta[name] == nil then ]],"newindex and (private or protected or not nilindex)" },
139
+ {[[ state = Public[state] ]],"private or protected" },
140
+ {[[ local Protected = registry[getmetatable(state)] ]],"private" },
141
+ {[[ if Protected then state = Protected[state] end ]],"private" },
142
+ {[[ return state[name] ]],"index and (private or protected)" },
143
+ {[[ state[name] = bindto(class, value) ]],"newindex and (private or protected) and nilindex" },
144
+ {[[ newindex[name] = bindto(class, value) ]],"newindex and tableindex" },
145
+ {[[ return newindex(state, name, bindto(class, value))]],"newindex and functionindex" },
146
+ {[[ else ]],"newindex and (private or protected or not nilindex)" },
147
+ {[[ return rawset(state, name, bindto(class, value)) ]],"newindex" },
148
+ {[[ end ]],"private or protected or (newindex and not nilindex)" },
149
+ {[[ return result ]],"index and (private or protected)" },
150
+ {[[end ]]},
151
+ }
152
+
153
+ local function createindexer(class, scope, action)
154
+ local meta = class:getmeta(scope)
155
+ local index = meta["__"..action]
156
+ local indextype = type(index).."index"
157
+ local codename = table.concat({scope,action,index and ("with "..indextype)}," ")
158
+
159
+ return indexer:execute({
160
+ [action] = true,
161
+ [scope] = true,
162
+ [indextype] = true,
163
+ },
164
+ Object,
165
+ meta,
166
+ class,
167
+ bindto,
168
+ index
169
+ )
170
+ end
171
+
172
+ local function unwrap(meta, tag)
173
+ local indexer
174
+ local key = "__"..tag
175
+ local func = assert(meta[key], "no indexer found in scoped class metatable.")
176
+ local name, value
177
+ local i = 1
178
+ repeat
179
+ name, value = debug.getupvalue(func, i)
180
+ i = i + 1
181
+ until name == nil or name == tag
182
+ return value
183
+ end
184
+ --------------------------------------------------------------------------------
185
+ --------------------------------------------------------------------------------
186
+ --------------------------------------------------------------------------------
187
+ local function supersiterator(stack, class)
188
+ class = stack[class]
189
+ if class then
190
+ for _, super in ipairs(class.supers) do
191
+ stack:insert(super, class)
192
+ end
193
+ return class
194
+ end
195
+ end
196
+ local function hierarchyof(class)
197
+ local stack = OrderedSet()
198
+ stack:push(class)
199
+ return supersiterator, stack, OrderedSet.firstkey
200
+ end
201
+ --------------------------------------------------------------------------------
202
+ local function publicproxy_call(_, object)
203
+ return this(object)
204
+ end
205
+
206
+ local function protectedproxy_call(_, object)
207
+ return prot(object)
208
+ end
209
+
210
+ local function privateproxy_call(_, object, class)
211
+ return priv(object, class)
212
+ end
213
+ --------------------------------------------------------------------------------
214
+ local ScopedClass = base.class({}, CachedClass)
215
+
216
+ function ScopedClass:getmeta(scope)
217
+ return self[scope] and self[scope].class
218
+ or
219
+ (scope == "public") and self.class
220
+ or
221
+ nil
222
+ end
223
+
224
+ function ScopedClass:getmembers(scope)
225
+ return self.members[scope]
226
+ end
227
+
228
+ function ScopedClass:__init(class)
229
+ if not class then class = { public = {} } end
230
+
231
+ -- adjust class definition to use scoped member tables
232
+ if type(class.public) ~= "table" then
233
+ if
234
+ (type(class.protected) == "table")
235
+ or
236
+ (type(class.private) == "table")
237
+ then
238
+ class.public = {}
239
+ else
240
+ local public = table.copy(class)
241
+ table.clear(class)
242
+ class.public = public
243
+ end
244
+ end
245
+
246
+ -- initialize scoped cached class
247
+ self = CachedClass.__init(self, class)
248
+ self.registry = { [self.class] = false }
249
+
250
+ -- define scoped class proxy for public state
251
+ rawset(self.proxy, "public", setmetatable({}, {
252
+ __call = publicproxy_call,
253
+ __index = self.class,
254
+ __newindex = function(_, field, value)
255
+ self:updatefield(field, value, "public")
256
+ end,
257
+ }))
258
+
259
+ return self
260
+ end
261
+
262
+ function ScopedClass:addsubclass(class)
263
+ CachedClass.addsubclass(self, class)
264
+
265
+ local public = class.class
266
+ for super in hierarchyof(self) do
267
+ local registry = super.registry
268
+ if registry then -- if super is a scoped class
269
+ registry[public] = false
270
+ super[public] = super.private
271
+ end
272
+ end
273
+ end
274
+
275
+ function ScopedClass:removesubclass(class)
276
+ CachedClass.removesubclass(self, class)
277
+
278
+ local public = self.class
279
+ local protected = self:getmeta("protected")
280
+ local private = self:getmeta("private")
281
+
282
+ for super in hierarchyof(self) do
283
+ local registry = super.registry
284
+ if registry then -- if super is a scoped class
285
+ registry[public] = nil
286
+ super[public] = nil
287
+ if protected then
288
+ registry[protected] = nil
289
+ super[protected] = nil
290
+ end
291
+ if private then
292
+ registry[private] = nil
293
+ super[private] = nil
294
+ end
295
+ end
296
+ end
297
+ end
298
+
299
+ local function copymembers(class, source, destiny)
300
+ if source then
301
+ if not destiny then destiny = {} end
302
+ for field, value in pairs(source) do
303
+ destiny[field] = bindto(class, value)
304
+ end
305
+ end
306
+ return destiny
307
+ end
308
+ function ScopedClass:updatemembers()
309
+ --
310
+ -- metatables to collect with current members
311
+ --
312
+ local public = table.clear(self.class)
313
+ local protected
314
+ local private
315
+
316
+ --
317
+ -- copy inherited members
318
+ --
319
+ local publicindex, publicnewindex
320
+ local protectedindex, protectednewindex
321
+ local superclasses = self.supers
322
+ for i = #superclasses, 1, -1 do
323
+ local super = superclasses[i]
324
+
325
+ -- copy members from superclass metatables
326
+ public = table.copy(super.class, public)
327
+
328
+ if base.instanceof(super, ScopedClass) then
329
+ -- copy protected members from superclass metatables
330
+ protected = table.copy(super:getmeta("protected"), protected)
331
+
332
+ -- extract the __index and __newindex values
333
+ publicindex = unwrap(public, "index") or publicindex
334
+ publicnewindex = unwrap(public, "newindex") or publicnewindex
335
+ if protected then
336
+ protectedindex = unwrap(protected, "index") or protectedindex
337
+ protectednewindex = unwrap(protected, "newindex") or protectednewindex
338
+ end
339
+ end
340
+ end
341
+ public.__index = publicindex
342
+ public.__newindex = publicnewindex
343
+ if protected then
344
+ protected.__index = protectedindex
345
+ protected.__newindex = protectednewindex
346
+ end
347
+
348
+ --
349
+ -- copy members defined in the class
350
+ --
351
+ public = copymembers(self, self.members.public, public)
352
+ protected = copymembers(self, self.members.protected, protected)
353
+ private = copymembers(self, self.members.private, private)
354
+
355
+ --
356
+ -- setup public metatable with proper indexers
357
+ --
358
+ public.__index = createindexer(self, "public", "index")
359
+ public.__newindex = createindexer(self, "public", "newindex")
360
+
361
+ --
362
+ -- setup proper protected state features: pool, proxy and indexers
363
+ --
364
+ if protected then
365
+ if not self.protected then
366
+ -- create state object pool and class proxy for protected state
367
+ self.protected = ProtectedPool(protected)
368
+ rawset(self.proxy, "protected", setmetatable({}, {
369
+ __call = protectedproxy_call,
370
+ __index = protected,
371
+ __newindex = function(_, field, value)
372
+ self:updatefield(field, value, "protected")
373
+ end,
374
+ }))
375
+ -- register new pool in superclasses
376
+ local protected_pool = self.protected
377
+ for super in hierarchyof(self) do
378
+ local registry = super.registry
379
+ if registry then
380
+ registry[public] = protected_pool
381
+ registry[protected] = false
382
+
383
+ local pool = super.private
384
+ if pool then
385
+ super[public] = pool
386
+ super[protected] = pool
387
+ else
388
+ super[public] = protected_pool
389
+ end
390
+ end
391
+ end
392
+ else
393
+ -- update current metatable with new members
394
+ protected = table.copy(protected, table.clear(self.protected.class))
395
+ end
396
+
397
+ -- setup metatable with proper indexers
398
+ protected.__index = createindexer(self, "protected", "index")
399
+ protected.__newindex = createindexer(self, "protected", "newindex")
400
+
401
+ elseif self.protected then
402
+ -- remove old pool from registry in superclasses
403
+ local protected_pool = self.protected
404
+ for super in hierarchyof(self) do
405
+ local registry = super.registry
406
+ if registry then
407
+ registry[public] = false
408
+ registry[protected_pool.class] = nil
409
+
410
+ super[public] = super.private
411
+ super[protected_pool.class] = nil
412
+ end
413
+ end
414
+ -- remove state object pool and class proxy for protected state
415
+ self.protected = nil
416
+ rawset(self.proxy, "protected", nil)
417
+ end
418
+
419
+ --
420
+ -- setup proper private state features: pool, proxy and indexers
421
+ --
422
+ if private then
423
+ if not self.private then
424
+ -- create state object pool and class proxy for private state
425
+ self.private = PrivatePool(private)
426
+ rawset(self.proxy, "private", setmetatable({}, {
427
+ __call = privateproxy_call,
428
+ __index = private,
429
+ __newindex = function(_, field, value)
430
+ self:updatefield(field, value, "private")
431
+ end
432
+ }))
433
+ -- registry new pool in superclasses
434
+ local private_pool = self.private
435
+ local pool = self.protected or Object
436
+ for _, super in ipairs(superclasses) do
437
+ for class in hierarchyof(super) do
438
+ local registry = class.registry
439
+ if registry then -- if class is a scoped class
440
+ registry[private] = pool
441
+ class[private] = class.private_pool or pool
442
+ end
443
+ end
444
+ end
445
+ for meta in pairs(self.registry) do
446
+ self[meta] = private_pool
447
+ end
448
+ else
449
+ -- update current metatable with new members
450
+ private = table.copy(private, table.clear(self:getmeta("private")))
451
+ end
452
+
453
+ -- setup metatable with proper indexers
454
+ private.__index = createindexer(self, "private", "index")
455
+ private.__newindex = createindexer(self, "private", "newindex")
456
+
457
+ elseif self.private then
458
+ -- remove old pool from registry in superclasses
459
+ local private_pool = self.private
460
+ for _, super in ipairs(superclasses) do
461
+ for class in hierarchyof(super) do
462
+ local registry = class.registry
463
+ if registry then -- if class is a scoped class
464
+ registry[private_pool.class] = nil
465
+ class[private_pool.class] = nil
466
+ end
467
+ end
468
+ end
469
+ for meta, pool in pairs(self.registry) do
470
+ self[meta] = pool or nil
471
+ end
472
+ -- remove state object pool and class proxy for private state
473
+ self.private = nil
474
+ rawset(self.proxy, "private", nil)
475
+ end
476
+ end
477
+
478
+ function ScopedClass:updatefield(name, member, scope) -- [[VERBOSE]] verbose:scoped(true, "updating field ",name," on scope ",scope," with value ",member)
479
+ member = bindto(self, member)
480
+ if not scope then
481
+ if
482
+ (
483
+ name == "public"
484
+ or
485
+ name == "protected"
486
+ or
487
+ name == "private"
488
+ ) and (
489
+ member == nil
490
+ or
491
+ type(member) == "table"
492
+ )
493
+ then -- [[VERBOSE]] verbose:scoped("updating scope field")
494
+ self.members[name] = member
495
+ return self:updatemembers() -- [[VERBOSE]] , verbose:scoped(false, "whole scope field updated")
496
+ end
497
+ scope = "public"
498
+ end
499
+
500
+ -- Update member list
501
+ local members = self:getmembers(scope)
502
+ members[name] = member
503
+
504
+ -- Create new member linkage and get old linkage
505
+ local metatable = self:getmeta(scope)
506
+ local old = metatable[name]
507
+
508
+ -- Replace old linkage for the new one
509
+ metatable[name] = member
510
+ if scope ~= "private" then
511
+ local queue = OrderedSet()
512
+ for sub in pairs(self.subs) do
513
+ queue:enqueue(sub)
514
+ end
515
+ while queue:head() do
516
+ local current = queue:dequeue()
517
+ metatable = current:getmeta(scope)
518
+ members = current:getmembers(scope)
519
+ if members and (members[name] == nil) then
520
+ for _, super in ipairs(current.supers) do
521
+ local super_meta = super:getmeta(scope)
522
+ if super_meta[name] ~= nil then
523
+ if super_meta[name] ~= metatable[name] then
524
+ metatable[name] = super_meta[name]
525
+ for sub in pairs(current.subs) do
526
+ queue:enqueue(sub)
527
+ end
528
+ end
529
+ break
530
+ end
531
+ end
532
+ end
533
+ end
534
+ end -- [[VERBOSE]] verbose:scoped(false, "field updated")
535
+ return old
536
+ end
537
+ --------------------------------------------------------------------------------
538
+ function class(class, ...)
539
+ class = getclass(class) or ScopedClass(class)
540
+ class:updatehierarchy(...)
541
+ class:updateinheritance()
542
+ return class.proxy
543
+ end
544
+ --------------------------------------------------------------------------------
545
+ local cached_classof = classof
546
+ function classof(object)
547
+ return cached_classof(this(object))
548
+ end
549
+ -------------------------------------------------------------------------------
550
+ function methodfunction(method)
551
+ local name, value = debug.getupvalue(method, 5)
552
+ assert(name == "method", "Oops! Got the wrong upvalue in 'methodfunction'")
553
+ return value
554
+ end
555
+ --------------------------------------------------------------------------------
556
+ function methodclass(method)
557
+ local name, value = debug.getupvalue(method, 3)
558
+ assert(name == "class", "Oops! Got the wrong upvalue in 'methodclass'")
559
+ return value.proxy
560
+ end
561
+ --------------------------------------------------------------------------------
562
+ function this(object)
563
+ return Object[object] or object
564
+ end
565
+ --------------------------------------------------------------------------------
566
+ function priv(object, class)
567
+ if not class then class = classof(object) end
568
+ class = getclass(class)
569
+ if class and class.private then
570
+ if base.classof(object) == class.private.class
571
+ then return object -- private object
572
+ else return class.private[object] -- protected or public object
573
+ end
574
+ end
575
+ end
576
+ --------------------------------------------------------------------------------
577
+ function prot(object)
578
+ local class = getclass(classof(object))
579
+ if class and class.protected then
580
+ if base.classof(object) == class.protected.class
581
+ then return object -- protected object
582
+ else return class.protected[this(object)] -- private or public object
583
+ end
584
+ end
585
+ end