dub 0.2.2 → 1.0.0
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.
Potentially problematic release.
This version of dub might be problematic. Click here for more details.
- data/History.txt +92 -0
- data/LICENSE +20 -0
- data/README.rdoc +115 -0
- data/Rakefile +59 -0
- data/dub.gemspec +197 -0
- data/lib/dub/argument.rb +286 -0
- data/lib/dub/entities_unescape.rb +9 -0
- data/lib/dub/function.rb +177 -0
- data/lib/dub/function_group.rb +72 -0
- data/lib/dub/generator.rb +15 -0
- data/lib/dub/group.rb +20 -0
- data/lib/dub/klass.rb +338 -0
- data/lib/dub/lua/class.cpp.erb +114 -0
- data/lib/dub/lua/class_gen.rb +96 -0
- data/lib/dub/lua/function.cpp.erb +15 -0
- data/lib/dub/lua/function_gen.rb +329 -0
- data/lib/dub/lua/group.cpp.erb +9 -0
- data/lib/dub/lua/lua_cpp_helper.cpp +259 -0
- data/lib/dub/lua/lua_cpp_helper.h +219 -0
- data/lib/dub/lua/lua_object.cpp +158 -0
- data/lib/dub/lua/lua_object.h +69 -0
- data/lib/dub/lua/namespace.cpp.erb +42 -0
- data/lib/dub/lua/namespace_gen.rb +69 -0
- data/lib/dub/lua.rb +24 -0
- data/lib/dub/member_extraction.rb +128 -0
- data/lib/dub/namespace.rb +295 -0
- data/lib/dub/opts_parser.rb +30 -0
- data/lib/dub/parser.rb +46 -0
- data/lib/dub/templates/lua_template.erb +21 -0
- data/lib/dub/version.rb +3 -0
- data/lib/dub.rb +24 -20
- data/test/argument_test.rb +581 -0
- data/test/fixtures/app/CMakeLists.txt +54 -0
- data/test/fixtures/app/Doxyfile +1600 -0
- data/test/fixtures/app/bindings/all_lua.cpp +299 -0
- data/test/fixtures/app/include/matrix.h +283 -0
- data/test/fixtures/app/make_lua_bindings.rb +13 -0
- data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
- data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
- data/test/fixtures/app/vendor/lua/HISTORY +183 -0
- data/test/fixtures/app/vendor/lua/INSTALL +99 -0
- data/test/fixtures/app/vendor/lua/Makefile +183 -0
- data/test/fixtures/app/vendor/lua/README +37 -0
- data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
- data/test/fixtures/app/vendor/lua/lapi.h +16 -0
- data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
- data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
- data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
- data/test/fixtures/app/vendor/lua/lcode.c +839 -0
- data/test/fixtures/app/vendor/lua/lcode.h +76 -0
- data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
- data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
- data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
- data/test/fixtures/app/vendor/lua/ldo.c +516 -0
- data/test/fixtures/app/vendor/lua/ldo.h +57 -0
- data/test/fixtures/app/vendor/lua/ldump.c +164 -0
- data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
- data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
- data/test/fixtures/app/vendor/lua/lgc.c +711 -0
- data/test/fixtures/app/vendor/lua/lgc.h +110 -0
- data/test/fixtures/app/vendor/lua/liblua.a +0 -0
- data/test/fixtures/app/vendor/lua/linit.c +38 -0
- data/test/fixtures/app/vendor/lua/liolib.c +532 -0
- data/test/fixtures/app/vendor/lua/llex.c +461 -0
- data/test/fixtures/app/vendor/lua/llex.h +81 -0
- data/test/fixtures/app/vendor/lua/llimits.h +128 -0
- data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
- data/test/fixtures/app/vendor/lua/lmem.c +86 -0
- data/test/fixtures/app/vendor/lua/lmem.h +49 -0
- data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
- data/test/fixtures/app/vendor/lua/lobject.c +214 -0
- data/test/fixtures/app/vendor/lua/lobject.h +381 -0
- data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
- data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
- data/test/fixtures/app/vendor/lua/loslib.c +244 -0
- data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
- data/test/fixtures/app/vendor/lua/lparser.h +82 -0
- data/test/fixtures/app/vendor/lua/lstate.c +214 -0
- data/test/fixtures/app/vendor/lua/lstate.h +168 -0
- data/test/fixtures/app/vendor/lua/lstring.c +111 -0
- data/test/fixtures/app/vendor/lua/lstring.h +31 -0
- data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
- data/test/fixtures/app/vendor/lua/ltable.c +588 -0
- data/test/fixtures/app/vendor/lua/ltable.h +40 -0
- data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
- data/test/fixtures/app/vendor/lua/ltm.c +75 -0
- data/test/fixtures/app/vendor/lua/ltm.h +54 -0
- data/test/fixtures/app/vendor/lua/lua.c +695 -0
- data/test/fixtures/app/vendor/lua/lua.h +385 -0
- data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
- data/test/fixtures/app/vendor/lua/luac +0 -0
- data/test/fixtures/app/vendor/lua/luac.c +200 -0
- data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
- data/test/fixtures/app/vendor/lua/lualib.h +53 -0
- data/test/fixtures/app/vendor/lua/lundump.c +223 -0
- data/test/fixtures/app/vendor/lua/lundump.h +36 -0
- data/test/fixtures/app/vendor/lua/lvm.c +765 -0
- data/test/fixtures/app/vendor/lua/lvm.h +36 -0
- data/test/fixtures/app/vendor/lua/lzio.c +82 -0
- data/test/fixtures/app/vendor/lua/lzio.h +67 -0
- data/test/fixtures/app/vendor/lua/matrix.h +102 -0
- data/test/fixtures/app/vendor/lua/print.c +227 -0
- data/test/fixtures/app/vendor/lua/test/README +26 -0
- data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
- data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
- data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
- data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
- data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
- data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
- data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
- data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
- data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
- data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
- data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
- data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
- data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
- data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
- data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
- data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
- data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
- data/test/fixtures/app/xml/classdub_1_1_base.xml +85 -0
- data/test/fixtures/app/xml/classdub_1_1_custom_destructor.xml +67 -0
- data/test/fixtures/app/xml/classdub_1_1_deletable_out_of_lua.xml +43 -0
- data/test/fixtures/app/xml/classdub_1_1_matrix.xml +482 -0
- data/test/fixtures/app/xml/classdub_1_1_no_destructor.xml +49 -0
- data/test/fixtures/app/xml/classdub_1_1_priv_sub_base.xml +89 -0
- data/test/fixtures/app/xml/classdub_1_1_private_constr.xml +68 -0
- data/test/fixtures/app/xml/classdub_1_1_static_constr.xml +69 -0
- data/test/fixtures/app/xml/classdub_1_1_sub_base.xml +89 -0
- data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +252 -0
- data/test/fixtures/app/xml/combine.xslt +15 -0
- data/test/fixtures/app/xml/compound.xsd +814 -0
- data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
- data/test/fixtures/app/xml/index.xml +91 -0
- data/test/fixtures/app/xml/index.xsd +66 -0
- data/test/fixtures/app/xml/matrix_8h.xml +310 -0
- data/test/fixtures/app/xml/namespacedub.xml +48 -0
- data/test/fixtures/classcv_1_1_mat.xml +1996 -0
- data/test/fixtures/classcv_1_1_point__.xml +341 -0
- data/test/fixtures/classcv_1_1_scalar__.xml +269 -0
- data/test/fixtures/classcv_1_1_size__.xml +270 -0
- data/test/fixtures/dummy_class.cpp.erb +1 -0
- data/test/fixtures/dummy_function.cpp.erb +1 -0
- data/test/fixtures/group___magic_type.xml +406 -0
- data/test/fixtures/namespacecv.xml +12659 -0
- data/test/function_group_test.rb +43 -0
- data/test/function_test.rb +405 -0
- data/test/group_test.rb +241 -0
- data/test/helper.rb +34 -0
- data/test/klass_test.rb +551 -0
- data/test/lua_function_gen_test.rb +242 -0
- data/test/namespace_test.rb +220 -0
- data/test/parser_test.rb +36 -0
- metadata +229 -272
- checksums.yaml +0 -7
- data/lib/open_api_sdk/analytics.rb +0 -99
- data/lib/open_api_sdk/domains.rb +0 -353
- data/lib/open_api_sdk/dub.rb +0 -88
- data/lib/open_api_sdk/links.rb +0 -766
- data/lib/open_api_sdk/metatags.rb +0 -54
- data/lib/open_api_sdk/models/operations/bulkcreatelinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/bulkupdatelinks_requestbody.rb +0 -27
- data/lib/open_api_sdk/models/operations/bulkupdatelinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/color.rb +0 -24
- data/lib/open_api_sdk/models/operations/createdomain_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/createdomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/createlink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/createlink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/createtag_requestbody.rb +0 -32
- data/lib/open_api_sdk/models/operations/createtag_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/data.rb +0 -83
- data/lib/open_api_sdk/models/operations/deletedomain_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletedomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/deletedomain_responsebody.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletelink_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/deletelink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/deletelink_responsebody.rb +0 -24
- data/lib/open_api_sdk/models/operations/event.rb +0 -21
- data/lib/open_api_sdk/models/operations/getlinkinfo_request.rb +0 -33
- data/lib/open_api_sdk/models/operations/getlinkinfo_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getlinks_request.rb +0 -51
- data/lib/open_api_sdk/models/operations/getlinks_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getlinkscount_request.rb +0 -48
- data/lib/open_api_sdk/models/operations/getlinkscount_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getmetatags_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/getmetatags_response.rb +0 -33
- data/lib/open_api_sdk/models/operations/getmetatags_responsebody.rb +0 -30
- data/lib/open_api_sdk/models/operations/getqrcode_request.rb +0 -39
- data/lib/open_api_sdk/models/operations/getqrcode_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/gettags_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/getworkspace_request.rb +0 -24
- data/lib/open_api_sdk/models/operations/getworkspace_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/groupby.rb +0 -28
- data/lib/open_api_sdk/models/operations/interval.rb +0 -25
- data/lib/open_api_sdk/models/operations/level.rb +0 -21
- data/lib/open_api_sdk/models/operations/listdomains_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/paymentprocessor.rb +0 -20
- data/lib/open_api_sdk/models/operations/requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/retrieveanalytics_request.rb +0 -81
- data/lib/open_api_sdk/models/operations/retrieveanalytics_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/sort.rb +0 -20
- data/lib/open_api_sdk/models/operations/trackcustomer_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/trackcustomer_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/trackcustomer_responsebody.rb +0 -33
- data/lib/open_api_sdk/models/operations/tracklead_requestbody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracklead_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/tracklead_responsebody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracksale_requestbody.rb +0 -42
- data/lib/open_api_sdk/models/operations/tracksale_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/tracksale_responsebody.rb +0 -42
- data/lib/open_api_sdk/models/operations/updatedomain_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatedomain_requestbody.rb +0 -33
- data/lib/open_api_sdk/models/operations/updatedomain_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updatelink_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatelink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/updatelink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updatetag_color.rb +0 -24
- data/lib/open_api_sdk/models/operations/updatetag_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updatetag_requestbody.rb +0 -32
- data/lib/open_api_sdk/models/operations/updatetag_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/updateworkspace_request.rb +0 -27
- data/lib/open_api_sdk/models/operations/updateworkspace_requestbody.rb +0 -27
- data/lib/open_api_sdk/models/operations/updateworkspace_response.rb +0 -60
- data/lib/open_api_sdk/models/operations/upsertlink_requestbody.rb +0 -95
- data/lib/open_api_sdk/models/operations/upsertlink_response.rb +0 -60
- data/lib/open_api_sdk/models/operations.rb +0 -74
- data/lib/open_api_sdk/models/shared/badrequest.rb +0 -24
- data/lib/open_api_sdk/models/shared/code.rb +0 -18
- data/lib/open_api_sdk/models/shared/color.rb +0 -24
- data/lib/open_api_sdk/models/shared/conflict.rb +0 -24
- data/lib/open_api_sdk/models/shared/conflict_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/conflict_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/countrycode.rb +0 -267
- data/lib/open_api_sdk/models/shared/domains.rb +0 -27
- data/lib/open_api_sdk/models/shared/domainschema.rb +0 -48
- data/lib/open_api_sdk/models/shared/error.rb +0 -30
- data/lib/open_api_sdk/models/shared/forbidden.rb +0 -24
- data/lib/open_api_sdk/models/shared/forbidden_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/forbidden_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/geo.rb +0 -771
- data/lib/open_api_sdk/models/shared/internalservererror.rb +0 -24
- data/lib/open_api_sdk/models/shared/internalservererror_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/internalservererror_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/inviteexpired.rb +0 -24
- data/lib/open_api_sdk/models/shared/inviteexpired_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/inviteexpired_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/linkgeotargeting.rb +0 -771
- data/lib/open_api_sdk/models/shared/linkschema.rb +0 -142
- data/lib/open_api_sdk/models/shared/notfound.rb +0 -24
- data/lib/open_api_sdk/models/shared/notfound_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/notfound_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/plan.rb +0 -24
- data/lib/open_api_sdk/models/shared/ratelimitexceeded.rb +0 -24
- data/lib/open_api_sdk/models/shared/ratelimitexceeded_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/ratelimitexceeded_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/role.rb +0 -19
- data/lib/open_api_sdk/models/shared/security.rb +0 -24
- data/lib/open_api_sdk/models/shared/tagschema.rb +0 -30
- data/lib/open_api_sdk/models/shared/unauthorized.rb +0 -24
- data/lib/open_api_sdk/models/shared/unauthorized_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/unauthorized_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/unprocessableentity.rb +0 -24
- data/lib/open_api_sdk/models/shared/unprocessableentity_code.rb +0 -18
- data/lib/open_api_sdk/models/shared/unprocessableentity_error.rb +0 -30
- data/lib/open_api_sdk/models/shared/users.rb +0 -24
- data/lib/open_api_sdk/models/shared/workspaceschema.rb +0 -81
- data/lib/open_api_sdk/models/shared.rb +0 -49
- data/lib/open_api_sdk/qr_codes.rb +0 -97
- data/lib/open_api_sdk/sdkconfiguration.rb +0 -52
- data/lib/open_api_sdk/tags.rb +0 -272
- data/lib/open_api_sdk/track.rb +0 -276
- data/lib/open_api_sdk/utils/metadata_fields.rb +0 -150
- data/lib/open_api_sdk/utils/t.rb +0 -59
- data/lib/open_api_sdk/utils/utils.rb +0 -772
- data/lib/open_api_sdk/workspaces.rb +0 -192
@@ -0,0 +1,219 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2011 by Gaspard Bucher (http://teti.ch).
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
*/
|
23
|
+
|
24
|
+
#ifndef DOXY_GENERATOR_LIB_DOXY_GENERATOR_INCLUDE_LUA_DOXY_HELPER_H_
|
25
|
+
#define DOXY_GENERATOR_LIB_DOXY_GENERATOR_INCLUDE_LUA_DOXY_HELPER_H_
|
26
|
+
|
27
|
+
#include <stdlib.h> // malloc
|
28
|
+
#include <string> // std::string for Exception
|
29
|
+
#include <exception> // std::exception
|
30
|
+
|
31
|
+
#ifdef __cplusplus
|
32
|
+
extern "C" {
|
33
|
+
#endif
|
34
|
+
// We need C linkage because lua lib is compiled as C code
|
35
|
+
#include "lua.h"
|
36
|
+
#include "lauxlib.h"
|
37
|
+
|
38
|
+
#ifdef __cplusplus
|
39
|
+
}
|
40
|
+
#endif
|
41
|
+
/** Try/catch safe versions of luaL_checknumber, luaL_checkudata, .. */
|
42
|
+
|
43
|
+
namespace dub {
|
44
|
+
class Exception : public std::exception
|
45
|
+
{
|
46
|
+
std::string message_;
|
47
|
+
public:
|
48
|
+
explicit Exception(const char *format, ...);
|
49
|
+
|
50
|
+
~Exception() throw();
|
51
|
+
|
52
|
+
const char* what() const throw();
|
53
|
+
};
|
54
|
+
|
55
|
+
class TypeException : public Exception
|
56
|
+
{
|
57
|
+
public:
|
58
|
+
explicit TypeException(lua_State *L, int narg, const char *type, bool is_super = false);
|
59
|
+
};
|
60
|
+
|
61
|
+
} // dub
|
62
|
+
|
63
|
+
|
64
|
+
// ================================================== dubL_check... try/catch safe
|
65
|
+
// these provide the same funcionality of their equivalent luaL_check... but they
|
66
|
+
// throw std::exception which can be caught (eventually to call lua_error)
|
67
|
+
|
68
|
+
lua_Number dubL_checknumber(lua_State *L, int narg) throw(dub::TypeException);
|
69
|
+
|
70
|
+
lua_Number dubL_checkint(lua_State *L, int narg) throw(dub::TypeException);
|
71
|
+
|
72
|
+
const char *dubL_checklstring(lua_State *L, int narg, size_t *len) throw(dub::TypeException);
|
73
|
+
|
74
|
+
lua_Integer dubL_checkinteger(lua_State *L, int narg) throw(dub::TypeException);
|
75
|
+
|
76
|
+
void *dubL_checkudata(lua_State *L, int ud, const char *tname) throw(dub::TypeException);
|
77
|
+
|
78
|
+
// super aware userdata calls
|
79
|
+
void *dubL_checksdata(lua_State *L, int ud, const char *tname) throw(dub::TypeException);
|
80
|
+
// does not throw exceptions (can be used with a #define for luaL_checksdata)
|
81
|
+
void *dubL_checksdata_n(lua_State *L, int ud, const char *tname) throw();
|
82
|
+
|
83
|
+
#define dubL_checkstring(L,n) (dubL_checklstring(L, (n), NULL))
|
84
|
+
#define dubL_checkint(L,n) ((int)dubL_checkinteger(L, (n)))
|
85
|
+
// super aware userdata check (does not throw)
|
86
|
+
#define luaL_checksdata(L, u, t) (dubL_checksdata_n(L, u, t))
|
87
|
+
|
88
|
+
/** ======================================== lua_pushclass */
|
89
|
+
|
90
|
+
/** Push a custom type on the stack.
|
91
|
+
* Since the value is passed as a pointer, we assume it has been created
|
92
|
+
* using 'new' and Lua can safely call delete when it needs to garbage-
|
93
|
+
* -collect it.
|
94
|
+
*/
|
95
|
+
template<class T>
|
96
|
+
void lua_pushclass(lua_State *L, T *ptr, const char *type_name) {
|
97
|
+
T **userdata = (T**)lua_newuserdata(L, sizeof(T*));
|
98
|
+
*userdata = ptr;
|
99
|
+
|
100
|
+
// the userdata is now on top of the stack
|
101
|
+
|
102
|
+
// set metatable (contains methods)
|
103
|
+
luaL_getmetatable(L, type_name);
|
104
|
+
lua_setmetatable(L, -2);
|
105
|
+
}
|
106
|
+
|
107
|
+
/** Push a custom type on the stack and give it the pointer to the userdata.
|
108
|
+
* Passing the userdata enables early deletion from some other thread (GUI)
|
109
|
+
* that safely invalidates the userdatum.
|
110
|
+
*/
|
111
|
+
template<class T>
|
112
|
+
void lua_pushclass2(lua_State *L, T *ptr, const char *type_name) {
|
113
|
+
T **userdata = (T**)lua_newuserdata(L, sizeof(T*));
|
114
|
+
*userdata = ptr;
|
115
|
+
|
116
|
+
// store pointer in class so that it can set it to NULL on destroy with
|
117
|
+
// *userdata = NULL
|
118
|
+
ptr->set_userdata_ptr((void**)userdata);
|
119
|
+
|
120
|
+
// the userdata is now on top of the stack
|
121
|
+
|
122
|
+
// set metatable (contains methods)
|
123
|
+
luaL_getmetatable(L, type_name);
|
124
|
+
lua_setmetatable(L, -2);
|
125
|
+
}
|
126
|
+
|
127
|
+
/** Classes that can be deleted out of Lua should inherit from this class or
|
128
|
+
* implement 'set_userdata_ptr' (and manage the userdata_ptr...)
|
129
|
+
*/
|
130
|
+
class DeletableOutOfLua {
|
131
|
+
void **userdata_ptr_;
|
132
|
+
public:
|
133
|
+
DeletableOutOfLua();
|
134
|
+
|
135
|
+
virtual ~DeletableOutOfLua();
|
136
|
+
|
137
|
+
virtual void dub_destroy();
|
138
|
+
|
139
|
+
/** @internal
|
140
|
+
*/
|
141
|
+
void set_userdata_ptr(void **ptr);
|
142
|
+
|
143
|
+
protected:
|
144
|
+
/** MUST be called from the custom destructor.
|
145
|
+
*/
|
146
|
+
void dub_cleanup();
|
147
|
+
};
|
148
|
+
|
149
|
+
/** Push a custom type on the stack.
|
150
|
+
* Since the value is passed by value, we have to allocate a copy
|
151
|
+
* using 'new' so that Lua can keep it.
|
152
|
+
*/
|
153
|
+
template<class T>
|
154
|
+
void lua_pushclass(lua_State *L, T &val, const char *type_name) {
|
155
|
+
T *val_ptr = new T(val);
|
156
|
+
lua_pushclass<T>(L, val_ptr, type_name);
|
157
|
+
}
|
158
|
+
|
159
|
+
/** ======================================== DubArgPointer */
|
160
|
+
|
161
|
+
/** This class is a helper to provide pointer to data from
|
162
|
+
* Lua to C (but maybe it's not a good idea).
|
163
|
+
*/
|
164
|
+
template<class T>
|
165
|
+
class DubArgPointer {
|
166
|
+
public:
|
167
|
+
DubArgPointer() : data(NULL) {}
|
168
|
+
|
169
|
+
~DubArgPointer() {
|
170
|
+
if (data) free(data);
|
171
|
+
}
|
172
|
+
|
173
|
+
// TODO: we should have a hint on required sizes !
|
174
|
+
T *operator()(lua_State *L, int index) {
|
175
|
+
if (!lua_istable(L, index)) throw 1;
|
176
|
+
|
177
|
+
size_t size = lua_objlen(L, index);
|
178
|
+
if (size == 0) return NULL;
|
179
|
+
|
180
|
+
data = (T*)malloc(size * sizeof(T));
|
181
|
+
if (!data) throw 1;
|
182
|
+
|
183
|
+
for(size_t i=0; i < size; ++i) {
|
184
|
+
data[i] = get_value_at(L, index, i+1);
|
185
|
+
}
|
186
|
+
return data;
|
187
|
+
}
|
188
|
+
|
189
|
+
private:
|
190
|
+
T get_value_at(lua_State *L, int table_index, int index) {
|
191
|
+
lua_pushinteger(L, index + 1);
|
192
|
+
lua_gettable(L, index);
|
193
|
+
T value = luaL_checknumber(L, -1);
|
194
|
+
lua_pop(L, 1);
|
195
|
+
return value;
|
196
|
+
}
|
197
|
+
|
198
|
+
T *data;
|
199
|
+
};
|
200
|
+
|
201
|
+
/** ======================================== is_userdata */
|
202
|
+
|
203
|
+
bool is_userdata(lua_State *L, int index, const char *tname);
|
204
|
+
|
205
|
+
/** ======================================== register_constants */
|
206
|
+
|
207
|
+
typedef struct lua_constants_Reg {
|
208
|
+
const char *name;
|
209
|
+
double constant;
|
210
|
+
} lua_constants_Reg;
|
211
|
+
|
212
|
+
int libsize (const lua_constants_Reg *l);
|
213
|
+
|
214
|
+
void register_constants(lua_State *L, const char *name_space, const lua_constants_Reg *l);
|
215
|
+
|
216
|
+
// The metatable lives in libname.ClassName_
|
217
|
+
void register_mt(lua_State *L, const char *libname, const char *class_name);
|
218
|
+
|
219
|
+
#endif // DOXY_GENERATOR_LIB_DOXY_GENERATOR_INCLUDE_LUA_DOXY_HELPER_H_
|
@@ -0,0 +1,158 @@
|
|
1
|
+
/*
|
2
|
+
==============================================================================
|
3
|
+
|
4
|
+
This file is part of the LUBYK project (http://lubyk.org)
|
5
|
+
Copyright (c) 2007-2011 by Gaspard Bucher (http://teti.ch).
|
6
|
+
|
7
|
+
------------------------------------------------------------------------------
|
8
|
+
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
11
|
+
in the Software without restriction, including without limitation the rights
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
14
|
+
furnished to do so, subject to the following conditions:
|
15
|
+
|
16
|
+
The above copyright notice and this permission notice shall be included in
|
17
|
+
all copies or substantial portions of the Software.
|
18
|
+
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
25
|
+
THE SOFTWARE.
|
26
|
+
|
27
|
+
==============================================================================
|
28
|
+
*/
|
29
|
+
#include "lua_object.h"
|
30
|
+
#include "lua_cpp_helper.h"
|
31
|
+
|
32
|
+
using namespace dub;
|
33
|
+
|
34
|
+
LuaObject::LuaObject() throw () :
|
35
|
+
lua_(NULL) {
|
36
|
+
}
|
37
|
+
|
38
|
+
int LuaObject::lua_init(lua_State *L, const char *type_name) throw() {
|
39
|
+
// ... <self> or new table
|
40
|
+
setupSuper(L); // creates self if there is no table (without a 'super' field)
|
41
|
+
// ... <self>.super = userdata
|
42
|
+
// ... <self> <udata>
|
43
|
+
|
44
|
+
setupMetatable(L, type_name);
|
45
|
+
// ... <self> <udata>
|
46
|
+
|
47
|
+
setupLuaThread(L);
|
48
|
+
// <self>
|
49
|
+
return 1;
|
50
|
+
}
|
51
|
+
|
52
|
+
void LuaObject::setupSuper(lua_State *L) throw() {
|
53
|
+
if (!lua_istable(L, -1)) {
|
54
|
+
lua_newtable(L);
|
55
|
+
}
|
56
|
+
// ... <self>
|
57
|
+
LuaObject **userdata = (LuaObject**)lua_newuserdata(L, sizeof(LuaObject*));
|
58
|
+
*userdata = this;
|
59
|
+
// ... <self> <udata>
|
60
|
+
lua_pushlstring(L, "super", 5);
|
61
|
+
// ... <self> <udata> <"super">
|
62
|
+
lua_pushvalue(L, -2);
|
63
|
+
// ... <self> <udata> <"super"> <udata>
|
64
|
+
lua_rawset(L, -4);
|
65
|
+
// self.super = udata
|
66
|
+
// ... <self> <udata>
|
67
|
+
}
|
68
|
+
|
69
|
+
void LuaObject::setupMetatable(lua_State *L, const char *type_name) throw() {
|
70
|
+
// set metatable
|
71
|
+
luaL_getmetatable(L, type_name);
|
72
|
+
// ... <self> <udata> <mt>
|
73
|
+
lua_pushvalue(L, -1);
|
74
|
+
// ... <self> <udata> <mt> <mt>
|
75
|
+
lua_setmetatable(L, -3);
|
76
|
+
// ... <self> <udata> <mt>
|
77
|
+
lua_setmetatable(L, -3);
|
78
|
+
// ... <self> <udata>
|
79
|
+
}
|
80
|
+
|
81
|
+
// dependency relationship:
|
82
|
+
// self.super ---> udata ---> fenv ---> thread ---> self
|
83
|
+
//
|
84
|
+
// Thanks to Robert G. Jakabosky for the idea to use lua_xmove
|
85
|
+
// instead of weak tables to store the function reference.
|
86
|
+
void LuaObject::setupLuaThread(lua_State *L) throw() {
|
87
|
+
// ... <self> <udata>
|
88
|
+
lua_getfenv(L, -1);
|
89
|
+
// ... <self> <udata> <env>
|
90
|
+
lua_pushstring(L, ".");
|
91
|
+
// ... <self> <udata> <env> "."
|
92
|
+
lua_rawget(L, -2); // <env>["."]
|
93
|
+
// ... <self> <udata> <env> <??>
|
94
|
+
if (!lua_rawequal(L, -1, -3)) {
|
95
|
+
// ... <self> <udata> <env> <nil>
|
96
|
+
// does not have it's own env table
|
97
|
+
lua_pop(L, 2);
|
98
|
+
// ... <self> <udata>
|
99
|
+
// Create env table
|
100
|
+
lua_newtable(L);
|
101
|
+
// ... <self> <udata> <env>
|
102
|
+
lua_pushstring(L, ".");
|
103
|
+
// ... <self> <udata> <env> "."
|
104
|
+
lua_pushvalue(L, -3);
|
105
|
+
// ... <self> <udata> <env> "." <udata>
|
106
|
+
lua_rawset(L, -3); // env["."] = udata
|
107
|
+
// ... <self> <udata> <env>
|
108
|
+
lua_pushvalue(L, -1);
|
109
|
+
// ... <self> <udata> <env> <env>
|
110
|
+
if (!lua_setfenv(L, -3)) {
|
111
|
+
luaL_error(L, "Could not set userdata env on '%s'.", lua_typename(L, lua_type(L, -3)));
|
112
|
+
}
|
113
|
+
// ... <self> <udata> <env>
|
114
|
+
} else {
|
115
|
+
// ... <self> <udata> <env> <self>
|
116
|
+
// has its own env table
|
117
|
+
lua_pop(L, 1);
|
118
|
+
// ... <self> <udata> <env>
|
119
|
+
}
|
120
|
+
|
121
|
+
// ... <self> <udata> <env>
|
122
|
+
if (lua_) {
|
123
|
+
// remove from env
|
124
|
+
luaL_unref(L, -1, thread_in_env_idx_);
|
125
|
+
}
|
126
|
+
|
127
|
+
lua_ = lua_newthread(L);
|
128
|
+
// ... <self> <udata> <env> <thread>
|
129
|
+
|
130
|
+
// Store the thread in the Thread/Socket's environment table so it is not GC too soon
|
131
|
+
thread_in_env_idx_ = luaL_ref(L, -2);
|
132
|
+
// ... <self> <udata> <env>
|
133
|
+
|
134
|
+
lua_pop(L, 2);
|
135
|
+
// ... <self>
|
136
|
+
|
137
|
+
// Transfer copies of <self> to thread stack
|
138
|
+
lua_pushvalue(L, -1);
|
139
|
+
// ... <self> <self>
|
140
|
+
lua_xmove(L, lua_, 1);
|
141
|
+
// ... <self>
|
142
|
+
|
143
|
+
// lua_ stack is now
|
144
|
+
// <self>
|
145
|
+
|
146
|
+
// L is now
|
147
|
+
// <self>
|
148
|
+
}
|
149
|
+
|
150
|
+
void LuaObject::pushLuaCallback(const char *method, int len) const {
|
151
|
+
// <self>
|
152
|
+
lua_pushlstring(lua_, method, len);
|
153
|
+
// <self> <"method">
|
154
|
+
lua_gettable(lua_, -2);
|
155
|
+
// <self> <?>
|
156
|
+
lua_pushvalue(lua_, 1);
|
157
|
+
// <self> <?> <self>
|
158
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/*
|
2
|
+
==============================================================================
|
3
|
+
|
4
|
+
This file is part of the LUBYK project (http://lubyk.org)
|
5
|
+
Copyright (c) 2007-2011 by Gaspard Bucher (http://teti.ch).
|
6
|
+
|
7
|
+
------------------------------------------------------------------------------
|
8
|
+
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
11
|
+
in the Software without restriction, including without limitation the rights
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
14
|
+
furnished to do so, subject to the following conditions:
|
15
|
+
|
16
|
+
The above copyright notice and this permission notice shall be included in
|
17
|
+
all copies or substantial portions of the Software.
|
18
|
+
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
25
|
+
THE SOFTWARE.
|
26
|
+
|
27
|
+
==============================================================================
|
28
|
+
*/
|
29
|
+
#ifndef INCLUDE_DUB_LUA_OBJECT_H_
|
30
|
+
#define INCLUDE_DUB_LUA_OBJECT_H_
|
31
|
+
|
32
|
+
namespace dub {
|
33
|
+
/** Calls a lua function back.
|
34
|
+
*/
|
35
|
+
class LuaObject
|
36
|
+
{
|
37
|
+
public:
|
38
|
+
/** Prepare tables to work with the table based self idion.
|
39
|
+
* expects stack to be:
|
40
|
+
* ... self
|
41
|
+
* if self (last argument) is a table, it is used as self.
|
42
|
+
* Otherwise, a new table is created.
|
43
|
+
* The method leaves "self" on top of the stack, with self.super = this.
|
44
|
+
*/
|
45
|
+
LuaObject() throw();
|
46
|
+
|
47
|
+
int lua_init(lua_State *L, const char *type_name) throw();
|
48
|
+
|
49
|
+
virtual ~LuaObject() {}
|
50
|
+
|
51
|
+
/** The caller should lock before calling this.
|
52
|
+
* TODO: The 'const' stuff is stupid: can't we remove it ?
|
53
|
+
*/
|
54
|
+
void pushLuaCallback(const char *method, int len) const;
|
55
|
+
|
56
|
+
lua_State *lua_;
|
57
|
+
|
58
|
+
private:
|
59
|
+
|
60
|
+
int thread_in_env_idx_;
|
61
|
+
|
62
|
+
void setupSuper(lua_State *L) throw();
|
63
|
+
void setupMetatable(lua_State *L, const char *type_name) throw() ;
|
64
|
+
void setupLuaThread(lua_State *L) throw();
|
65
|
+
};
|
66
|
+
|
67
|
+
} // dub
|
68
|
+
|
69
|
+
#endif // INCLUDE_DUB_LUA_OBJECT_H_
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#include "<%= @namespace.header %>"
|
2
|
+
|
3
|
+
#include "lua_cpp_helper.h"
|
4
|
+
|
5
|
+
using namespace <%= @namespace.name %>;
|
6
|
+
|
7
|
+
<% if @namespace.members; @namespace.members.each do |function| %>
|
8
|
+
|
9
|
+
<%= function %>
|
10
|
+
|
11
|
+
<% end; end %>
|
12
|
+
|
13
|
+
// Register namespace
|
14
|
+
|
15
|
+
static const struct luaL_Reg <%= @namespace.name %>_functions[] = {
|
16
|
+
<% if @namespace.has_functions? %>
|
17
|
+
<%= indent(functions_registration, 2) %>,
|
18
|
+
<% end %>
|
19
|
+
{NULL, NULL},
|
20
|
+
};
|
21
|
+
|
22
|
+
<% if @namespace.has_constants? %>
|
23
|
+
static const struct lua_constants_Reg <%= @namespace.name %>_namespace_constants[] = {
|
24
|
+
<%= indent(constants_registration, 2) %>,
|
25
|
+
{NULL, NULL},
|
26
|
+
};
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
#ifdef DUB_LUA_NO_OPEN
|
30
|
+
int luaload_<%= @namespace.lib_name %>(lua_State *L) {
|
31
|
+
#else
|
32
|
+
extern "C" int luaopen_<%= @namespace.lib_name %>(lua_State *L) {
|
33
|
+
#endif
|
34
|
+
// register functions
|
35
|
+
luaL_register(L, <%= @namespace.name.inspect %>, <%= @namespace.name %>_functions);
|
36
|
+
|
37
|
+
<% if @namespace.has_constants? %>
|
38
|
+
// register namespace enums
|
39
|
+
register_constants(L, <%= @namespace.id_name.inspect %>, <%= @namespace.name %>_namespace_constants);
|
40
|
+
<% end %>
|
41
|
+
return 0;
|
42
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'dub/generator'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Dub
|
5
|
+
module Lua
|
6
|
+
class NamespaceGen < Dub::Generator
|
7
|
+
def initialize
|
8
|
+
@namespace_template = ::ERB.new(File.read(File.join(File.dirname(__FILE__), 'namespace.cpp.erb')))
|
9
|
+
end
|
10
|
+
|
11
|
+
def namespace(namespace)
|
12
|
+
@namespace = namespace
|
13
|
+
@namespace_template.result(binding)
|
14
|
+
end
|
15
|
+
|
16
|
+
def class_generator
|
17
|
+
Lua.class_generator
|
18
|
+
end
|
19
|
+
|
20
|
+
def function_generator
|
21
|
+
Lua.function_generator
|
22
|
+
end
|
23
|
+
|
24
|
+
def functions_registration(namespace = @namespace)
|
25
|
+
(namespace.members || []).map do |method|
|
26
|
+
"{%-32s, #{method.method_name(0)}}" % method.name.inspect
|
27
|
+
end.join(",\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
def constants_registration(namespace = @namespace)
|
31
|
+
res = []
|
32
|
+
if namespace.has_enums?
|
33
|
+
res << namespace.enums.map do |name|
|
34
|
+
"{%-32s, #{namespace.full_type}::#{name}}" % name.inspect
|
35
|
+
end.join(",\n")
|
36
|
+
end
|
37
|
+
|
38
|
+
if namespace.has_defines?
|
39
|
+
res << namespace.defines.map do |name|
|
40
|
+
"{%-32s, #{name}}" % name.inspect
|
41
|
+
end.join(",\n")
|
42
|
+
end
|
43
|
+
|
44
|
+
same = namespace.enums & namespace.defines
|
45
|
+
unless same.empty?
|
46
|
+
# Should never happen (not sure if it would compile ok in the first place)
|
47
|
+
puts "Warning: the following are present both as enum and define: #{same.inspect}"
|
48
|
+
end
|
49
|
+
res.join(",\n\n")
|
50
|
+
end
|
51
|
+
|
52
|
+
def members_list(all_members)
|
53
|
+
all_members
|
54
|
+
#list = (all_members || []).map do |member_or_group|
|
55
|
+
# if member_or_group.kind_of?(Array)
|
56
|
+
# members_list(member_or_group)
|
57
|
+
# elsif ignore_member?(member_or_group)
|
58
|
+
# nil
|
59
|
+
# else
|
60
|
+
# member_or_group
|
61
|
+
# end
|
62
|
+
#end
|
63
|
+
#
|
64
|
+
#list.compact!
|
65
|
+
#list == [] ? nil : list
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/dub/lua.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'dub/lua/function_gen'
|
2
|
+
require 'dub/lua/namespace_gen'
|
3
|
+
require 'dub/lua/class_gen'
|
4
|
+
|
5
|
+
module Dub
|
6
|
+
module Lua
|
7
|
+
def self.function_generator
|
8
|
+
@@function_generator ||= Dub::Lua::FunctionGen.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.class_generator
|
12
|
+
@@class_generator ||= Dub::Lua::ClassGen.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.namespace_generator
|
16
|
+
@@namespace_generator ||= Dub::Lua::NamespaceGen.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.bind(object)
|
20
|
+
object.bind(self)
|
21
|
+
object
|
22
|
+
end
|
23
|
+
end # Lua
|
24
|
+
end # Dub
|