dub 0.2.2 → 0.6.6

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.

Files changed (267) hide show
  1. data/.gitignore +8 -0
  2. data/History.txt +53 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +67 -0
  5. data/Rakefile +59 -0
  6. data/dub.gemspec +201 -0
  7. data/lib/dub/argument.rb +275 -0
  8. data/lib/dub/entities_unescape.rb +9 -0
  9. data/lib/dub/function.rb +163 -0
  10. data/lib/dub/function_group.rb +72 -0
  11. data/lib/dub/generator.rb +15 -0
  12. data/lib/dub/group.rb +24 -0
  13. data/lib/dub/klass.rb +255 -0
  14. data/lib/dub/lua/class.cpp.erb +84 -0
  15. data/lib/dub/lua/class_gen.rb +97 -0
  16. data/lib/dub/lua/function.cpp.erb +18 -0
  17. data/lib/dub/lua/function_gen.rb +265 -0
  18. data/lib/dub/lua/group.cpp.erb +9 -0
  19. data/lib/dub/lua/lua_cpp_helper.h +141 -0
  20. data/lib/dub/lua/namespace.cpp.erb +40 -0
  21. data/lib/dub/lua/namespace_gen.rb +88 -0
  22. data/lib/dub/lua.rb +24 -0
  23. data/lib/dub/member_extraction.rb +92 -0
  24. data/lib/dub/namespace.rb +277 -0
  25. data/lib/dub/opts_parser.rb +30 -0
  26. data/lib/dub/parser.rb +46 -0
  27. data/lib/dub/templates/lua_template.erb +21 -0
  28. data/lib/dub/version.rb +3 -0
  29. data/lib/dub.rb +24 -20
  30. data/test/argument_test.rb +547 -0
  31. data/test/fixtures/app/CMakeLists.txt +54 -0
  32. data/test/fixtures/app/Doxyfile +1600 -0
  33. data/test/fixtures/app/bindings/all_lua.cpp +299 -0
  34. data/test/fixtures/app/include/matrix.h +162 -0
  35. data/test/fixtures/app/make_lua_bindings.rb +13 -0
  36. data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
  37. data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
  38. data/test/fixtures/app/vendor/lua/HISTORY +183 -0
  39. data/test/fixtures/app/vendor/lua/INSTALL +99 -0
  40. data/test/fixtures/app/vendor/lua/Makefile +183 -0
  41. data/test/fixtures/app/vendor/lua/README +37 -0
  42. data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
  43. data/test/fixtures/app/vendor/lua/lapi.h +16 -0
  44. data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
  45. data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
  46. data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
  47. data/test/fixtures/app/vendor/lua/lcode.c +839 -0
  48. data/test/fixtures/app/vendor/lua/lcode.h +76 -0
  49. data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
  50. data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
  51. data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
  52. data/test/fixtures/app/vendor/lua/ldo.c +516 -0
  53. data/test/fixtures/app/vendor/lua/ldo.h +57 -0
  54. data/test/fixtures/app/vendor/lua/ldump.c +164 -0
  55. data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
  56. data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
  57. data/test/fixtures/app/vendor/lua/lgc.c +711 -0
  58. data/test/fixtures/app/vendor/lua/lgc.h +110 -0
  59. data/test/fixtures/app/vendor/lua/liblua.a +0 -0
  60. data/test/fixtures/app/vendor/lua/linit.c +38 -0
  61. data/test/fixtures/app/vendor/lua/liolib.c +532 -0
  62. data/test/fixtures/app/vendor/lua/llex.c +461 -0
  63. data/test/fixtures/app/vendor/lua/llex.h +81 -0
  64. data/test/fixtures/app/vendor/lua/llimits.h +128 -0
  65. data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
  66. data/test/fixtures/app/vendor/lua/lmem.c +86 -0
  67. data/test/fixtures/app/vendor/lua/lmem.h +49 -0
  68. data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
  69. data/test/fixtures/app/vendor/lua/lobject.c +214 -0
  70. data/test/fixtures/app/vendor/lua/lobject.h +381 -0
  71. data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
  72. data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
  73. data/test/fixtures/app/vendor/lua/loslib.c +244 -0
  74. data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
  75. data/test/fixtures/app/vendor/lua/lparser.h +82 -0
  76. data/test/fixtures/app/vendor/lua/lstate.c +214 -0
  77. data/test/fixtures/app/vendor/lua/lstate.h +168 -0
  78. data/test/fixtures/app/vendor/lua/lstring.c +111 -0
  79. data/test/fixtures/app/vendor/lua/lstring.h +31 -0
  80. data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
  81. data/test/fixtures/app/vendor/lua/ltable.c +588 -0
  82. data/test/fixtures/app/vendor/lua/ltable.h +40 -0
  83. data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
  84. data/test/fixtures/app/vendor/lua/ltm.c +75 -0
  85. data/test/fixtures/app/vendor/lua/ltm.h +54 -0
  86. data/test/fixtures/app/vendor/lua/lua.c +695 -0
  87. data/test/fixtures/app/vendor/lua/lua.h +385 -0
  88. data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
  89. data/test/fixtures/app/vendor/lua/luac +0 -0
  90. data/test/fixtures/app/vendor/lua/luac.c +200 -0
  91. data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
  92. data/test/fixtures/app/vendor/lua/lualib.h +53 -0
  93. data/test/fixtures/app/vendor/lua/lundump.c +223 -0
  94. data/test/fixtures/app/vendor/lua/lundump.h +36 -0
  95. data/test/fixtures/app/vendor/lua/lvm.c +765 -0
  96. data/test/fixtures/app/vendor/lua/lvm.h +36 -0
  97. data/test/fixtures/app/vendor/lua/lzio.c +82 -0
  98. data/test/fixtures/app/vendor/lua/lzio.h +67 -0
  99. data/test/fixtures/app/vendor/lua/matrix.h +102 -0
  100. data/test/fixtures/app/vendor/lua/print.c +227 -0
  101. data/test/fixtures/app/vendor/lua/test/README +26 -0
  102. data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
  103. data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
  104. data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
  105. data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
  106. data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
  107. data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
  108. data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
  109. data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
  110. data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
  111. data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
  112. data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
  113. data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
  114. data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
  115. data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
  116. data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
  117. data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
  118. data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
  119. data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
  120. data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
  121. data/test/fixtures/app/xml/classdub_1_1_matrix.xml +341 -0
  122. data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +252 -0
  123. data/test/fixtures/app/xml/combine.xslt +15 -0
  124. data/test/fixtures/app/xml/compound.xsd +814 -0
  125. data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
  126. data/test/fixtures/app/xml/index.xml +48 -0
  127. data/test/fixtures/app/xml/index.xsd +66 -0
  128. data/test/fixtures/app/xml/matrix_8h.xml +179 -0
  129. data/test/fixtures/app/xml/namespacedub.xml +41 -0
  130. data/test/fixtures/classcv_1_1_mat.xml +1996 -0
  131. data/test/fixtures/classcv_1_1_point__.xml +341 -0
  132. data/test/fixtures/classcv_1_1_scalar__.xml +269 -0
  133. data/test/fixtures/classcv_1_1_size__.xml +270 -0
  134. data/test/fixtures/dummy_class.cpp.erb +1 -0
  135. data/test/fixtures/dummy_function.cpp.erb +1 -0
  136. data/test/fixtures/group___magic_type.xml +406 -0
  137. data/test/fixtures/namespacecv.xml +12659 -0
  138. data/test/function_group_test.rb +24 -0
  139. data/test/function_test.rb +395 -0
  140. data/test/group_test.rb +155 -0
  141. data/test/helper.rb +34 -0
  142. data/test/klass_test.rb +422 -0
  143. data/test/lua_function_gen_test.rb +215 -0
  144. data/test/namespace_test.rb +220 -0
  145. data/test/parser_test.rb +36 -0
  146. metadata +232 -274
  147. checksums.yaml +0 -7
  148. data/lib/open_api_sdk/analytics.rb +0 -99
  149. data/lib/open_api_sdk/domains.rb +0 -353
  150. data/lib/open_api_sdk/dub.rb +0 -88
  151. data/lib/open_api_sdk/links.rb +0 -766
  152. data/lib/open_api_sdk/metatags.rb +0 -54
  153. data/lib/open_api_sdk/models/operations/bulkcreatelinks_response.rb +0 -60
  154. data/lib/open_api_sdk/models/operations/bulkupdatelinks_requestbody.rb +0 -27
  155. data/lib/open_api_sdk/models/operations/bulkupdatelinks_response.rb +0 -60
  156. data/lib/open_api_sdk/models/operations/color.rb +0 -24
  157. data/lib/open_api_sdk/models/operations/createdomain_requestbody.rb +0 -33
  158. data/lib/open_api_sdk/models/operations/createdomain_response.rb +0 -60
  159. data/lib/open_api_sdk/models/operations/createlink_requestbody.rb +0 -95
  160. data/lib/open_api_sdk/models/operations/createlink_response.rb +0 -60
  161. data/lib/open_api_sdk/models/operations/createtag_requestbody.rb +0 -32
  162. data/lib/open_api_sdk/models/operations/createtag_response.rb +0 -60
  163. data/lib/open_api_sdk/models/operations/data.rb +0 -83
  164. data/lib/open_api_sdk/models/operations/deletedomain_request.rb +0 -24
  165. data/lib/open_api_sdk/models/operations/deletedomain_response.rb +0 -60
  166. data/lib/open_api_sdk/models/operations/deletedomain_responsebody.rb +0 -24
  167. data/lib/open_api_sdk/models/operations/deletelink_request.rb +0 -24
  168. data/lib/open_api_sdk/models/operations/deletelink_response.rb +0 -60
  169. data/lib/open_api_sdk/models/operations/deletelink_responsebody.rb +0 -24
  170. data/lib/open_api_sdk/models/operations/event.rb +0 -21
  171. data/lib/open_api_sdk/models/operations/getlinkinfo_request.rb +0 -33
  172. data/lib/open_api_sdk/models/operations/getlinkinfo_response.rb +0 -60
  173. data/lib/open_api_sdk/models/operations/getlinks_request.rb +0 -51
  174. data/lib/open_api_sdk/models/operations/getlinks_response.rb +0 -60
  175. data/lib/open_api_sdk/models/operations/getlinkscount_request.rb +0 -48
  176. data/lib/open_api_sdk/models/operations/getlinkscount_response.rb +0 -60
  177. data/lib/open_api_sdk/models/operations/getmetatags_request.rb +0 -24
  178. data/lib/open_api_sdk/models/operations/getmetatags_response.rb +0 -33
  179. data/lib/open_api_sdk/models/operations/getmetatags_responsebody.rb +0 -30
  180. data/lib/open_api_sdk/models/operations/getqrcode_request.rb +0 -39
  181. data/lib/open_api_sdk/models/operations/getqrcode_response.rb +0 -60
  182. data/lib/open_api_sdk/models/operations/gettags_response.rb +0 -60
  183. data/lib/open_api_sdk/models/operations/getworkspace_request.rb +0 -24
  184. data/lib/open_api_sdk/models/operations/getworkspace_response.rb +0 -60
  185. data/lib/open_api_sdk/models/operations/groupby.rb +0 -28
  186. data/lib/open_api_sdk/models/operations/interval.rb +0 -25
  187. data/lib/open_api_sdk/models/operations/level.rb +0 -21
  188. data/lib/open_api_sdk/models/operations/listdomains_response.rb +0 -60
  189. data/lib/open_api_sdk/models/operations/paymentprocessor.rb +0 -20
  190. data/lib/open_api_sdk/models/operations/requestbody.rb +0 -95
  191. data/lib/open_api_sdk/models/operations/retrieveanalytics_request.rb +0 -81
  192. data/lib/open_api_sdk/models/operations/retrieveanalytics_response.rb +0 -60
  193. data/lib/open_api_sdk/models/operations/sort.rb +0 -20
  194. data/lib/open_api_sdk/models/operations/trackcustomer_requestbody.rb +0 -33
  195. data/lib/open_api_sdk/models/operations/trackcustomer_response.rb +0 -60
  196. data/lib/open_api_sdk/models/operations/trackcustomer_responsebody.rb +0 -33
  197. data/lib/open_api_sdk/models/operations/tracklead_requestbody.rb +0 -42
  198. data/lib/open_api_sdk/models/operations/tracklead_response.rb +0 -60
  199. data/lib/open_api_sdk/models/operations/tracklead_responsebody.rb +0 -42
  200. data/lib/open_api_sdk/models/operations/tracksale_requestbody.rb +0 -42
  201. data/lib/open_api_sdk/models/operations/tracksale_response.rb +0 -60
  202. data/lib/open_api_sdk/models/operations/tracksale_responsebody.rb +0 -42
  203. data/lib/open_api_sdk/models/operations/updatedomain_request.rb +0 -27
  204. data/lib/open_api_sdk/models/operations/updatedomain_requestbody.rb +0 -33
  205. data/lib/open_api_sdk/models/operations/updatedomain_response.rb +0 -60
  206. data/lib/open_api_sdk/models/operations/updatelink_request.rb +0 -27
  207. data/lib/open_api_sdk/models/operations/updatelink_requestbody.rb +0 -95
  208. data/lib/open_api_sdk/models/operations/updatelink_response.rb +0 -60
  209. data/lib/open_api_sdk/models/operations/updatetag_color.rb +0 -24
  210. data/lib/open_api_sdk/models/operations/updatetag_request.rb +0 -27
  211. data/lib/open_api_sdk/models/operations/updatetag_requestbody.rb +0 -32
  212. data/lib/open_api_sdk/models/operations/updatetag_response.rb +0 -60
  213. data/lib/open_api_sdk/models/operations/updateworkspace_request.rb +0 -27
  214. data/lib/open_api_sdk/models/operations/updateworkspace_requestbody.rb +0 -27
  215. data/lib/open_api_sdk/models/operations/updateworkspace_response.rb +0 -60
  216. data/lib/open_api_sdk/models/operations/upsertlink_requestbody.rb +0 -95
  217. data/lib/open_api_sdk/models/operations/upsertlink_response.rb +0 -60
  218. data/lib/open_api_sdk/models/operations.rb +0 -74
  219. data/lib/open_api_sdk/models/shared/badrequest.rb +0 -24
  220. data/lib/open_api_sdk/models/shared/code.rb +0 -18
  221. data/lib/open_api_sdk/models/shared/color.rb +0 -24
  222. data/lib/open_api_sdk/models/shared/conflict.rb +0 -24
  223. data/lib/open_api_sdk/models/shared/conflict_code.rb +0 -18
  224. data/lib/open_api_sdk/models/shared/conflict_error.rb +0 -30
  225. data/lib/open_api_sdk/models/shared/countrycode.rb +0 -267
  226. data/lib/open_api_sdk/models/shared/domains.rb +0 -27
  227. data/lib/open_api_sdk/models/shared/domainschema.rb +0 -48
  228. data/lib/open_api_sdk/models/shared/error.rb +0 -30
  229. data/lib/open_api_sdk/models/shared/forbidden.rb +0 -24
  230. data/lib/open_api_sdk/models/shared/forbidden_code.rb +0 -18
  231. data/lib/open_api_sdk/models/shared/forbidden_error.rb +0 -30
  232. data/lib/open_api_sdk/models/shared/geo.rb +0 -771
  233. data/lib/open_api_sdk/models/shared/internalservererror.rb +0 -24
  234. data/lib/open_api_sdk/models/shared/internalservererror_code.rb +0 -18
  235. data/lib/open_api_sdk/models/shared/internalservererror_error.rb +0 -30
  236. data/lib/open_api_sdk/models/shared/inviteexpired.rb +0 -24
  237. data/lib/open_api_sdk/models/shared/inviteexpired_code.rb +0 -18
  238. data/lib/open_api_sdk/models/shared/inviteexpired_error.rb +0 -30
  239. data/lib/open_api_sdk/models/shared/linkgeotargeting.rb +0 -771
  240. data/lib/open_api_sdk/models/shared/linkschema.rb +0 -142
  241. data/lib/open_api_sdk/models/shared/notfound.rb +0 -24
  242. data/lib/open_api_sdk/models/shared/notfound_code.rb +0 -18
  243. data/lib/open_api_sdk/models/shared/notfound_error.rb +0 -30
  244. data/lib/open_api_sdk/models/shared/plan.rb +0 -24
  245. data/lib/open_api_sdk/models/shared/ratelimitexceeded.rb +0 -24
  246. data/lib/open_api_sdk/models/shared/ratelimitexceeded_code.rb +0 -18
  247. data/lib/open_api_sdk/models/shared/ratelimitexceeded_error.rb +0 -30
  248. data/lib/open_api_sdk/models/shared/role.rb +0 -19
  249. data/lib/open_api_sdk/models/shared/security.rb +0 -24
  250. data/lib/open_api_sdk/models/shared/tagschema.rb +0 -30
  251. data/lib/open_api_sdk/models/shared/unauthorized.rb +0 -24
  252. data/lib/open_api_sdk/models/shared/unauthorized_code.rb +0 -18
  253. data/lib/open_api_sdk/models/shared/unauthorized_error.rb +0 -30
  254. data/lib/open_api_sdk/models/shared/unprocessableentity.rb +0 -24
  255. data/lib/open_api_sdk/models/shared/unprocessableentity_code.rb +0 -18
  256. data/lib/open_api_sdk/models/shared/unprocessableentity_error.rb +0 -30
  257. data/lib/open_api_sdk/models/shared/users.rb +0 -24
  258. data/lib/open_api_sdk/models/shared/workspaceschema.rb +0 -81
  259. data/lib/open_api_sdk/models/shared.rb +0 -49
  260. data/lib/open_api_sdk/qr_codes.rb +0 -97
  261. data/lib/open_api_sdk/sdkconfiguration.rb +0 -52
  262. data/lib/open_api_sdk/tags.rb +0 -272
  263. data/lib/open_api_sdk/track.rb +0 -276
  264. data/lib/open_api_sdk/utils/metadata_fields.rb +0 -150
  265. data/lib/open_api_sdk/utils/t.rb +0 -59
  266. data/lib/open_api_sdk/utils/utils.rb +0 -772
  267. data/lib/open_api_sdk/workspaces.rb +0 -192
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .DS_Store
2
+ *.o
3
+ *.a
4
+ *.so
5
+ build
6
+ test/fixtures/app/vendor/lua/lua
7
+ *.gem
8
+ test/fixtures/app/html
data/History.txt ADDED
@@ -0,0 +1,53 @@
1
+ == 0.6.6 2010-12-16
2
+
3
+ * Major enhancements
4
+ * Added support for @dub custom Doxygen tag to set class options.
5
+
6
+ == 0.6.5 2010-12-15
7
+
8
+ * Major enhancements
9
+ * Added support for custom_types (defined with Dub::Lua.function_generator.custom_type).
10
+ * Added support for lib_name and other customizations through klass.opts.
11
+
12
+ == 0.6.4 2010-07-14
13
+
14
+ * 1 enhancement
15
+ * Fixed homepage link in gem and documentation.
16
+
17
+ == 0.6.3 2010-07-07
18
+
19
+ * 1 enhancement
20
+ * Should ignore non-public member methods.
21
+
22
+ == 0.6.2 2010-07-07
23
+
24
+ * 1 enhancement
25
+ * Added an option define (DUB_LUA_NO_OPEN) to replace luaopen_xx by luaload_xx
26
+ * Added char in the list of 'int' types.
27
+
28
+ == 0.6.1 2010-03-12
29
+
30
+ * 2 enhancements
31
+ * Wrapping all function calls in try.. catch blocks
32
+ * Added support for custome templates (customize exception handling for example)
33
+
34
+ == 0.6.0 2010-03-11
35
+
36
+ * 4 enhancements
37
+ * added support for custom tostring methods for classes
38
+ * fixed parsing of templated return types
39
+ * static class methods are now registered in the namespace as Klass_method
40
+ * removing functions and methods with class pointer arguments (could use lists later on)
41
+ * better parsing of complex types (including nested template arguments)
42
+
43
+ == 0.5.1 2010-03-05
44
+
45
+ * 2 minor enhancements
46
+ * if an argument is fully specified, should not append namespace
47
+ * better handling of boolean values
48
+
49
+ == 0.5.0 2010-03-03
50
+
51
+ * 1 major enhancement
52
+ * initial release and tested with OpenCV bindings for Lua
53
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 by Gaspard Bucher - Buma (http://teti.ch).
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,67 @@
1
+ = Dub (Doxygen based Ubiquitous Binder)
2
+
3
+ This is a tool to ease the creation of scripting language bindings for a C++ library.
4
+ It is currently developed to crete the OpenCV bindings for Lua in Rubyk (http://rubyk.org).
5
+
6
+ The generator uses the xml output from Doxygen to avoid parsing C++ code by itself.
7
+
8
+ Homepage: http://rubyk.org/en/project311.html
9
+
10
+ = Features
11
+
12
+ Currently, the parser supports:
13
+
14
+ * class methods
15
+ * overloaded class constructors
16
+ * overloaded class methods
17
+ * class instantiation from templates through typedefs
18
+ * class alias through typedefs
19
+ * automatic resolution of template parameters
20
+ * automatic handling of default values
21
+ * class enums
22
+ * namespace enums
23
+ * group constant defines
24
+ * well tested
25
+
26
+ If you are not good at reading lists, here is an example of the kind of tricks Dub plays with types:
27
+
28
+ template<class T>
29
+ class Point_ {
30
+ ...
31
+ };
32
+
33
+ template<class T>
34
+ class Size_ {
35
+ Size_(const Point_<T>);
36
+ };
37
+ typedef Size_<int> Size2i;
38
+ typedef Size2i Size;
39
+
40
+ typedef Point_<int> Point2i;
41
+ typedef Point2i Point;
42
+
43
+
44
+ All these typedefs and templates will generate two class bindings with some aliases:
45
+
46
+ * <tt>Size</tt>, aliased as <tt>Size2i</tt>
47
+ * <tt>Point</tt>, aliased as <tt>Point2i</tt>
48
+
49
+ And what's really good is that in the definition for the <tt>Size</tt> constructor, <tt>Point_<T></tt> is
50
+ recognized as <tt>Point</tt> !
51
+
52
+ = Using @dub
53
+
54
+ If you want to set class options inside the sources with the @dub tag, you need to set the ALIASES as follows
55
+ in the Doxyfile:
56
+
57
+ ALIASES = "dub=\par Bindings info:\n"
58
+
59
+ Then you can write settings in the class documentation:
60
+
61
+ /** Some class.
62
+ *
63
+ * @dub string_format:'%%f'
64
+ * string_args:'(*userdata)->interval()'
65
+ */
66
+
67
+ Note that for some strange reason, you have to use a double '%' to get one.
data/Rakefile ADDED
@@ -0,0 +1,59 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
5
+ require 'dub/version'
6
+
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = "dub"
11
+ gem.version = Dub::VERSION
12
+ gem.summary = %Q{A tool to ease the creation of scripting language bindings for a C++ library.}
13
+ gem.description = %Q{This is a tool to ease the creation of scripting language bindings for a C++ library.
14
+ It is currently developed to crete the OpenCV bindings for Lua in Rubyk (http://rubyk.org). The generator uses the xml output from Doxygen to avoid parsing C++ code by itself.}
15
+ gem.email = "gaspard@teti.ch"
16
+ gem.homepage = "http://rubyk.org/en/project311.html"
17
+ gem.authors = ["Gaspard Bucher"]
18
+ gem.add_dependency "hpricot"
19
+ gem.add_development_dependency "shoulda", ">= 0"
20
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
21
+ end
22
+ Jeweler::GemcutterTasks.new
23
+ rescue LoadError
24
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
25
+ end
26
+
27
+ require 'rake/testtask'
28
+ Rake::TestTask.new(:test) do |test|
29
+ test.libs << 'lib' << 'test'
30
+ test.pattern = 'test/**/*_test.rb'
31
+ test.verbose = true
32
+ end
33
+
34
+ begin
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/*_test.rb'
39
+ test.verbose = true
40
+ end
41
+ rescue LoadError
42
+ task :rcov do
43
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
44
+ end
45
+ end
46
+
47
+ task :test => :check_dependencies
48
+
49
+ task :default => :test
50
+
51
+ require 'rake/rdoctask'
52
+ Rake::RDocTask.new do |rdoc|
53
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
54
+
55
+ rdoc.rdoc_dir = 'rdoc'
56
+ rdoc.title = "Dub #{version}"
57
+ rdoc.rdoc_files.include('README*')
58
+ rdoc.rdoc_files.include('lib/**/*.rb')
59
+ end
data/dub.gemspec ADDED
@@ -0,0 +1,201 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{dub}
8
+ s.version = "0.6.6"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Gaspard Bucher"]
12
+ s.date = %q{2010-12-16}
13
+ s.description = %q{This is a tool to ease the creation of scripting language bindings for a C++ library.
14
+ It is currently developed to crete the OpenCV bindings for Lua in Rubyk (http://rubyk.org). The generator uses the xml output from Doxygen to avoid parsing C++ code by itself.}
15
+ s.email = %q{gaspard@teti.ch}
16
+ s.extra_rdoc_files = [
17
+ "LICENSE",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".gitignore",
22
+ "History.txt",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "dub.gemspec",
27
+ "lib/dub.rb",
28
+ "lib/dub/argument.rb",
29
+ "lib/dub/entities_unescape.rb",
30
+ "lib/dub/function.rb",
31
+ "lib/dub/function_group.rb",
32
+ "lib/dub/generator.rb",
33
+ "lib/dub/group.rb",
34
+ "lib/dub/klass.rb",
35
+ "lib/dub/lua.rb",
36
+ "lib/dub/lua/class.cpp.erb",
37
+ "lib/dub/lua/class_gen.rb",
38
+ "lib/dub/lua/function.cpp.erb",
39
+ "lib/dub/lua/function_gen.rb",
40
+ "lib/dub/lua/group.cpp.erb",
41
+ "lib/dub/lua/lua_cpp_helper.h",
42
+ "lib/dub/lua/namespace.cpp.erb",
43
+ "lib/dub/lua/namespace_gen.rb",
44
+ "lib/dub/member_extraction.rb",
45
+ "lib/dub/namespace.rb",
46
+ "lib/dub/opts_parser.rb",
47
+ "lib/dub/parser.rb",
48
+ "lib/dub/templates/lua_template.erb",
49
+ "lib/dub/version.rb",
50
+ "test/argument_test.rb",
51
+ "test/fixtures/app/CMakeLists.txt",
52
+ "test/fixtures/app/Doxyfile",
53
+ "test/fixtures/app/bindings/all_lua.cpp",
54
+ "test/fixtures/app/include/matrix.h",
55
+ "test/fixtures/app/make_lua_bindings.rb",
56
+ "test/fixtures/app/vendor/lua/CMakeLists.txt",
57
+ "test/fixtures/app/vendor/lua/COPYRIGHT",
58
+ "test/fixtures/app/vendor/lua/HISTORY",
59
+ "test/fixtures/app/vendor/lua/INSTALL",
60
+ "test/fixtures/app/vendor/lua/Makefile",
61
+ "test/fixtures/app/vendor/lua/README",
62
+ "test/fixtures/app/vendor/lua/lapi.c",
63
+ "test/fixtures/app/vendor/lua/lapi.h",
64
+ "test/fixtures/app/vendor/lua/lauxlib.c",
65
+ "test/fixtures/app/vendor/lua/lauxlib.h",
66
+ "test/fixtures/app/vendor/lua/lbaselib.c",
67
+ "test/fixtures/app/vendor/lua/lcode.c",
68
+ "test/fixtures/app/vendor/lua/lcode.h",
69
+ "test/fixtures/app/vendor/lua/ldblib.c",
70
+ "test/fixtures/app/vendor/lua/ldebug.c",
71
+ "test/fixtures/app/vendor/lua/ldebug.h",
72
+ "test/fixtures/app/vendor/lua/ldo.c",
73
+ "test/fixtures/app/vendor/lua/ldo.h",
74
+ "test/fixtures/app/vendor/lua/ldump.c",
75
+ "test/fixtures/app/vendor/lua/lfunc.c",
76
+ "test/fixtures/app/vendor/lua/lfunc.h",
77
+ "test/fixtures/app/vendor/lua/lgc.c",
78
+ "test/fixtures/app/vendor/lua/lgc.h",
79
+ "test/fixtures/app/vendor/lua/liblua.a",
80
+ "test/fixtures/app/vendor/lua/linit.c",
81
+ "test/fixtures/app/vendor/lua/liolib.c",
82
+ "test/fixtures/app/vendor/lua/llex.c",
83
+ "test/fixtures/app/vendor/lua/llex.h",
84
+ "test/fixtures/app/vendor/lua/llimits.h",
85
+ "test/fixtures/app/vendor/lua/lmathlib.c",
86
+ "test/fixtures/app/vendor/lua/lmem.c",
87
+ "test/fixtures/app/vendor/lua/lmem.h",
88
+ "test/fixtures/app/vendor/lua/loadlib.c",
89
+ "test/fixtures/app/vendor/lua/lobject.c",
90
+ "test/fixtures/app/vendor/lua/lobject.h",
91
+ "test/fixtures/app/vendor/lua/lopcodes.c",
92
+ "test/fixtures/app/vendor/lua/lopcodes.h",
93
+ "test/fixtures/app/vendor/lua/loslib.c",
94
+ "test/fixtures/app/vendor/lua/lparser.c",
95
+ "test/fixtures/app/vendor/lua/lparser.h",
96
+ "test/fixtures/app/vendor/lua/lstate.c",
97
+ "test/fixtures/app/vendor/lua/lstate.h",
98
+ "test/fixtures/app/vendor/lua/lstring.c",
99
+ "test/fixtures/app/vendor/lua/lstring.h",
100
+ "test/fixtures/app/vendor/lua/lstrlib.c",
101
+ "test/fixtures/app/vendor/lua/ltable.c",
102
+ "test/fixtures/app/vendor/lua/ltable.h",
103
+ "test/fixtures/app/vendor/lua/ltablib.c",
104
+ "test/fixtures/app/vendor/lua/ltm.c",
105
+ "test/fixtures/app/vendor/lua/ltm.h",
106
+ "test/fixtures/app/vendor/lua/lua.c",
107
+ "test/fixtures/app/vendor/lua/lua.h",
108
+ "test/fixtures/app/vendor/lua/lua_dub_helper.h",
109
+ "test/fixtures/app/vendor/lua/luac",
110
+ "test/fixtures/app/vendor/lua/luac.c",
111
+ "test/fixtures/app/vendor/lua/luaconf.h",
112
+ "test/fixtures/app/vendor/lua/lualib.h",
113
+ "test/fixtures/app/vendor/lua/lundump.c",
114
+ "test/fixtures/app/vendor/lua/lundump.h",
115
+ "test/fixtures/app/vendor/lua/lvm.c",
116
+ "test/fixtures/app/vendor/lua/lvm.h",
117
+ "test/fixtures/app/vendor/lua/lzio.c",
118
+ "test/fixtures/app/vendor/lua/lzio.h",
119
+ "test/fixtures/app/vendor/lua/matrix.h",
120
+ "test/fixtures/app/vendor/lua/print.c",
121
+ "test/fixtures/app/vendor/lua/test/README",
122
+ "test/fixtures/app/vendor/lua/test/bisect.lua",
123
+ "test/fixtures/app/vendor/lua/test/cf.lua",
124
+ "test/fixtures/app/vendor/lua/test/echo.lua",
125
+ "test/fixtures/app/vendor/lua/test/env.lua",
126
+ "test/fixtures/app/vendor/lua/test/factorial.lua",
127
+ "test/fixtures/app/vendor/lua/test/fib.lua",
128
+ "test/fixtures/app/vendor/lua/test/fibfor.lua",
129
+ "test/fixtures/app/vendor/lua/test/globals.lua",
130
+ "test/fixtures/app/vendor/lua/test/hello.lua",
131
+ "test/fixtures/app/vendor/lua/test/life.lua",
132
+ "test/fixtures/app/vendor/lua/test/luac.lua",
133
+ "test/fixtures/app/vendor/lua/test/printf.lua",
134
+ "test/fixtures/app/vendor/lua/test/readonly.lua",
135
+ "test/fixtures/app/vendor/lua/test/sieve.lua",
136
+ "test/fixtures/app/vendor/lua/test/sort.lua",
137
+ "test/fixtures/app/vendor/lua/test/table.lua",
138
+ "test/fixtures/app/vendor/lua/test/trace-calls.lua",
139
+ "test/fixtures/app/vendor/lua/test/trace-globals.lua",
140
+ "test/fixtures/app/vendor/lua/test/xd.lua",
141
+ "test/fixtures/app/xml/classdub_1_1_matrix.xml",
142
+ "test/fixtures/app/xml/classdub_1_1_t_mat.xml",
143
+ "test/fixtures/app/xml/combine.xslt",
144
+ "test/fixtures/app/xml/compound.xsd",
145
+ "test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml",
146
+ "test/fixtures/app/xml/index.xml",
147
+ "test/fixtures/app/xml/index.xsd",
148
+ "test/fixtures/app/xml/matrix_8h.xml",
149
+ "test/fixtures/app/xml/namespacedub.xml",
150
+ "test/fixtures/classcv_1_1_mat.xml",
151
+ "test/fixtures/classcv_1_1_point__.xml",
152
+ "test/fixtures/classcv_1_1_scalar__.xml",
153
+ "test/fixtures/classcv_1_1_size__.xml",
154
+ "test/fixtures/dummy_class.cpp.erb",
155
+ "test/fixtures/dummy_function.cpp.erb",
156
+ "test/fixtures/group___magic_type.xml",
157
+ "test/fixtures/namespacecv.xml",
158
+ "test/function_group_test.rb",
159
+ "test/function_test.rb",
160
+ "test/group_test.rb",
161
+ "test/helper.rb",
162
+ "test/klass_test.rb",
163
+ "test/lua_function_gen_test.rb",
164
+ "test/namespace_test.rb",
165
+ "test/parser_test.rb"
166
+ ]
167
+ s.homepage = %q{http://rubyk.org/en/project311.html}
168
+ s.rdoc_options = ["--charset=UTF-8"]
169
+ s.require_paths = ["lib"]
170
+ s.rubygems_version = %q{1.3.7}
171
+ s.summary = %q{A tool to ease the creation of scripting language bindings for a C++ library.}
172
+ s.test_files = [
173
+ "test/argument_test.rb",
174
+ "test/fixtures/app/make_lua_bindings.rb",
175
+ "test/function_group_test.rb",
176
+ "test/function_test.rb",
177
+ "test/group_test.rb",
178
+ "test/helper.rb",
179
+ "test/klass_test.rb",
180
+ "test/lua_function_gen_test.rb",
181
+ "test/namespace_test.rb",
182
+ "test/parser_test.rb"
183
+ ]
184
+
185
+ if s.respond_to? :specification_version then
186
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
187
+ s.specification_version = 3
188
+
189
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
190
+ s.add_runtime_dependency(%q<hpricot>, [">= 0"])
191
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
192
+ else
193
+ s.add_dependency(%q<hpricot>, [">= 0"])
194
+ s.add_dependency(%q<shoulda>, [">= 0"])
195
+ end
196
+ else
197
+ s.add_dependency(%q<hpricot>, [">= 0"])
198
+ s.add_dependency(%q<shoulda>, [">= 0"])
199
+ end
200
+ end
201
+
@@ -0,0 +1,275 @@
1
+ require 'dub/entities_unescape'
2
+
3
+ module Dub
4
+ class Argument
5
+ include Dub::EntitiesUnescape
6
+ attr_reader :name, :default, :function, :xml
7
+ attr_accessor :type, :is_list, :is_list_count
8
+ TYPE_REGEXP = %r{^\s*(\w+\s+|)(const\s+|)([\w\:]+|\.\.\.)(\s*<(.+)>|)(\s*\*+|\s*&|)$}
9
+ NUMBER_TYPES = [
10
+ 'float',
11
+ 'double',
12
+ 'size_t',
13
+ 'unsigned int',
14
+ 'uint',
15
+ 'int',
16
+ 'size_t',
17
+ 'time_t',
18
+ 'unsigned int',
19
+ 'uint',
20
+ 'bool',
21
+ 'uchar',
22
+ 'char',
23
+ 'void',
24
+ 'int64'
25
+ ]
26
+
27
+ STRING_TYPES = [
28
+ 'char',
29
+ ]
30
+
31
+ NATIVE_C_TYPES = NUMBER_TYPES + STRING_TYPES
32
+
33
+ class << self
34
+
35
+ # This is used to resolve overloaded functions
36
+ def type_group(arg)
37
+ # exact same type
38
+ if NATIVE_C_TYPES.include?(arg.type)
39
+ if NUMBER_TYPES.include?(arg.type)
40
+ # number synonym
41
+ arg.is_pointer? ? :number_ptr : :number
42
+ else
43
+ # string synonym
44
+ raise "Not implemented yet"
45
+ # :string
46
+ end
47
+ else
48
+ # custom class / type
49
+ arg.id_name
50
+ end
51
+ end
52
+
53
+ # group is a list of functions, index = argument index
54
+ def decision_tree(group)
55
+ hash = {}
56
+ group.each do |function|
57
+ insert_by_type(hash, function)
58
+ end
59
+ hash
60
+ end
61
+
62
+ # Insert a function into the hash, using the argument at the given
63
+ # index to filter
64
+ def insert_by_type(hash, function, index = 0)
65
+ arg = function.arguments[index]
66
+ type = arg ? type_group(arg) : nil
67
+ slot = hash[type]
68
+ if slot.nil?
69
+ hash[type] = function
70
+ elsif slot.kind_of?(Hash)
71
+ insert_by_type(slot, function, index + 1)
72
+ elsif type.nil?
73
+ # ignore
74
+
75
+ # TODO: log level
76
+ # puts "Cannot filter functions #{function.source}"
77
+ else
78
+ h = {}
79
+ insert_by_type(h, slot, index + 1)
80
+ insert_by_type(h, function, index + 1)
81
+ hash[type] = h
82
+ end
83
+ end
84
+ end
85
+
86
+ def initialize(function, xml, arg_pos = nil)
87
+ @function, @xml, @argument_position = function, xml, arg_pos
88
+ parse_xml
89
+ end
90
+
91
+ def signature
92
+ "#{is_const? ? 'const ' : ''}#{type}#{is_ref? ? '&' : ''}"
93
+ end
94
+
95
+ def full_type
96
+ if type =~ /::/
97
+ type
98
+ else
99
+ container = function.parent
100
+ if container.kind_of?(Klass)
101
+ container = container.parent
102
+ end
103
+ container ? "#{container.name}::#{type}" : type
104
+ end
105
+ end
106
+
107
+ def id_name
108
+ full_type.gsub('::', '.')
109
+ end
110
+
111
+ alias inspect signature
112
+
113
+ def is_ref?
114
+ @ref
115
+ end
116
+
117
+ def is_pointer?
118
+ !@pointer.nil?
119
+ end
120
+
121
+ def is_const?
122
+ @const
123
+ end
124
+
125
+ def has_default?
126
+ !@default.nil?
127
+ end
128
+
129
+ def is_return_value?
130
+ @is_return_value
131
+ end
132
+
133
+ def is_native?
134
+ NATIVE_C_TYPES.include?(type)
135
+ end
136
+
137
+ def type
138
+ resolve_type if @template_params
139
+ @type
140
+ end
141
+
142
+ def vararg?
143
+ @type == '...'
144
+ end
145
+
146
+ def complex?
147
+ resolve_type if @template_params
148
+ @is_complex
149
+ end
150
+
151
+ def is_list?
152
+ @is_list
153
+ end
154
+
155
+ def is_list_count?
156
+ @is_list_count
157
+ end
158
+
159
+ def create_type
160
+ resolve_type if @template_params
161
+ (is_const? ? 'const ' : '') +
162
+ if (is_return_value? && !is_pointer?) || (is_native? && !is_pointer?)
163
+ "#{type} "
164
+ else
165
+ "#{type} *"
166
+ end
167
+ end
168
+
169
+ # this is for the cases where we have signatures like
170
+ # HuMoments(double moments[7])
171
+ def array_suffix
172
+ @array_suffix
173
+ end
174
+
175
+ def in_call_type
176
+ (is_native? || is_pointer?) ? name : "*#{name}"
177
+ end
178
+
179
+ private
180
+ def parse_xml
181
+ if type = (@xml/'type').first
182
+ # param
183
+ set_type(type)
184
+
185
+ @name = unescape((@xml/'declname').innerHTML)
186
+ if @name == ''
187
+ @name = "arg#{@argument_position}"
188
+ elsif @name == @function.name
189
+ @name = "arg_#{@name}"
190
+ end
191
+
192
+ if ref = (@xml/'defval/ref').first
193
+ ref.swap(ref.innerHTML)
194
+ end
195
+ @default = (@xml/'defval') ? unescape((@xml/'defval').innerHTML) : nil
196
+ @default = nil if @default == ''
197
+ expand_default_type if @default
198
+ else
199
+ # return value
200
+ @is_return_value = true
201
+ set_type(@xml/'')
202
+ end
203
+
204
+ if array = (@xml/'array').first
205
+ @array_suffix = array.innerHTML
206
+ end
207
+ end
208
+
209
+ def set_type(type)
210
+ # <type>const <ref refid="classcv_1_1_point__" kindref="compound">Point_</ref>&lt; int &gt; &amp;</type>
211
+ if ref = (type/'ref').first
212
+ @refid = ref[:refid]
213
+ ref.swap(ref.innerHTML)
214
+ end
215
+
216
+ type = type.innerHTML
217
+ type = unescape(type).strip
218
+
219
+ if type =~ TYPE_REGEXP
220
+ res = $~.to_a
221
+
222
+ if res[1].strip == 'const'
223
+ res[2] = res[1]
224
+ res[1] = ""
225
+ end
226
+
227
+ @const = res[2].strip == 'const'
228
+ @type = res[3]
229
+
230
+ if res[6] == ''
231
+ @pointer = nil
232
+ @res = nil
233
+ elsif res[6] =~ /^\s*(\*+)\s*$/
234
+ @pointer = $1
235
+ else
236
+ @ref = res[6].strip
237
+ end
238
+
239
+ @template_params = res[5] ? res[5].split(',').map(&:strip) : nil
240
+ else
241
+ # ERROR
242
+ end
243
+ end
244
+
245
+ # Replace something like AUTO_STEP by cv::Mat::AUTO_STEP
246
+ def expand_default_type
247
+ container = @function.parent
248
+ if container && container.enums.include?(@default)
249
+ @default = "#{container.full_type}::#{@default}"
250
+ elsif container = container.parent && container.enums.include?(@default)
251
+ @default = "#{container.full_type}::#{@default}"
252
+ end
253
+ end
254
+
255
+ def resolve_type
256
+ params = @template_params
257
+ @template_params = nil
258
+ if container = @function.parent
259
+ if container.kind_of?(Klass)
260
+ container = container.parent
261
+ end
262
+ if container && tclass = container.template_class(@type)
263
+ if instanciation = tclass.instanciations[params]
264
+ @type = instanciation.name
265
+ return
266
+ end
267
+ end
268
+ end
269
+
270
+ @type = "#{@type}< #{params.join(', ')} >"
271
+ Dub.logger.warn "Could not resolve templated type #{@type}"
272
+ @is_complex = true
273
+ end
274
+ end
275
+ end # Namespace