gobject-introspection 2.0.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. data/Rakefile +118 -0
  2. data/ext/gobject-introspection/depend +10 -0
  3. data/ext/gobject-introspection/extconf.rb +97 -0
  4. data/ext/gobject-introspection/gobject_introspection.def +5 -0
  5. data/ext/gobject-introspection/rb-gi-arg-info.c +151 -0
  6. data/ext/gobject-introspection/rb-gi-argument.c +1015 -0
  7. data/ext/gobject-introspection/rb-gi-base-info.c +218 -0
  8. data/ext/gobject-introspection/rb-gi-boxed-info.c +48 -0
  9. data/ext/gobject-introspection/rb-gi-callable-info.c +104 -0
  10. data/ext/gobject-introspection/rb-gi-callback-info.c +48 -0
  11. data/ext/gobject-introspection/rb-gi-constant-info.c +77 -0
  12. data/ext/gobject-introspection/rb-gi-constructor-info.c +120 -0
  13. data/ext/gobject-introspection/rb-gi-conversions.h +116 -0
  14. data/ext/gobject-introspection/rb-gi-enum-info.c +145 -0
  15. data/ext/gobject-introspection/rb-gi-field-info.c +153 -0
  16. data/ext/gobject-introspection/rb-gi-flags-info.c +48 -0
  17. data/ext/gobject-introspection/rb-gi-function-info.c +658 -0
  18. data/ext/gobject-introspection/rb-gi-interface-info.c +222 -0
  19. data/ext/gobject-introspection/rb-gi-loader.c +162 -0
  20. data/ext/gobject-introspection/rb-gi-method-info.c +109 -0
  21. data/ext/gobject-introspection/rb-gi-object-info.c +345 -0
  22. data/ext/gobject-introspection/rb-gi-private.h +110 -0
  23. data/ext/gobject-introspection/rb-gi-property-info.c +77 -0
  24. data/ext/gobject-introspection/rb-gi-registered-type-info.c +86 -0
  25. data/ext/gobject-introspection/rb-gi-repository.c +164 -0
  26. data/ext/gobject-introspection/rb-gi-signal-info.c +77 -0
  27. data/ext/gobject-introspection/rb-gi-struct-info.c +190 -0
  28. data/ext/gobject-introspection/rb-gi-type-info.c +143 -0
  29. data/ext/gobject-introspection/rb-gi-type-tag.c +43 -0
  30. data/ext/gobject-introspection/rb-gi-types.h +71 -0
  31. data/ext/gobject-introspection/rb-gi-union-info.c +206 -0
  32. data/ext/gobject-introspection/rb-gi-unresolved-info.c +48 -0
  33. data/ext/gobject-introspection/rb-gi-value-info.c +57 -0
  34. data/ext/gobject-introspection/rb-gi-vfunc-info.c +91 -0
  35. data/ext/gobject-introspection/rb-gobject-introspection.c +44 -0
  36. data/ext/gobject-introspection/rb-gobject-introspection.h +57 -0
  37. data/extconf.rb +71 -0
  38. data/lib/1.9/gobject_introspection.so +0 -0
  39. data/lib/2.0/gobject_introspection.so +0 -0
  40. data/lib/gobject-introspection.rb +52 -0
  41. data/lib/gobject-introspection/callable-info.rb +91 -0
  42. data/lib/gobject-introspection/collection-reader.rb +34 -0
  43. data/lib/gobject-introspection/interface-info.rb +32 -0
  44. data/lib/gobject-introspection/loader.rb +328 -0
  45. data/lib/gobject-introspection/object-info.rb +33 -0
  46. data/lib/gobject-introspection/repository.rb +32 -0
  47. data/lib/gobject-introspection/struct-info.rb +28 -0
  48. data/lib/gobject-introspection/union-info.rb +28 -0
  49. data/test/gobject-introspection-test-utils.rb +26 -0
  50. data/test/run-test.rb +45 -0
  51. data/test/test-arg-info.rb +68 -0
  52. data/test/test-base-info.rb +31 -0
  53. data/test/test-boxed-info.rb +21 -0
  54. data/test/test-callable-info.rb +49 -0
  55. data/test/test-callback-info.rb +29 -0
  56. data/test/test-constant-info.rb +24 -0
  57. data/test/test-enum-info.rb +56 -0
  58. data/test/test-field-type.rb +42 -0
  59. data/test/test-flags-info.rb +27 -0
  60. data/test/test-function-info.rb +37 -0
  61. data/test/test-interface-info.rb +97 -0
  62. data/test/test-loader.rb +30 -0
  63. data/test/test-object-info.rb +131 -0
  64. data/test/test-property-info.rb +38 -0
  65. data/test/test-registered-type-info.rb +35 -0
  66. data/test/test-repository.rb +59 -0
  67. data/test/test-signal-info.rb +37 -0
  68. data/test/test-struct-info.rb +57 -0
  69. data/test/test-type-info.rb +62 -0
  70. data/test/test-type-tag.rb +29 -0
  71. data/test/test-union-info.rb +21 -0
  72. data/test/test-value-info.rb +28 -0
  73. data/test/test-vfunc-info.rb +42 -0
  74. data/vendor/local/bin/g-ir-compiler.exe +0 -0
  75. data/vendor/local/bin/g-ir-generate.exe +0 -0
  76. data/vendor/local/bin/libgirepository-1.0-1.dll +0 -0
  77. data/vendor/local/include/gobject-introspection-1.0/giarginfo.h +52 -0
  78. data/vendor/local/include/gobject-introspection-1.0/gibaseinfo.h +89 -0
  79. data/vendor/local/include/gobject-introspection-1.0/gicallableinfo.h +74 -0
  80. data/vendor/local/include/gobject-introspection-1.0/giconstantinfo.h +46 -0
  81. data/vendor/local/include/gobject-introspection-1.0/gienuminfo.h +56 -0
  82. data/vendor/local/include/gobject-introspection-1.0/gifieldinfo.h +52 -0
  83. data/vendor/local/include/gobject-introspection-1.0/gifunctioninfo.h +77 -0
  84. data/vendor/local/include/gobject-introspection-1.0/giinterfaceinfo.h +68 -0
  85. data/vendor/local/include/gobject-introspection-1.0/giobjectinfo.h +137 -0
  86. data/vendor/local/include/gobject-introspection-1.0/gipropertyinfo.h +44 -0
  87. data/vendor/local/include/gobject-introspection-1.0/giregisteredtypeinfo.h +53 -0
  88. data/vendor/local/include/gobject-introspection-1.0/girepository.h +179 -0
  89. data/vendor/local/include/gobject-introspection-1.0/girffi.h +80 -0
  90. data/vendor/local/include/gobject-introspection-1.0/gisignalinfo.h +45 -0
  91. data/vendor/local/include/gobject-introspection-1.0/gistructinfo.h +53 -0
  92. data/vendor/local/include/gobject-introspection-1.0/gitypeinfo.h +56 -0
  93. data/vendor/local/include/gobject-introspection-1.0/gitypelib.h +55 -0
  94. data/vendor/local/include/gobject-introspection-1.0/gitypes.h +453 -0
  95. data/vendor/local/include/gobject-introspection-1.0/giunioninfo.h +57 -0
  96. data/vendor/local/include/gobject-introspection-1.0/givfuncinfo.h +56 -0
  97. data/vendor/local/lib/girepository-1.0/DBus-1.0.typelib +0 -0
  98. data/vendor/local/lib/girepository-1.0/DBusGLib-1.0.typelib +0 -0
  99. data/vendor/local/lib/girepository-1.0/GIRepository-2.0.typelib +0 -0
  100. data/vendor/local/lib/girepository-1.0/GL-1.0.typelib +0 -0
  101. data/vendor/local/lib/girepository-1.0/GLib-2.0.typelib +0 -0
  102. data/vendor/local/lib/girepository-1.0/GModule-2.0.typelib +0 -0
  103. data/vendor/local/lib/girepository-1.0/GObject-2.0.typelib +0 -0
  104. data/vendor/local/lib/girepository-1.0/Gio-2.0.typelib +0 -0
  105. data/vendor/local/lib/girepository-1.0/cairo-1.0.typelib +0 -0
  106. data/vendor/local/lib/girepository-1.0/fontconfig-2.0.typelib +0 -0
  107. data/vendor/local/lib/girepository-1.0/freetype2-2.0.typelib +0 -0
  108. data/vendor/local/lib/girepository-1.0/libxml2-2.0.typelib +0 -0
  109. data/vendor/local/lib/girepository-1.0/xfixes-4.0.typelib +0 -0
  110. data/vendor/local/lib/girepository-1.0/xft-2.0.typelib +0 -0
  111. data/vendor/local/lib/girepository-1.0/xlib-2.0.typelib +0 -0
  112. data/vendor/local/lib/girepository-1.0/xrandr-1.3.typelib +0 -0
  113. data/vendor/local/lib/gobject-introspection/giscanner/__init__.py +24 -0
  114. data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyc +0 -0
  115. data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyo +0 -0
  116. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.py +74 -0
  117. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyc +0 -0
  118. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyo +0 -0
  119. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.py +1204 -0
  120. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyc +0 -0
  121. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyo +0 -0
  122. data/vendor/local/lib/gobject-introspection/giscanner/ast.py +1100 -0
  123. data/vendor/local/lib/gobject-introspection/giscanner/ast.pyc +0 -0
  124. data/vendor/local/lib/gobject-introspection/giscanner/ast.pyo +0 -0
  125. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.py +196 -0
  126. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyc +0 -0
  127. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyo +0 -0
  128. data/vendor/local/lib/gobject-introspection/giscanner/codegen.py +140 -0
  129. data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyc +0 -0
  130. data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyo +0 -0
  131. data/vendor/local/lib/gobject-introspection/giscanner/docmain.py +60 -0
  132. data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyc +0 -0
  133. data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyo +0 -0
  134. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/class.tmpl +2 -0
  135. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/constructor.tmpl +1 -0
  136. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/default.tmpl +1 -0
  137. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/enum.tmpl +2 -0
  138. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/function.tmpl +61 -0
  139. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/method.tmpl +1 -0
  140. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/namespace.tmpl +1 -0
  141. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/property.tmpl +5 -0
  142. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/record.tmpl +1 -0
  143. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/signal.tmpl +5 -0
  144. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/vfunc.tmpl +4 -0
  145. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/class.tmpl +18 -0
  146. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/constructor.tmpl +1 -0
  147. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/default.tmpl +1 -0
  148. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/enum.tmpl +13 -0
  149. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/function.tmpl +48 -0
  150. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/method.tmpl +1 -0
  151. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/namespace.tmpl +2 -0
  152. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/property.tmpl +10 -0
  153. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/record.tmpl +2 -0
  154. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/signal.tmpl +37 -0
  155. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/vfunc.tmpl +27 -0
  156. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/class.tmpl +17 -0
  157. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/constructor.tmpl +1 -0
  158. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/default.tmpl +1 -0
  159. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/enum.tmpl +13 -0
  160. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/function.tmpl +53 -0
  161. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/method.tmpl +1 -0
  162. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/namespace.tmpl +2 -0
  163. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/property.tmpl +10 -0
  164. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/record.tmpl +2 -0
  165. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/signal.tmpl +42 -0
  166. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/vfunc.tmpl +33 -0
  167. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/base.tmpl +29 -0
  168. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/class.tmpl +40 -0
  169. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/namespace.tmpl +19 -0
  170. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.py +635 -0
  171. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyc +0 -0
  172. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyo +0 -0
  173. data/vendor/local/lib/gobject-introspection/giscanner/dumper.py +363 -0
  174. data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyc +0 -0
  175. data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyo +0 -0
  176. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.py +551 -0
  177. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyc +0 -0
  178. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyo +0 -0
  179. data/vendor/local/lib/gobject-introspection/giscanner/girparser.py +581 -0
  180. data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyc +0 -0
  181. data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyo +0 -0
  182. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.py +584 -0
  183. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyc +0 -0
  184. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyo +0 -0
  185. data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.py +236 -0
  186. data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyc +0 -0
  187. data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyo +0 -0
  188. data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.py +76 -0
  189. data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyc +0 -0
  190. data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyo +0 -0
  191. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.py +1337 -0
  192. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyc +0 -0
  193. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyo +0 -0
  194. data/vendor/local/lib/gobject-introspection/giscanner/message.py +185 -0
  195. data/vendor/local/lib/gobject-introspection/giscanner/message.pyc +0 -0
  196. data/vendor/local/lib/gobject-introspection/giscanner/message.pyo +0 -0
  197. data/vendor/local/lib/gobject-introspection/giscanner/odict.py +50 -0
  198. data/vendor/local/lib/gobject-introspection/giscanner/odict.pyc +0 -0
  199. data/vendor/local/lib/gobject-introspection/giscanner/odict.pyo +0 -0
  200. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.py +497 -0
  201. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyc +0 -0
  202. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyo +0 -0
  203. data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.py +78 -0
  204. data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyc +0 -0
  205. data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyo +0 -0
  206. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.py +132 -0
  207. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyc +0 -0
  208. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyo +0 -0
  209. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.py +324 -0
  210. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyc +0 -0
  211. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyo +0 -0
  212. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.py +119 -0
  213. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyc +0 -0
  214. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyo +0 -0
  215. data/vendor/local/lib/gobject-introspection/giscanner/transformer.py +999 -0
  216. data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyc +0 -0
  217. data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyo +0 -0
  218. data/vendor/local/lib/gobject-introspection/giscanner/utils.py +141 -0
  219. data/vendor/local/lib/gobject-introspection/giscanner/utils.pyc +0 -0
  220. data/vendor/local/lib/gobject-introspection/giscanner/utils.pyo +0 -0
  221. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.py +197 -0
  222. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyc +0 -0
  223. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyo +0 -0
  224. data/vendor/local/lib/libgirepository-1.0.a +0 -0
  225. data/vendor/local/lib/libgirepository-1.0.dll.a +0 -0
  226. data/vendor/local/lib/libgirepository-1.0.la +41 -0
  227. data/vendor/local/lib/pkgconfig/gobject-introspection-1.0.pc +26 -0
  228. data/vendor/local/lib/pkgconfig/gobject-introspection-no-export-1.0.pc +23 -0
  229. data/vendor/local/share/aclocal/introspection.m4 +96 -0
  230. data/vendor/local/share/gir-1.0/DBus-1.0.gir +32 -0
  231. data/vendor/local/share/gir-1.0/DBusGLib-1.0.gir +18 -0
  232. data/vendor/local/share/gir-1.0/GIRepository-2.0.gir +3833 -0
  233. data/vendor/local/share/gir-1.0/GL-1.0.gir +31 -0
  234. data/vendor/local/share/gir-1.0/GLib-2.0.gir +44304 -0
  235. data/vendor/local/share/gir-1.0/GModule-2.0.gir +184 -0
  236. data/vendor/local/share/gir-1.0/GObject-2.0.gir +13947 -0
  237. data/vendor/local/share/gir-1.0/Gio-2.0.gir +73619 -0
  238. data/vendor/local/share/gir-1.0/cairo-1.0.gir +70 -0
  239. data/vendor/local/share/gir-1.0/fontconfig-2.0.gir +18 -0
  240. data/vendor/local/share/gir-1.0/freetype2-2.0.gir +22 -0
  241. data/vendor/local/share/gir-1.0/libxml2-2.0.gir +25 -0
  242. data/vendor/local/share/gir-1.0/xfixes-4.0.gir +10 -0
  243. data/vendor/local/share/gir-1.0/xft-2.0.gir +23 -0
  244. data/vendor/local/share/gir-1.0/xlib-2.0.gir +67 -0
  245. data/vendor/local/share/gir-1.0/xrandr-1.3.gir +16 -0
  246. data/vendor/local/share/gobject-introspection-1.0/Makefile.introspection +166 -0
  247. data/vendor/local/share/gobject-introspection-1.0/gdump.c +564 -0
  248. data/vendor/local/share/gobject-introspection-1.0/tests/annotation.c +835 -0
  249. data/vendor/local/share/gobject-introspection-1.0/tests/annotation.h +198 -0
  250. data/vendor/local/share/gobject-introspection-1.0/tests/drawable.c +55 -0
  251. data/vendor/local/share/gobject-introspection-1.0/tests/drawable.h +33 -0
  252. data/vendor/local/share/gobject-introspection-1.0/tests/everything.c +1473 -0
  253. data/vendor/local/share/gobject-introspection-1.0/tests/everything.h +428 -0
  254. data/vendor/local/share/gobject-introspection-1.0/tests/foo.c +790 -0
  255. data/vendor/local/share/gobject-introspection-1.0/tests/foo.h +437 -0
  256. data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.c +5256 -0
  257. data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.h +1158 -0
  258. data/vendor/local/share/gobject-introspection-1.0/tests/regress.c +4009 -0
  259. data/vendor/local/share/gobject-introspection-1.0/tests/regress.h +944 -0
  260. data/vendor/local/share/gobject-introspection-1.0/tests/utility.c +45 -0
  261. data/vendor/local/share/gobject-introspection-1.0/tests/utility.h +95 -0
  262. data/vendor/local/share/gobject-introspection-1.0/tests/warnlib.c +33 -0
  263. data/vendor/local/share/gobject-introspection-1.0/tests/warnlib.h +36 -0
  264. data/vendor/local/share/license/gobject-introspection/AUTHORS +9 -0
  265. data/vendor/local/share/license/gobject-introspection/COPYING +12 -0
  266. data/vendor/local/share/man/man1/g-ir-compiler.1 +51 -0
  267. data/vendor/local/share/man/man1/g-ir-generate.1 +29 -0
  268. metadata +343 -0
@@ -0,0 +1,1100 @@
1
+ # -*- Mode: Python -*-
2
+ # GObject-Introspection - a framework for introspecting GObject libraries
3
+ # Copyright (C) 2008 Johan Dahlin
4
+ # Copyright (C) 2008, 2009 Red Hat, Inc.
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License as published by the Free Software Foundation; either
9
+ # version 2 of the License, or (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with this library; if not, write to the
18
+ # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19
+ # Boston, MA 02111-1307, USA.
20
+ #
21
+
22
+ import copy
23
+ from itertools import chain
24
+
25
+ from . import message
26
+
27
+ from .message import Position
28
+ from .odict import odict
29
+ from .utils import to_underscores
30
+
31
+ class Type(object):
32
+ """A Type can be either:
33
+ * A reference to a node (target_giname)
34
+ * A reference to a "fundamental" type like 'utf8'
35
+ * A "foreign" type - this can be any string."
36
+ If none are specified, then it's in an "unresolved" state. An
37
+ unresolved type can have two data sources; a "ctype" which comes
38
+ from a C type string, or a gtype_name (from g_type_name()).
39
+ """ # '''
40
+
41
+ def __init__(self,
42
+ ctype=None,
43
+ gtype_name=None,
44
+ target_fundamental=None,
45
+ target_giname=None,
46
+ target_foreign=None,
47
+ _target_unknown=False,
48
+ is_const=False,
49
+ origin_symbol=None,
50
+ complete_ctype=None):
51
+ self.ctype = ctype
52
+ self.gtype_name = gtype_name
53
+ self.origin_symbol = origin_symbol
54
+ if _target_unknown:
55
+ assert isinstance(self, TypeUnknown)
56
+ elif target_fundamental:
57
+ assert target_giname is None
58
+ assert target_foreign is None
59
+ elif target_giname:
60
+ assert '.' in target_giname
61
+ assert target_fundamental is None
62
+ assert target_foreign is None
63
+ elif target_foreign:
64
+ assert ctype is not None
65
+ assert target_giname is None
66
+ assert target_fundamental is None
67
+ else:
68
+ assert (ctype is not None) or (gtype_name is not None)
69
+ self.target_fundamental = target_fundamental
70
+ self.target_giname = target_giname
71
+ self.target_foreign = target_foreign
72
+ self.is_const = is_const
73
+ self.complete_ctype = complete_ctype
74
+
75
+ @property
76
+ def resolved(self):
77
+ return (self.target_fundamental or
78
+ self.target_giname or
79
+ self.target_foreign)
80
+
81
+ @property
82
+ def unresolved_string(self):
83
+ if self.ctype:
84
+ return self.ctype
85
+ elif self.gtype_name:
86
+ return self.gtype_name
87
+ elif self.target_giname:
88
+ return self.target_giname
89
+ else:
90
+ assert False
91
+
92
+ @classmethod
93
+ def create_from_gtype_name(cls, gtype_name):
94
+ """Parse a GType name (as from g_type_name()), and return a
95
+ Type instance. Note that this function performs namespace lookup,
96
+ in contrast to the other create_type() functions."""
97
+ # First, is it a fundamental?
98
+ fundamental = type_names.get(gtype_name)
99
+ if fundamental is not None:
100
+ return cls(target_fundamental=fundamental.target_fundamental,
101
+ ctype=fundamental.ctype)
102
+ if gtype_name == 'GHashTable':
103
+ return Map(TYPE_ANY, TYPE_ANY, gtype_name=gtype_name)
104
+ elif gtype_name in ('GArray', 'GPtrArray', 'GByteArray'):
105
+ return Array('GLib.' + gtype_name[1:], TYPE_ANY,
106
+ gtype_name=gtype_name)
107
+ elif gtype_name == 'GStrv':
108
+ bare_utf8 = TYPE_STRING.clone()
109
+ bare_utf8.ctype = None
110
+ return Array(None, bare_utf8, ctype=None, gtype_name=gtype_name,
111
+ is_const=False)
112
+
113
+ # Workaround for Gdk.Rectangle being boxed alias for
114
+ # cairo.RectangleInt. G-I does not support boxing of aliases.
115
+ # See https://bugzilla.gnome.org/show_bug.cgi?id=655423
116
+ if gtype_name == 'GdkRectangle':
117
+ gtype_name = 'CairoRectangleInt'
118
+
119
+ return cls(gtype_name=gtype_name)
120
+
121
+ def get_giname(self):
122
+ assert self.target_giname is not None
123
+ return self.target_giname.split('.')[1]
124
+
125
+ def __cmp__(self, other):
126
+ if self.target_fundamental:
127
+ return cmp(self.target_fundamental, other.target_fundamental)
128
+ if self.target_giname:
129
+ return cmp(self.target_giname, other.target_giname)
130
+ if self.target_foreign:
131
+ return cmp(self.target_foreign, other.target_foreign)
132
+ return cmp(self.ctype, other.ctype)
133
+
134
+ def is_equiv(self, typeval):
135
+ """Return True if the specified types are compatible at
136
+ an introspection level, disregarding their C types.
137
+ A sequence may be given for typeval, in which case
138
+ this function returns True if the type is compatible with
139
+ any."""
140
+ if isinstance(typeval, (list, tuple)):
141
+ for val in typeval:
142
+ if self.is_equiv(val):
143
+ return True
144
+ return False
145
+ return self == typeval
146
+
147
+ def clone(self):
148
+ return Type(target_fundamental=self.target_fundamental,
149
+ target_giname=self.target_giname,
150
+ target_foreign=self.target_foreign,
151
+ ctype=self.ctype,
152
+ is_const=self.is_const)
153
+
154
+ def __str__(self):
155
+ if self.target_fundamental:
156
+ return self.target_fundamental
157
+ elif self.target_giname:
158
+ return self.target_giname
159
+ elif self.target_foreign:
160
+ return self.target_foreign
161
+
162
+ def __repr__(self):
163
+ if self.target_fundamental:
164
+ data = 'target_fundamental=%s, ' % (self.target_fundamental, )
165
+ elif self.target_giname:
166
+ data = 'target_giname=%s, ' % (self.target_giname, )
167
+ elif self.target_foreign:
168
+ data = 'target_foreign=%s, ' % (self.target_foreign, )
169
+ else:
170
+ data = ''
171
+ return '%s(%sctype=%s)' % (self.__class__.__name__, data, self.ctype)
172
+
173
+ class TypeUnknown(Type):
174
+ def __init__(self):
175
+ Type.__init__(self, _target_unknown=True)
176
+
177
+ ######
178
+ ## Fundamental types
179
+ ######
180
+ # Two special ones
181
+ TYPE_NONE = Type(target_fundamental='none', ctype='void')
182
+ TYPE_ANY = Type(target_fundamental='gpointer', ctype='gpointer')
183
+ # "Basic" types
184
+ TYPE_BOOLEAN = Type(target_fundamental='gboolean', ctype='gboolean')
185
+ TYPE_INT8 = Type(target_fundamental='gint8', ctype='gint8')
186
+ TYPE_UINT8 = Type(target_fundamental='guint8', ctype='guint8')
187
+ TYPE_INT16 = Type(target_fundamental='gint16', ctype='gint16')
188
+ TYPE_UINT16 = Type(target_fundamental='guint16', ctype='guint16')
189
+ TYPE_INT32 = Type(target_fundamental='gint32', ctype='gint32')
190
+ TYPE_UINT32 = Type(target_fundamental='guint32', ctype='guint32')
191
+ TYPE_INT64 = Type(target_fundamental='gint64', ctype='gint64')
192
+ TYPE_UINT64 = Type(target_fundamental='guint64', ctype='guint64')
193
+ TYPE_CHAR = Type(target_fundamental='gchar', ctype='gchar')
194
+ TYPE_SHORT = Type(target_fundamental='gshort', ctype='gshort')
195
+ TYPE_USHORT = Type(target_fundamental='gushort', ctype='gushort')
196
+ TYPE_INT = Type(target_fundamental='gint', ctype='gint')
197
+ TYPE_UINT = Type(target_fundamental='guint', ctype='guint')
198
+ TYPE_LONG = Type(target_fundamental='glong', ctype='glong')
199
+ TYPE_ULONG = Type(target_fundamental='gulong', ctype='gulong')
200
+ TYPE_SIZE = Type(target_fundamental='gsize', ctype='gsize')
201
+ TYPE_SSIZE = Type(target_fundamental='gssize', ctype='gssize')
202
+ TYPE_INTPTR = Type(target_fundamental='gintptr', ctype='gintptr')
203
+ TYPE_UINTPTR = Type(target_fundamental='guintptr', ctype='guintptr')
204
+ # C99 types
205
+ TYPE_LONG_LONG = Type(target_fundamental='long long', ctype='long long')
206
+ TYPE_LONG_ULONG = Type(target_fundamental='unsigned long long',
207
+ ctype='unsigned long long')
208
+ TYPE_FLOAT = Type(target_fundamental='gfloat', ctype='gfloat')
209
+ TYPE_DOUBLE = Type(target_fundamental='gdouble', ctype='gdouble')
210
+ # ?
211
+ TYPE_LONG_DOUBLE = Type(target_fundamental='long double',
212
+ ctype='long double')
213
+ TYPE_UNICHAR = Type(target_fundamental='gunichar', ctype='gunichar')
214
+
215
+ # C types with semantics overlaid
216
+ TYPE_GTYPE = Type(target_fundamental='GType', ctype='GType')
217
+ TYPE_STRING = Type(target_fundamental='utf8', ctype='gchar*')
218
+ TYPE_FILENAME = Type(target_fundamental='filename', ctype='gchar*')
219
+
220
+ TYPE_VALIST = Type(target_fundamental='va_list', ctype='va_list')
221
+
222
+ BASIC_GIR_TYPES = [TYPE_BOOLEAN, TYPE_INT8, TYPE_UINT8, TYPE_INT16,
223
+ TYPE_UINT16, TYPE_INT32, TYPE_UINT32, TYPE_INT64,
224
+ TYPE_UINT64, TYPE_CHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT,
225
+ TYPE_UINT, TYPE_LONG, TYPE_ULONG, TYPE_SIZE, TYPE_SSIZE,
226
+ TYPE_LONG_LONG, TYPE_LONG_ULONG, TYPE_INTPTR, TYPE_UINTPTR,
227
+ TYPE_FLOAT, TYPE_DOUBLE,
228
+ TYPE_LONG_DOUBLE, TYPE_UNICHAR, TYPE_GTYPE]
229
+ GIR_TYPES = [TYPE_NONE, TYPE_ANY]
230
+ GIR_TYPES.extend(BASIC_GIR_TYPES)
231
+ GIR_TYPES.extend([TYPE_STRING, TYPE_FILENAME, TYPE_VALIST])
232
+
233
+ # These are the only basic types that are guaranteed to
234
+ # be as big as a pointer (and thus are allowed in GPtrArray)
235
+ POINTER_TYPES = [TYPE_ANY, TYPE_INTPTR, TYPE_UINTPTR]
236
+
237
+ INTROSPECTABLE_BASIC = list(GIR_TYPES)
238
+ for v in [TYPE_NONE, TYPE_ANY,
239
+ TYPE_LONG_LONG, TYPE_LONG_ULONG,
240
+ TYPE_LONG_DOUBLE, TYPE_VALIST]:
241
+ INTROSPECTABLE_BASIC.remove(v)
242
+
243
+ type_names = {}
244
+ for typeval in GIR_TYPES:
245
+ type_names[typeval.target_fundamental] = typeval
246
+ basic_type_names = {}
247
+ for typeval in BASIC_GIR_TYPES:
248
+ basic_type_names[typeval.target_fundamental] = typeval
249
+
250
+ # C builtin
251
+ type_names['char'] = TYPE_CHAR
252
+ type_names['signed char'] = TYPE_INT8
253
+ type_names['unsigned char'] = TYPE_UINT8
254
+ type_names['short'] = TYPE_SHORT
255
+ type_names['signed short'] = TYPE_SHORT
256
+ type_names['unsigned short'] = TYPE_USHORT
257
+ type_names['int'] = TYPE_INT
258
+ type_names['signed int'] = TYPE_INT
259
+ type_names['unsigned short int'] = TYPE_USHORT
260
+ type_names['signed'] = TYPE_INT
261
+ type_names['unsigned int'] = TYPE_UINT
262
+ type_names['unsigned'] = TYPE_UINT
263
+ type_names['long'] = TYPE_LONG
264
+ type_names['signed long'] = TYPE_LONG
265
+ type_names['unsigned long'] = TYPE_ULONG
266
+ type_names['unsigned long int'] = TYPE_ULONG
267
+ type_names['float'] = TYPE_FLOAT
268
+ type_names['double'] = TYPE_DOUBLE
269
+ type_names['char*'] = TYPE_STRING
270
+ type_names['void*'] = TYPE_ANY
271
+ type_names['void'] = TYPE_NONE
272
+ # Also alias the signed one here
273
+ type_names['signed long long'] = TYPE_LONG_LONG
274
+ # C99 stdint exact width types
275
+ type_names['int8_t'] = TYPE_INT8
276
+ type_names['uint8_t'] = TYPE_UINT8
277
+ type_names['int16_t'] = TYPE_INT16
278
+ type_names['uint16_t'] = TYPE_UINT16
279
+ type_names['int32_t'] = TYPE_INT32
280
+ type_names['uint32_t'] = TYPE_UINT32
281
+ type_names['int64_t'] = TYPE_INT64
282
+ type_names['uint64_t'] = TYPE_UINT64
283
+
284
+ # A few additional GLib type aliases
285
+ type_names['guchar'] = TYPE_UINT8
286
+ type_names['gchararray'] = TYPE_STRING
287
+ type_names['gchar*'] = TYPE_STRING
288
+ type_names['goffset'] = TYPE_INT64
289
+ type_names['gunichar2'] = TYPE_UINT16
290
+ type_names['gsize'] = TYPE_SIZE
291
+ type_names['gssize'] = TYPE_SSIZE
292
+ type_names['gintptr'] = TYPE_INTPTR
293
+ type_names['guintptr'] = TYPE_UINTPTR
294
+ type_names['gconstpointer'] = TYPE_ANY
295
+
296
+ # We used to support these; continue to do so
297
+ type_names['any'] = TYPE_ANY
298
+ type_names['boolean'] = TYPE_BOOLEAN
299
+ type_names['uint'] = TYPE_UINT
300
+ type_names['ulong'] = TYPE_ULONG
301
+
302
+ # C stdio, used in GLib public headers; squash this for now here
303
+ # until we move scanning into GLib and can (skip)
304
+ type_names['FILE*'] = TYPE_ANY
305
+
306
+ # One off C unix type definitions; note some of these may be GNU Libc
307
+ # specific. If someone is actually bitten by this, feel free to do
308
+ # the required configure goop to determine their size and replace
309
+ # here.
310
+ #
311
+ # We don't want to encourage people to use these in their APIs because
312
+ # they compromise the platform-independence that GLib gives you.
313
+ # These are here mostly to avoid blowing when random platform-specific
314
+ # methods are added under #ifdefs inside GLib itself. We could just (skip)
315
+ # the relevant methods, but on the other hand, since these types are just
316
+ # integers it's easy enough to expand them.
317
+ type_names['size_t'] = type_names['gsize']
318
+ type_names['time_t'] = TYPE_LONG
319
+ type_names['off_t'] = type_names['gsize']
320
+ type_names['pid_t'] = TYPE_INT
321
+ type_names['uid_t'] = TYPE_UINT
322
+ type_names['gid_t'] = TYPE_UINT
323
+ type_names['dev_t'] = TYPE_INT
324
+ type_names['socklen_t'] = TYPE_INT32
325
+ type_names['size_t'] = TYPE_ULONG
326
+ type_names['ssize_t'] = TYPE_LONG
327
+
328
+ # Obj-C
329
+ type_names['id'] = TYPE_ANY
330
+
331
+ ##
332
+ ## Parameters
333
+ ##
334
+
335
+ PARAM_DIRECTION_IN = 'in'
336
+ PARAM_DIRECTION_OUT = 'out'
337
+ PARAM_DIRECTION_INOUT = 'inout'
338
+
339
+ PARAM_SCOPE_CALL = 'call'
340
+ PARAM_SCOPE_ASYNC = 'async'
341
+ PARAM_SCOPE_NOTIFIED = 'notified'
342
+
343
+ PARAM_TRANSFER_NONE = 'none'
344
+ PARAM_TRANSFER_CONTAINER = 'container'
345
+ PARAM_TRANSFER_FULL = 'full'
346
+
347
+ SIGNAL_FIRST = 'first'
348
+ SIGNAL_LAST = 'last'
349
+ SIGNAL_CLEANUP = 'cleanup'
350
+ SIGNAL_MUST_COLLECT = 'must-collect'
351
+
352
+
353
+ class Namespace(object):
354
+ def __init__(self, name, version,
355
+ identifier_prefixes=None,
356
+ symbol_prefixes=None):
357
+ self.name = name
358
+ self.version = version
359
+ if identifier_prefixes is not None:
360
+ self.identifier_prefixes = identifier_prefixes
361
+ else:
362
+ self.identifier_prefixes = [name]
363
+ if symbol_prefixes is not None:
364
+ self.symbol_prefixes = symbol_prefixes
365
+ else:
366
+ ps = self.identifier_prefixes
367
+ self.symbol_prefixes = [to_underscores(p).lower() for p in ps]
368
+ # cache upper-cased versions
369
+ self._ucase_symbol_prefixes = [p.upper() for p in self.symbol_prefixes]
370
+ self.names = odict() # Maps from GIName -> node
371
+ self.aliases = {} # Maps from GIName -> GIName
372
+ self.type_names = {} # Maps from GTName -> node
373
+ self.ctypes = {} # Maps from CType -> node
374
+ self.symbols = {} # Maps from function symbols -> Function
375
+ self.includes = set() # Include
376
+ self.shared_libraries = [] # str
377
+ self.c_includes = [] # str
378
+ self.exported_packages = [] # str
379
+
380
+ def type_from_name(self, name, ctype=None):
381
+ """Backwards compatibility method for older .gir files, which
382
+ only use the 'name' attribute. If name refers to a fundamental type,
383
+ create a Type object referncing it. If name is already a
384
+ fully-qualified GIName like 'Foo.Bar', returns a Type targeting it .
385
+ Otherwise a Type targeting name qualififed with the namespace name is
386
+ returned."""
387
+ if name in type_names:
388
+ return Type(target_fundamental=name, ctype=ctype)
389
+ if '.' in name:
390
+ target = name
391
+ else:
392
+ target = '%s.%s' % (self.name, name)
393
+ return Type(target_giname=target, ctype=ctype)
394
+
395
+ def track(self, node):
396
+ """Doesn't directly append the function to our own namespace,
397
+ but adds it to things like ctypes, symbols, and type_names.
398
+ """
399
+ assert isinstance(node, Node)
400
+ if node.namespace is self:
401
+ return
402
+ assert node.namespace is None
403
+ node.namespace = self
404
+ if isinstance(node, Alias):
405
+ self.aliases[node.name] = node
406
+ elif isinstance(node, Registered) and node.gtype_name is not None:
407
+ self.type_names[node.gtype_name] = node
408
+ elif isinstance(node, Function):
409
+ self.symbols[node.symbol] = node
410
+ if isinstance(node, (Compound, Class, Interface)):
411
+ for fn in chain(node.methods, node.static_methods, node.constructors):
412
+ if not isinstance(fn, Function):
413
+ continue
414
+ fn.namespace = self
415
+ self.symbols[fn.symbol] = fn
416
+ if isinstance(node, (Class, Interface)):
417
+ for m in chain(node.signals, node.properties):
418
+ m.namespace = self
419
+ if isinstance(node, Enum) or isinstance(node, Bitfield):
420
+ for fn in node.static_methods:
421
+ if not isinstance(fn, Function):
422
+ continue
423
+ fn.namespace = self
424
+ self.symbols[fn.symbol] = fn
425
+ for member in node.members:
426
+ member.namespace = self
427
+ self.symbols[member.symbol] = member
428
+ if hasattr(node, 'ctype'):
429
+ self.ctypes[node.ctype] = node
430
+
431
+ def append(self, node, replace=False):
432
+ previous = self.names.get(node.name)
433
+ if previous is not None:
434
+ if not replace:
435
+ raise ValueError("Namespace conflict: %r" % (node, ))
436
+ self.remove(previous)
437
+
438
+ self.track(node)
439
+ self.names[node.name] = node
440
+
441
+ def remove(self, node):
442
+ if isinstance(node, Alias):
443
+ del self.aliases[node.name]
444
+ elif isinstance(node, Registered) and node.gtype_name is not None:
445
+ del self.type_names[node.gtype_name]
446
+ if hasattr(node, 'ctype'):
447
+ del self.ctypes[node.ctype]
448
+ if isinstance(node, Function):
449
+ del self.symbols[node.symbol]
450
+ node.namespace = None
451
+ self.names.pop(node.name, None)
452
+
453
+ def float(self, node):
454
+ """Like remove(), but doesn't unset the node's namespace
455
+ back-reference, and it's still possible to look up
456
+ functions via get_by_symbol()."""
457
+ if isinstance(node, Function):
458
+ symbol = node.symbol
459
+ self.remove(node)
460
+ self.symbols[symbol] = node
461
+ node.namespace = self
462
+
463
+ def __iter__(self):
464
+ return iter(self.names)
465
+
466
+ def iteritems(self):
467
+ return self.names.iteritems()
468
+
469
+ def itervalues(self):
470
+ return self.names.itervalues()
471
+
472
+ def get(self, name):
473
+ return self.names.get(name)
474
+
475
+ def get_by_ctype(self, ctype):
476
+ return self.ctypes.get(ctype)
477
+
478
+ def get_by_symbol(self, symbol):
479
+ return self.symbols.get(symbol)
480
+
481
+ def walk(self, callback):
482
+ for node in self.itervalues():
483
+ node.walk(callback, [])
484
+
485
+ class Include(object):
486
+
487
+ def __init__(self, name, version):
488
+ self.name = name
489
+ self.version = version
490
+
491
+ @classmethod
492
+ def from_string(cls, string):
493
+ return cls(*string.split('-', 1))
494
+
495
+ def __cmp__(self, other):
496
+ namecmp = cmp(self.name, other.name)
497
+ if namecmp != 0:
498
+ return namecmp
499
+ return cmp(self.version, other.version)
500
+
501
+ def __hash__(self):
502
+ return hash(str(self))
503
+
504
+ def __str__(self):
505
+ return '%s-%s' % (self.name, self.version)
506
+
507
+ class Annotated(object):
508
+ """An object which has a few generic metadata
509
+ properties."""
510
+ def __init__(self):
511
+ self.version = None
512
+ self.skip = False
513
+ self.introspectable = True
514
+ self.attributes = [] # (key, value)*
515
+ self.stability = None
516
+ self.deprecated = None
517
+ self.deprecated_version = None
518
+ self.doc = None
519
+
520
+ class Node(Annotated):
521
+ """A node is a type of object which is uniquely identified by its
522
+ (namespace, name) pair. When combined with a ., this is called a
523
+ GIName. It's possible for nodes to contain or point to other nodes."""
524
+
525
+ c_name = property(lambda self: self.namespace.name + self.name)
526
+ gi_name = property(lambda self: '%s.%s' % (self.namespace.name, self.name))
527
+
528
+ def __init__(self, name=None):
529
+ Annotated.__init__(self)
530
+ self.namespace = None # Should be set later by Namespace.append()
531
+ self.name = name
532
+ self.foreign = False
533
+ self.file_positions = set()
534
+ self._parent = None
535
+
536
+ def _get_parent(self):
537
+ if self._parent is not None:
538
+ return self._parent
539
+ else:
540
+ return self.namespace
541
+
542
+ def _set_parent(self, value):
543
+ self._parent = value
544
+ parent = property(_get_parent, _set_parent)
545
+
546
+ def create_type(self):
547
+ """Create a Type object referencing this node."""
548
+ assert self.namespace is not None
549
+ return Type(target_giname=('%s.%s' % (self.namespace.name, self.name)))
550
+
551
+ def __cmp__(self, other):
552
+ nscmp = cmp(self.namespace, other.namespace)
553
+ if nscmp != 0:
554
+ return nscmp
555
+ return cmp(self.name, other.name)
556
+
557
+ def __repr__(self):
558
+ return '%s(%r)' % (self.__class__.__name__, self.name)
559
+
560
+ def inherit_file_positions(self, node):
561
+ self.file_positions.update(node.file_positions)
562
+
563
+ def add_file_position(self, position):
564
+ self.file_positions.add(position)
565
+
566
+ def add_symbol_reference(self, symbol):
567
+ if symbol.source_filename:
568
+ self.add_file_position(Position(symbol.source_filename, symbol.line))
569
+
570
+ def walk(self, callback, chain):
571
+ res = callback(self, chain)
572
+ assert res in (True, False), "Walk function must return boolean, not %r" % (res, )
573
+ if not res:
574
+ return False
575
+ chain.append(self)
576
+ self._walk(callback, chain)
577
+ chain.pop()
578
+
579
+ def _walk(self, callback, chain):
580
+ pass
581
+
582
+
583
+ class Registered:
584
+ """A node that (possibly) has gtype_name and get_type."""
585
+ def __init__(self, gtype_name, get_type):
586
+ assert (gtype_name is None and get_type is None) or \
587
+ (gtype_name is not None and get_type is not None)
588
+ self.gtype_name = gtype_name
589
+ self.get_type = get_type
590
+
591
+
592
+ class Callable(Node):
593
+
594
+ def __init__(self, name, retval, parameters, throws):
595
+ Node.__init__(self, name)
596
+ self.retval = retval
597
+ self.parameters = parameters
598
+ self.throws = not not throws
599
+ self.instance_parameter = None # Parameter
600
+ self.parent = None # A Class or Interface
601
+
602
+ # Returns all parameters, including the instance parameter
603
+ @property
604
+ def all_parameters(self):
605
+ if self.instance_parameter is not None:
606
+ return [self.instance_parameter] + self.parameters
607
+ else:
608
+ return self.parameters
609
+
610
+ def get_parameter_index(self, name):
611
+ for i, parameter in enumerate(self.parameters):
612
+ if parameter.argname == name:
613
+ return i
614
+ raise ValueError("Unknown argument %s" % (name, ))
615
+
616
+ def get_parameter(self, name):
617
+ for parameter in self.all_parameters:
618
+ if parameter.argname == name:
619
+ return parameter
620
+ raise ValueError("Unknown argument %s" % (name, ))
621
+
622
+
623
+ class Function(Callable):
624
+
625
+ def __init__(self, name, retval, parameters, throws, symbol):
626
+ Callable.__init__(self, name, retval, parameters, throws)
627
+ self.symbol = symbol
628
+ self.is_method = False
629
+ self.is_constructor = False
630
+ self.shadowed_by = None # C symbol string
631
+ self.shadows = None # C symbol string
632
+ self.moved_to = None # namespaced function name string
633
+ self.internal_skipped = False # if True, this func will not be written to GIR
634
+
635
+ def clone(self):
636
+ clone = copy.copy(self)
637
+ # copy the parameters array so a change to self.parameters does not
638
+ # influence clone.parameters.
639
+ clone.parameters = self.parameters[:]
640
+ return clone
641
+
642
+ def is_type_meta_function(self):
643
+ # Named correctly
644
+ if not (self.name.endswith('_get_type') or
645
+ self.name.endswith('_get_gtype')):
646
+ return False
647
+
648
+ # Doesn't have any parameters
649
+ if self.parameters:
650
+ return False
651
+
652
+ # Returns GType
653
+ rettype = self.retval.type
654
+ if (not rettype.is_equiv(TYPE_GTYPE) and
655
+ rettype.target_giname != 'Gtk.Type'):
656
+ message.warn("function '%s' returns '%r', not a GType" %
657
+ (self.name, rettype))
658
+ return False
659
+
660
+ return True
661
+
662
+ class ErrorQuarkFunction(Function):
663
+
664
+ def __init__(self, name, retval, parameters, throws, symbol, error_domain):
665
+ Function.__init__(self, name, retval, parameters, throws, symbol)
666
+ self.error_domain = error_domain
667
+
668
+
669
+ class VFunction(Callable):
670
+
671
+ def __init__(self, name, retval, parameters, throws):
672
+ Callable.__init__(self, name, retval, parameters, throws)
673
+ self.invoker = None
674
+
675
+ @classmethod
676
+ def from_callback(cls, cb):
677
+ obj = cls(cb.name, cb.retval, cb.parameters[1:],
678
+ cb.throws)
679
+ return obj
680
+
681
+
682
+
683
+ class Varargs(Type):
684
+
685
+ def __init__(self):
686
+ Type.__init__(self, '<varargs>', target_fundamental='<varargs>')
687
+
688
+
689
+ class Array(Type):
690
+ C = '<c>'
691
+ GLIB_ARRAY = 'GLib.Array'
692
+ GLIB_BYTEARRAY = 'GLib.ByteArray'
693
+ GLIB_PTRARRAY = 'GLib.PtrArray'
694
+
695
+ def __init__(self, array_type, element_type, **kwargs):
696
+ Type.__init__(self, target_fundamental='<array>',
697
+ **kwargs)
698
+ if (array_type is None or array_type == self.C):
699
+ self.array_type = self.C
700
+ else:
701
+ assert array_type in (self.GLIB_ARRAY,
702
+ self.GLIB_BYTEARRAY,
703
+ self.GLIB_PTRARRAY), array_type
704
+ self.array_type = array_type
705
+ assert isinstance(element_type, Type)
706
+ self.element_type = element_type
707
+ self.zeroterminated = True
708
+ self.length_param_name = None
709
+ self.size = None
710
+
711
+ def clone(self):
712
+ arr = Array(self.array_type, self.element_type)
713
+ arr.zeroterminated = self.zeroterminated
714
+ arr.length_param_name = self.length_param_name
715
+ arr.size = self.size
716
+ return arr
717
+
718
+ class List(Type):
719
+
720
+ def __init__(self, name, element_type, **kwargs):
721
+ Type.__init__(self, target_fundamental='<list>',
722
+ **kwargs)
723
+ self.name = name
724
+ assert isinstance(element_type, Type)
725
+ self.element_type = element_type
726
+
727
+ def clone(self):
728
+ return List(self.name, self.element_type)
729
+
730
+ class Map(Type):
731
+
732
+ def __init__(self, key_type, value_type, **kwargs):
733
+ Type.__init__(self, target_fundamental='<map>', **kwargs)
734
+ assert isinstance(key_type, Type)
735
+ self.key_type = key_type
736
+ assert isinstance(value_type, Type)
737
+ self.value_type = value_type
738
+
739
+ def clone(self):
740
+ return Map(self.key_type, self.value_type)
741
+
742
+ class Alias(Node):
743
+
744
+ def __init__(self, name, target, ctype=None):
745
+ Node.__init__(self, name)
746
+ self.target = target
747
+ self.ctype = ctype
748
+
749
+
750
+ class TypeContainer(Annotated):
751
+ """A fundamental base class for Return and Parameter."""
752
+
753
+ def __init__(self, typenode, transfer):
754
+ Annotated.__init__(self)
755
+ self.type = typenode
756
+ if transfer is not None:
757
+ self.transfer = transfer
758
+ elif typenode.is_const:
759
+ self.transfer = PARAM_TRANSFER_NONE
760
+ else:
761
+ self.transfer = None
762
+
763
+
764
+ class Parameter(TypeContainer):
765
+ """An argument to a function."""
766
+
767
+ def __init__(self, argname, typenode, direction=None,
768
+ transfer=None, allow_none=False, scope=None,
769
+ caller_allocates=False):
770
+ TypeContainer.__init__(self, typenode, transfer)
771
+ self.argname = argname
772
+ self.direction = direction
773
+ self.allow_none = allow_none
774
+ self.scope = scope
775
+ self.caller_allocates = caller_allocates
776
+ self.closure_name = None
777
+ self.destroy_name = None
778
+
779
+
780
+ class Return(TypeContainer):
781
+ """A return value from a function."""
782
+
783
+ def __init__(self, rtype, transfer=None):
784
+ TypeContainer.__init__(self, rtype, transfer)
785
+ self.direction = PARAM_DIRECTION_OUT
786
+
787
+
788
+ class Enum(Node, Registered):
789
+
790
+ def __init__(self, name, ctype,
791
+ gtype_name=None,
792
+ get_type=None,
793
+ c_symbol_prefix=None,
794
+ members=None):
795
+ Node.__init__(self, name)
796
+ Registered.__init__(self, gtype_name, get_type)
797
+ self.c_symbol_prefix = c_symbol_prefix
798
+ self.ctype = ctype
799
+ self.members = members
800
+ for member in members:
801
+ member.parent = self
802
+ # Associated error domain name
803
+ self.error_domain = None
804
+ self.static_methods = []
805
+
806
+ def _walk(self, callback, chain):
807
+ for meth in self.static_methods:
808
+ meth.walk(callback, chain)
809
+
810
+
811
+ class Bitfield(Node, Registered):
812
+
813
+ def __init__(self, name, ctype,
814
+ gtype_name=None,
815
+ c_symbol_prefix=None,
816
+ get_type=None,
817
+ members=None):
818
+ Node.__init__(self, name)
819
+ Registered.__init__(self, gtype_name, get_type)
820
+ self.ctype = ctype
821
+ self.c_symbol_prefix = c_symbol_prefix
822
+ self.members = members
823
+ for member in members:
824
+ member.parent = self
825
+ self.static_methods = []
826
+
827
+ def _walk(self, callback, chain):
828
+ for meth in self.static_methods:
829
+ meth.walk(callback, chain)
830
+
831
+
832
+ class Member(Annotated):
833
+
834
+ def __init__(self, name, value, symbol, nick):
835
+ Annotated.__init__(self)
836
+ self.name = name
837
+ self.value = value
838
+ self.symbol = symbol
839
+ self.nick = nick
840
+ self.parent = None
841
+
842
+ def __cmp__(self, other):
843
+ return cmp(self.name, other.name)
844
+
845
+ def __repr__(self):
846
+ return '%s(%r)' % (self.__class__.__name__, self.name)
847
+
848
+
849
+ class Compound(Node, Registered):
850
+ def __init__(self, name,
851
+ ctype=None,
852
+ gtype_name=None,
853
+ get_type=None,
854
+ c_symbol_prefix=None,
855
+ disguised=False):
856
+ Node.__init__(self, name)
857
+ Registered.__init__(self, gtype_name, get_type)
858
+ self.ctype = ctype
859
+ self.methods = []
860
+ self.static_methods = []
861
+ self.fields = []
862
+ self.constructors = []
863
+ self.disguised = disguised
864
+ self.gtype_name = gtype_name
865
+ self.get_type = get_type
866
+ self.c_symbol_prefix = c_symbol_prefix
867
+
868
+ def add_gtype(self, gtype_name, get_type):
869
+ self.gtype_name = gtype_name
870
+ self.get_type = get_type
871
+ self.namespace.type_names[gtype_name] = self
872
+
873
+ def _walk(self, callback, chain):
874
+ for ctor in self.constructors:
875
+ ctor.walk(callback, chain)
876
+ for func in self.methods:
877
+ func.walk(callback, chain)
878
+ for func in self.static_methods:
879
+ func.walk(callback, chain)
880
+ for field in self.fields:
881
+ if field.anonymous_node is not None:
882
+ field.anonymous_node.walk(callback, chain)
883
+
884
+ class Field(Annotated):
885
+
886
+ def __init__(self, name, typenode, readable, writable, bits=None,
887
+ anonymous_node=None):
888
+ Annotated.__init__(self)
889
+ assert (typenode or anonymous_node)
890
+ self.name = name
891
+ self.type = typenode
892
+ self.readable = readable
893
+ self.writable = writable
894
+ self.bits = bits
895
+ self.anonymous_node = anonymous_node
896
+ self.private = False
897
+ self.parent = None # a compound
898
+
899
+ def __cmp__(self, other):
900
+ return cmp(self.name, other.name)
901
+
902
+ def __repr__(self):
903
+ return '%s(%r)' % (self.__class__.__name__, self.name)
904
+
905
+
906
+ class Record(Compound):
907
+
908
+ def __init__(self, name,
909
+ ctype=None,
910
+ gtype_name=None,
911
+ get_type=None,
912
+ c_symbol_prefix=None,
913
+ disguised=False):
914
+ Compound.__init__(self, name,
915
+ ctype=ctype,
916
+ gtype_name=gtype_name,
917
+ get_type=get_type,
918
+ c_symbol_prefix=c_symbol_prefix,
919
+ disguised=disguised)
920
+ # If non-None, this record defines the FooClass C structure
921
+ # for some Foo GObject (or similar for GInterface)
922
+ self.is_gtype_struct_for = None
923
+
924
+
925
+ class Union(Compound):
926
+
927
+ def __init__(self, name,
928
+ ctype=None,
929
+ gtype_name=None,
930
+ get_type=None,
931
+ c_symbol_prefix=None,
932
+ disguised=False):
933
+ Compound.__init__(self, name,
934
+ ctype=ctype,
935
+ gtype_name=gtype_name,
936
+ get_type=get_type,
937
+ c_symbol_prefix=c_symbol_prefix,
938
+ disguised=disguised)
939
+
940
+
941
+ class Boxed(Node, Registered):
942
+ """A boxed type with no known associated structure/union."""
943
+ def __init__(self, name,
944
+ gtype_name=None,
945
+ get_type=None,
946
+ c_symbol_prefix=None):
947
+ assert gtype_name is not None
948
+ assert get_type is not None
949
+ Node.__init__(self, name)
950
+ Registered.__init__(self, gtype_name, get_type)
951
+ if get_type is not None:
952
+ assert c_symbol_prefix is not None
953
+ self.c_symbol_prefix = c_symbol_prefix
954
+ self.constructors = []
955
+ self.methods = []
956
+ self.static_methods = []
957
+
958
+ def _walk(self, callback, chain):
959
+ for ctor in self.constructors:
960
+ ctor.walk(callback, chain)
961
+ for meth in self.methods:
962
+ meth.walk(callback, chain)
963
+ for meth in self.static_methods:
964
+ meth.walk(callback, chain)
965
+
966
+
967
+ class Signal(Callable):
968
+
969
+ def __init__(self, name, retval, parameters, when=None,
970
+ no_recurse=False, detailed=False, action=False,
971
+ no_hooks=False):
972
+ Callable.__init__(self, name, retval, parameters, False)
973
+ self.when = when
974
+ self.no_recurse = no_recurse
975
+ self.detailed = detailed
976
+ self.action = action
977
+ self.no_hooks = no_hooks
978
+
979
+
980
+ class Class(Node, Registered):
981
+
982
+ def __init__(self, name, parent_type,
983
+ ctype=None,
984
+ gtype_name=None,
985
+ get_type=None,
986
+ c_symbol_prefix=None,
987
+ is_abstract=False):
988
+ Node.__init__(self, name)
989
+ Registered.__init__(self, gtype_name, get_type)
990
+ self.ctype = ctype
991
+ self.c_symbol_prefix = c_symbol_prefix
992
+ self.parent_type = parent_type
993
+ self.fundamental = False
994
+ self.unref_func = None
995
+ self.ref_func = None
996
+ self.set_value_func = None
997
+ self.get_value_func = None
998
+ # When we're in the scanner, we keep around a list
999
+ # of parents so that we can transparently fall back
1000
+ # if there are 'hidden' parents
1001
+ self.parent_chain = []
1002
+ self.glib_type_struct = None
1003
+ self.is_abstract = is_abstract
1004
+ self.methods = []
1005
+ self.virtual_methods = []
1006
+ self.static_methods = []
1007
+ self.interfaces = []
1008
+ self.constructors = []
1009
+ self.properties = []
1010
+ self.fields = []
1011
+ self.signals = []
1012
+
1013
+ def _walk(self, callback, chain):
1014
+ for meth in self.methods:
1015
+ meth.walk(callback, chain)
1016
+ for meth in self.virtual_methods:
1017
+ meth.walk(callback, chain)
1018
+ for meth in self.static_methods:
1019
+ meth.walk(callback, chain)
1020
+ for ctor in self.constructors:
1021
+ ctor.walk(callback, chain)
1022
+ for field in self.fields:
1023
+ if field.anonymous_node:
1024
+ field.anonymous_node.walk(callback, chain)
1025
+ for sig in self.signals:
1026
+ sig.walk(callback, chain)
1027
+ for prop in self.properties:
1028
+ prop.walk(callback, chain)
1029
+
1030
+
1031
+ class Interface(Node, Registered):
1032
+
1033
+ def __init__(self, name, parent_type,
1034
+ ctype=None,
1035
+ gtype_name=None,
1036
+ get_type=None,
1037
+ c_symbol_prefix=None):
1038
+ Node.__init__(self, name)
1039
+ Registered.__init__(self, gtype_name, get_type)
1040
+ self.ctype = ctype
1041
+ self.c_symbol_prefix = c_symbol_prefix
1042
+ self.parent_type = parent_type
1043
+ self.parent_chain = []
1044
+ self.methods = []
1045
+ self.signals = []
1046
+ self.static_methods = []
1047
+ self.virtual_methods = []
1048
+ self.glib_type_struct = None
1049
+ self.properties = []
1050
+ self.fields = []
1051
+ self.prerequisites = []
1052
+ # Not used yet, exists just to avoid an exception in
1053
+ # Namespace.append()
1054
+ self.constructors = []
1055
+
1056
+ def _walk(self, callback, chain):
1057
+ for meth in self.methods:
1058
+ meth.walk(callback, chain)
1059
+ for meth in self.static_methods:
1060
+ meth.walk(callback, chain)
1061
+ for meth in self.virtual_methods:
1062
+ meth.walk(callback, chain)
1063
+ for field in self.fields:
1064
+ if field.anonymous_node:
1065
+ field.anonymous_node.walk(callback, chain)
1066
+ for sig in self.signals:
1067
+ sig.walk(callback, chain)
1068
+
1069
+
1070
+ class Constant(Node):
1071
+
1072
+ def __init__(self, name, value_type, value, ctype):
1073
+ Node.__init__(self, name)
1074
+ self.value_type = value_type
1075
+ self.value = value
1076
+ self.ctype = ctype
1077
+
1078
+
1079
+ class Property(Node):
1080
+
1081
+ def __init__(self, name, typeobj, readable, writable,
1082
+ construct, construct_only, transfer=None):
1083
+ Node.__init__(self, name)
1084
+ self.type = typeobj
1085
+ self.readable = readable
1086
+ self.writable = writable
1087
+ self.construct = construct
1088
+ self.construct_only = construct_only
1089
+ if transfer is None:
1090
+ self.transfer = PARAM_TRANSFER_NONE
1091
+ else:
1092
+ self.transfer = transfer
1093
+ self.parent = None # A Class or Interface
1094
+
1095
+
1096
+ class Callback(Callable):
1097
+
1098
+ def __init__(self, name, retval, parameters, throws, ctype=None):
1099
+ Callable.__init__(self, name, retval, parameters, throws)
1100
+ self.ctype = ctype