gobject-introspection 2.0.2-x86-mingw32 → 2.0.3-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +5 -2
- data/ext/gobject-introspection/rb-gi-argument.c +215 -4
- data/ext/gobject-introspection/rb-gi-loader.c +7 -2
- data/ext/gobject-introspection/rb-gi-struct-info.c +1 -1
- data/lib/1.9/gobject_introspection.so +0 -0
- data/lib/2.0/gobject_introspection.so +0 -0
- data/test/test-function-info.rb +3 -1
- data/vendor/local/bin/g-ir-compiler.exe +0 -0
- data/vendor/local/bin/g-ir-generate.exe +0 -0
- data/vendor/local/bin/libgirepository-1.0-1.dll +0 -0
- data/vendor/local/lib/girepository-1.0/DBus-1.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/DBusGLib-1.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GIRepository-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GLib-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GModule-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GObject-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/Gio-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/win32-1.0.typelib +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.py +1 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.py +52 -47
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.py +48 -42
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.py +11 -10
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.py +7 -5
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.py +22 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.py +120 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.py +14 -2
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.py +19 -10
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.py +18 -11
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.py +10 -13
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.py +24 -30
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.py +11 -12
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.py +25 -21
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.py +1 -1
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.py +98 -100
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.py +10 -8
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.py +28 -16
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.py +83 -9
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.py +5 -1
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.py +20 -21
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.py +3 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.py +32 -41
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.py +9 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.py +9 -11
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyo +0 -0
- data/vendor/local/lib/libgirepository-1.0.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.dll.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.la +1 -1
- data/vendor/local/lib/pkgconfig/gobject-introspection-1.0.pc +1 -1
- data/vendor/local/lib/pkgconfig/gobject-introspection-no-export-1.0.pc +1 -1
- data/vendor/local/share/gir-1.0/GIRepository-2.0.gir +691 -691
- data/vendor/local/share/gir-1.0/GLib-2.0.gir +6972 -6467
- data/vendor/local/share/gir-1.0/GModule-2.0.gir +103 -4
- data/vendor/local/share/gir-1.0/GObject-2.0.gir +2085 -1955
- data/vendor/local/share/gir-1.0/Gio-2.0.gir +10955 -9269
- data/vendor/local/share/gir-1.0/win32-1.0.gir +19 -0
- data/vendor/local/share/gobject-introspection-1.0/Makefile.introspection +2 -2
- data/vendor/local/share/gobject-introspection-1.0/gdump.c +7 -2
- data/vendor/local/share/gobject-introspection-1.0/tests/annotation.c +15 -15
- data/vendor/local/share/gobject-introspection-1.0/tests/annotation.h +1 -1
- data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.c +14 -0
- data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.h +2 -2
- data/vendor/local/share/gobject-introspection-1.0/tests/regress.c +8 -0
- data/vendor/local/share/gobject-introspection-1.0/tests/regress.h +9 -0
- metadata +20 -21
- data/vendor/local/lib/gobject-introspection/giscanner/odict.py +0 -50
- data/vendor/local/lib/gobject-introspection/giscanner/odict.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/odict.pyo +0 -0
@@ -35,9 +35,8 @@ from .annotationparser import (OPT_ALLOW_NONE, OPT_ARRAY, OPT_ATTRIBUTE,
|
|
35
35
|
OPT_ARRAY_LENGTH, OPT_ARRAY_ZERO_TERMINATED,
|
36
36
|
OPT_CONSTRUCTOR, OPT_METHOD,
|
37
37
|
OPT_TRANSFER_NONE, OPT_TRANSFER_FLOATING)
|
38
|
-
from .
|
39
|
-
|
40
|
-
from .utils import to_underscores, to_underscores_noprefix
|
38
|
+
from .utils import to_underscores_noprefix
|
39
|
+
|
41
40
|
|
42
41
|
class MainTransformer(object):
|
43
42
|
|
@@ -50,12 +49,10 @@ class MainTransformer(object):
|
|
50
49
|
# Public API
|
51
50
|
|
52
51
|
def transform(self):
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
*
|
57
|
-
* Broken --identifier-prefix
|
58
|
-
""")
|
52
|
+
if not self._namespace.names:
|
53
|
+
message.fatal('Namespace is empty; likely causes are:\n'
|
54
|
+
'* Not including .h files to be scanned\n'
|
55
|
+
'* Broken --identifier-prefix')
|
59
56
|
|
60
57
|
# Some initial namespace surgery
|
61
58
|
self._namespace.walk(self._pass_fixup_hidden_fields)
|
@@ -109,17 +106,14 @@ class MainTransformer(object):
|
|
109
106
|
|
110
107
|
def _pass_fixup_hidden_fields(self, node, chain):
|
111
108
|
"""Hide all callbacks starting with _; the typical
|
112
|
-
usage is void (*_gtk_reserved1)(void);"""
|
113
|
-
if
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
if field is None:
|
118
|
-
continue
|
119
|
-
if (field.name.startswith('_')
|
109
|
+
usage is void (*_gtk_reserved1)(void);"""
|
110
|
+
if isinstance(node, (ast.Class, ast.Interface, ast.Record, ast.Union)):
|
111
|
+
for field in node.fields:
|
112
|
+
if (field
|
113
|
+
and field.name.startswith('_')
|
120
114
|
and field.anonymous_node is not None
|
121
115
|
and isinstance(field.anonymous_node, ast.Callback)):
|
122
|
-
|
116
|
+
field.introspectable = False
|
123
117
|
return True
|
124
118
|
|
125
119
|
def _get_validate_parameter_name(self, parent, param_name, origin):
|
@@ -142,7 +136,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
142
136
|
def _apply_annotation_rename_to(self, node, chain, block):
|
143
137
|
if not block:
|
144
138
|
return
|
145
|
-
rename_to = block.
|
139
|
+
rename_to = block.tags.get(TAG_RENAME_TO)
|
146
140
|
if not rename_to:
|
147
141
|
return
|
148
142
|
rename_to = rename_to.value
|
@@ -211,7 +205,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
211
205
|
if isinstance(node, ast.Function):
|
212
206
|
self._apply_annotations_function(node, chain)
|
213
207
|
if isinstance(node, ast.Callback):
|
214
|
-
self._apply_annotations_callable(node, chain, block
|
208
|
+
self._apply_annotations_callable(node, chain, block=self._get_block(node))
|
215
209
|
if isinstance(node, (ast.Class, ast.Interface, ast.Union, ast.Enum,
|
216
210
|
ast.Bitfield, ast.Callback)):
|
217
211
|
self._apply_annotations_annotated(node, self._get_block(node))
|
@@ -234,13 +228,13 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
234
228
|
if isinstance(node, ast.Class):
|
235
229
|
block = self._get_block(node)
|
236
230
|
if block:
|
237
|
-
tag = block.
|
231
|
+
tag = block.tags.get(TAG_UNREF_FUNC)
|
238
232
|
node.unref_func = tag.value if tag else None
|
239
|
-
tag = block.
|
233
|
+
tag = block.tags.get(TAG_REF_FUNC)
|
240
234
|
node.ref_func = tag.value if tag else None
|
241
|
-
tag = block.
|
235
|
+
tag = block.tags.get(TAG_SET_VALUE_FUNC)
|
242
236
|
node.set_value_func = tag.value if tag else None
|
243
|
-
tag = block.
|
237
|
+
tag = block.tags.get(TAG_GET_VALUE_FUNC)
|
244
238
|
node.get_value_func = tag.value if tag else None
|
245
239
|
if isinstance(node, ast.Constant):
|
246
240
|
self._apply_annotations_constant(node)
|
@@ -264,7 +258,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
264
258
|
Use resolver() on each identifier, and combiner() on the parts of
|
265
259
|
each complete type. (top_combiner is used on the top-most type.)"""
|
266
260
|
bits = re.split(r'([,<>()])', type_str, 1)
|
267
|
-
first, sep, rest = [bits[0], '', ''] if (len(bits)==1) else bits
|
261
|
+
first, sep, rest = [bits[0], '', ''] if (len(bits) == 1) else bits
|
268
262
|
args = [resolver(first)]
|
269
263
|
if sep == '<' or sep == '(':
|
270
264
|
lastsep = '>' if (sep == '<') else ')'
|
@@ -275,9 +269,11 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
275
269
|
else:
|
276
270
|
rest = sep + rest
|
277
271
|
return top_combiner(*args), rest
|
272
|
+
|
278
273
|
def resolver(ident):
|
279
274
|
res = self._transformer.create_type_from_user_string(ident)
|
280
275
|
return res
|
276
|
+
|
281
277
|
def combiner(base, *rest):
|
282
278
|
if not rest:
|
283
279
|
return base
|
@@ -288,6 +284,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
288
284
|
message.warn(
|
289
285
|
"Too many parameters in type specification %r" % (type_str, ))
|
290
286
|
return base
|
287
|
+
|
291
288
|
def top_combiner(base, *rest):
|
292
289
|
if type_node is not None and isinstance(type_node, ast.Type):
|
293
290
|
base.is_const = type_node.is_const
|
@@ -334,24 +331,23 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
334
331
|
return block.position
|
335
332
|
|
336
333
|
def _check_array_element_type(self, array, options):
|
334
|
+
array_type = array.array_type
|
335
|
+
element_type = array.element_type
|
336
|
+
|
337
337
|
# GPtrArrays are allowed to contain non basic types
|
338
338
|
# (except enums and flags) or basic types that are
|
339
339
|
# as big as a gpointer
|
340
|
-
if
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
message.warn("invalid (element-type) for a GPtrArray, "
|
346
|
-
"must be a pointer", options.position)
|
340
|
+
if array_type == ast.Array.GLIB_PTRARRAY:
|
341
|
+
if ((element_type in ast.BASIC_GIR_TYPES and not element_type in ast.POINTER_TYPES)
|
342
|
+
or isinstance(element_type, (ast.Enum, ast.Bitfield))):
|
343
|
+
message.warn("invalid (element-type) for a GPtrArray, "
|
344
|
+
"must be a pointer", options.position)
|
347
345
|
|
348
346
|
# GByteArrays have (element-type) guint8 by default
|
349
|
-
if
|
350
|
-
if
|
347
|
+
if array_type == ast.Array.GLIB_BYTEARRAY:
|
348
|
+
if element_type == ast.TYPE_ANY:
|
351
349
|
array.element_type = ast.TYPE_UINT8
|
352
|
-
elif not
|
353
|
-
ast.TYPE_INT8,
|
354
|
-
ast.TYPE_CHAR]:
|
350
|
+
elif not element_type in [ast.TYPE_UINT8, ast.TYPE_INT8, ast.TYPE_CHAR]:
|
355
351
|
message.warn("invalid (element-type) for a GByteArray, "
|
356
352
|
"must be one of guint8, gint8 or gchar",
|
357
353
|
options.position)
|
@@ -461,8 +457,8 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
461
457
|
|
462
458
|
def _get_transfer_default_returntype_basic(self, typeval):
|
463
459
|
if (typeval.is_equiv(ast.BASIC_GIR_TYPES)
|
464
|
-
|
465
|
-
|
460
|
+
or typeval.is_const
|
461
|
+
or typeval.is_equiv(ast.TYPE_NONE)):
|
466
462
|
return ast.PARAM_TRANSFER_NONE
|
467
463
|
elif typeval.is_equiv(ast.TYPE_STRING):
|
468
464
|
# Non-const strings default to FULL
|
@@ -542,8 +538,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
542
538
|
|
543
539
|
caller_allocates = False
|
544
540
|
annotated_direction = None
|
545
|
-
if (OPT_INOUT in options or
|
546
|
-
OPT_INOUT_ALT in options):
|
541
|
+
if (OPT_INOUT in options or OPT_INOUT_ALT in options):
|
547
542
|
annotated_direction = ast.PARAM_DIRECTION_INOUT
|
548
543
|
elif OPT_OUT in options:
|
549
544
|
subtype = options[OPT_OUT]
|
@@ -581,9 +576,9 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
581
576
|
|
582
577
|
self._adjust_container_type(parent, node, options)
|
583
578
|
|
584
|
-
if (OPT_ALLOW_NONE in options
|
585
|
-
|
586
|
-
|
579
|
+
if (OPT_ALLOW_NONE in options
|
580
|
+
or node.type.target_giname == 'Gio.AsyncReadyCallback'
|
581
|
+
or node.type.target_giname == 'Gio.Cancellable'):
|
587
582
|
node.allow_none = True
|
588
583
|
|
589
584
|
if tag is not None and tag.comment is not None:
|
@@ -602,17 +597,17 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
602
597
|
|
603
598
|
node.doc = block.comment if block.comment else ''
|
604
599
|
|
605
|
-
since_tag = block.
|
600
|
+
since_tag = block.tags.get(TAG_SINCE)
|
606
601
|
if since_tag is not None:
|
607
602
|
node.version = since_tag.value
|
608
603
|
|
609
|
-
deprecated_tag = block.
|
604
|
+
deprecated_tag = block.tags.get(TAG_DEPRECATED)
|
610
605
|
if deprecated_tag is not None:
|
611
606
|
value = deprecated_tag.value
|
612
607
|
if ': ' in value:
|
613
608
|
colon = value.find(': ')
|
614
609
|
version = value[:colon]
|
615
|
-
desc = value[colon+2:]
|
610
|
+
desc = value[colon + 2:]
|
616
611
|
else:
|
617
612
|
desc = value
|
618
613
|
version = None
|
@@ -620,7 +615,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
620
615
|
if version is not None:
|
621
616
|
node.deprecated_version = version
|
622
617
|
|
623
|
-
stability_tag = block.
|
618
|
+
stability_tag = block.tags.get(TAG_STABILITY)
|
624
619
|
if stability_tag is not None:
|
625
620
|
stability = stability_tag.value.capitalize()
|
626
621
|
if stability in ["Stable", "Unstable", "Private", "Internal"]:
|
@@ -629,7 +624,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
629
624
|
message.warn('unknown value "%s" for Stability tag' % (
|
630
625
|
stability_tag.value), stability_tag.position)
|
631
626
|
|
632
|
-
annos_tag = block.
|
627
|
+
annos_tag = block.tags.get(TAG_ATTRIBUTES)
|
633
628
|
if annos_tag is not None:
|
634
629
|
for key, value in annos_tag.options.items():
|
635
630
|
if value:
|
@@ -691,7 +686,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
691
686
|
|
692
687
|
def _apply_annotations_return(self, parent, return_, block):
|
693
688
|
if block:
|
694
|
-
tag = block.
|
689
|
+
tag = block.tags.get(TAG_RETURNS)
|
695
690
|
else:
|
696
691
|
tag = None
|
697
692
|
self._apply_annotations_param_ret_common(parent, return_, tag)
|
@@ -702,7 +697,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
702
697
|
declparams.add(parent.instance_parameter.argname)
|
703
698
|
for param in params:
|
704
699
|
if block:
|
705
|
-
tag = block.
|
700
|
+
tag = block.params.get(param.argname)
|
706
701
|
else:
|
707
702
|
tag = None
|
708
703
|
self._apply_annotations_param(parent, param, tag)
|
@@ -725,10 +720,9 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
725
720
|
(param, ) = unused
|
726
721
|
text = ', should be %r' % (param, )
|
727
722
|
else:
|
728
|
-
text = ', should be one of %s' % (
|
729
|
-
', '.join(repr(p) for p in unused), )
|
723
|
+
text = ', should be one of %s' % (', '.join(repr(p) for p in unused), )
|
730
724
|
|
731
|
-
tag = block.
|
725
|
+
tag = block.params.get(doc_name)
|
732
726
|
message.warn(
|
733
727
|
'%s: unknown parameter %r in documentation comment%s' % (
|
734
728
|
block.name, doc_name, text),
|
@@ -756,7 +750,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
756
750
|
def _apply_annotations_field(self, parent, block, field):
|
757
751
|
if not block:
|
758
752
|
return
|
759
|
-
tag = block.
|
753
|
+
tag = block.params.get(field.name)
|
760
754
|
if not tag:
|
761
755
|
return
|
762
756
|
t = tag.options.get(OPT_TYPE)
|
@@ -774,7 +768,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
774
768
|
self._apply_annotations_annotated(prop, block)
|
775
769
|
if not block:
|
776
770
|
return
|
777
|
-
transfer_tag = block.
|
771
|
+
transfer_tag = block.tags.get(TAG_TRANSFER)
|
778
772
|
if transfer_tag is not None:
|
779
773
|
transfer = transfer_tag.value
|
780
774
|
if transfer == OPT_TRANSFER_FLOATING:
|
@@ -782,28 +776,36 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
782
776
|
prop.transfer = transfer
|
783
777
|
else:
|
784
778
|
prop.transfer = self._get_transfer_default(parent, prop)
|
785
|
-
type_tag = block.
|
779
|
+
type_tag = block.tags.get(TAG_TYPE)
|
786
780
|
if type_tag:
|
787
781
|
prop.type = self._resolve_toplevel(type_tag.value, prop.type, prop, parent)
|
788
782
|
|
789
783
|
def _apply_annotations_signal(self, parent, signal):
|
784
|
+
names = []
|
790
785
|
prefix = self._get_annotation_name(parent)
|
791
786
|
block = self._blocks.get('%s::%s' % (prefix, signal.name))
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
#
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
787
|
+
|
788
|
+
if block:
|
789
|
+
self._apply_annotations_annotated(signal, block)
|
790
|
+
|
791
|
+
# We're only attempting to name the signal parameters if
|
792
|
+
# the number of parameters (@foo) is the same or greater
|
793
|
+
# than the number of signal parameters
|
794
|
+
if len(block.params) > len(signal.parameters):
|
795
|
+
names = block.params.items()
|
796
|
+
# Resolve real parameter names early, so that in later
|
797
|
+
# phase we can refer to them while resolving annotations.
|
798
|
+
for i, param in enumerate(signal.parameters):
|
799
|
+
param.argname, tag = names[i + 1]
|
800
|
+
elif len(signal.parameters) != 0:
|
801
|
+
# Only warn about missing params if there are actually parameters
|
802
|
+
# besides implicit self.
|
803
|
+
message.warn("incorrect number of parameters in comment block, "
|
804
|
+
"parameter annotations will be ignored.", block.position)
|
805
|
+
|
804
806
|
for i, param in enumerate(signal.parameters):
|
805
807
|
if names:
|
806
|
-
name, tag = names[i+1]
|
808
|
+
name, tag = names[i + 1]
|
807
809
|
options = getattr(tag, 'options', {})
|
808
810
|
param_type = options.get(OPT_TYPE)
|
809
811
|
if param_type:
|
@@ -821,7 +823,7 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
821
823
|
|
822
824
|
self._apply_annotations_annotated(node, block)
|
823
825
|
|
824
|
-
tag = block.
|
826
|
+
tag = block.tags.get(TAG_VALUE)
|
825
827
|
if tag:
|
826
828
|
node.value = tag.value
|
827
829
|
|
@@ -836,34 +838,30 @@ usage is void (*_gtk_reserved1)(void);"""
|
|
836
838
|
|
837
839
|
def _pass_read_annotations2(self, node, chain):
|
838
840
|
if isinstance(node, ast.Function):
|
839
|
-
self.
|
841
|
+
block = self._blocks.get(node.symbol)
|
842
|
+
|
843
|
+
self._apply_annotation_rename_to(node, chain, block)
|
844
|
+
|
845
|
+
# Handle virtual invokers
|
846
|
+
parent = chain[-1] if chain else None
|
847
|
+
if (block and parent):
|
848
|
+
virtual_annotation = block.tags.get(TAG_VFUNC)
|
849
|
+
if virtual_annotation:
|
850
|
+
invoker_name = virtual_annotation.value
|
851
|
+
matched = False
|
852
|
+
for vfunc in parent.virtual_methods:
|
853
|
+
if vfunc.name == invoker_name:
|
854
|
+
matched = True
|
855
|
+
vfunc.invoker = node.name
|
856
|
+
# Also merge in annotations
|
857
|
+
self._apply_annotations_callable(vfunc, [parent], block)
|
858
|
+
break
|
859
|
+
if not matched:
|
860
|
+
message.warn_node(node,
|
861
|
+
"Virtual slot %r not found for %r annotation" % (invoker_name,
|
862
|
+
TAG_VFUNC))
|
840
863
|
return True
|
841
864
|
|
842
|
-
def _apply_annotations2_function(self, node, chain):
|
843
|
-
block = self._blocks.get(node.symbol)
|
844
|
-
|
845
|
-
self._apply_annotation_rename_to(node, chain, block)
|
846
|
-
|
847
|
-
# Handle virtual invokers
|
848
|
-
parent = chain[-1] if chain else None
|
849
|
-
if not (block and parent):
|
850
|
-
return
|
851
|
-
virtual = block.get_tag(TAG_VFUNC)
|
852
|
-
if not virtual:
|
853
|
-
return
|
854
|
-
invoker_name = virtual.value
|
855
|
-
matched = False
|
856
|
-
for vfunc in parent.virtual_methods:
|
857
|
-
if vfunc.name == invoker_name:
|
858
|
-
matched = True
|
859
|
-
vfunc.invoker = node.name
|
860
|
-
# Also merge in annotations
|
861
|
-
self._apply_annotations_callable(vfunc, [parent], block)
|
862
|
-
break
|
863
|
-
if not matched:
|
864
|
-
message.warn_node(node,
|
865
|
-
"Virtual slot %r not found for %r annotation" % (invoker_name, TAG_VFUNC))
|
866
|
-
|
867
865
|
def _resolve_and_filter_type_list(self, typelist):
|
868
866
|
"""Given a list of Type instances, return a new list of types with
|
869
867
|
the ones that failed to resolve removed."""
|
@@ -1169,9 +1167,9 @@ method or constructor of some type."""
|
|
1169
1167
|
origin_node = self._get_constructor_class(func, subsymbol)
|
1170
1168
|
if origin_node is None:
|
1171
1169
|
if func.is_constructor:
|
1172
|
-
message.warn_node(
|
1173
|
-
|
1174
|
-
% (func.symbol, ))
|
1170
|
+
message.warn_node(
|
1171
|
+
func,
|
1172
|
+
"Can't find matching type for constructor; symbol=%r" % (func.symbol, ))
|
1175
1173
|
return False
|
1176
1174
|
|
1177
1175
|
# Some sanity checks; only objects and boxeds can have ctors
|
Binary file
|
Binary file
|
@@ -61,7 +61,7 @@ class Position(object):
|
|
61
61
|
return '%s:' % (filename, )
|
62
62
|
|
63
63
|
def offset(self, offset):
|
64
|
-
return Position(self.filename, self.line+offset, self.column)
|
64
|
+
return Position(self.filename, self.line + offset, self.column)
|
65
65
|
|
66
66
|
|
67
67
|
class MessageLogger(object):
|
@@ -119,16 +119,14 @@ If the warning is related to a ast.Node type, see log_node()."""
|
|
119
119
|
elif log_type == FATAL:
|
120
120
|
error_type = "Fatal"
|
121
121
|
if prefix:
|
122
|
-
text = (
|
123
|
-
|
124
|
-
prefix, text))
|
122
|
+
text = ('%s: %s: %s: %s: %s\n' % (last_position, error_type,
|
123
|
+
self._namespace.name, prefix, text))
|
125
124
|
else:
|
126
125
|
if self._namespace:
|
127
|
-
text = (
|
128
|
-
|
126
|
+
text = ('%s: %s: %s: %s\n' % (last_position, error_type,
|
127
|
+
self._namespace.name, text))
|
129
128
|
else:
|
130
|
-
text = (
|
131
|
-
'''%s: %s: %s\n''' % (last_position, error_type, text))
|
129
|
+
text = ('%s: %s: %s\n' % (last_position, error_type, text))
|
132
130
|
|
133
131
|
self._output.write(text)
|
134
132
|
if log_type == FATAL:
|
@@ -169,17 +167,21 @@ def log_node(log_type, node, text, context=None, positions=None):
|
|
169
167
|
ml = MessageLogger.get()
|
170
168
|
ml.log_node(log_type, node, text, context=context, positions=positions)
|
171
169
|
|
170
|
+
|
172
171
|
def warn(text, positions=None, prefix=None):
|
173
172
|
ml = MessageLogger.get()
|
174
173
|
ml.log(WARNING, text, positions, prefix)
|
175
174
|
|
175
|
+
|
176
176
|
def warn_node(node, text, context=None, positions=None):
|
177
177
|
log_node(WARNING, node, text, context=context, positions=positions)
|
178
178
|
|
179
|
+
|
179
180
|
def warn_symbol(symbol, text):
|
180
181
|
ml = MessageLogger.get()
|
181
182
|
ml.log_symbol(WARNING, symbol, text)
|
182
183
|
|
184
|
+
|
183
185
|
def fatal(text, positions=None, prefix=None):
|
184
186
|
ml = MessageLogger.get()
|
185
187
|
ml.log(FATAL, text, positions, prefix)
|
Binary file
|
Binary file
|
@@ -38,18 +38,21 @@ from giscanner.girparser import GIRParser
|
|
38
38
|
from giscanner.girwriter import GIRWriter
|
39
39
|
from giscanner.maintransformer import MainTransformer
|
40
40
|
from giscanner.shlibs import resolve_shlibs
|
41
|
-
from giscanner.sourcescanner import SourceScanner
|
41
|
+
from giscanner.sourcescanner import SourceScanner, ALL_EXTS
|
42
42
|
from giscanner.transformer import Transformer
|
43
43
|
from . import utils
|
44
44
|
|
45
|
+
|
45
46
|
def process_cflags_begin(option, opt, value, parser):
|
46
47
|
cflags = getattr(parser.values, option.dest)
|
47
48
|
while len(parser.rargs) > 0 and parser.rargs[0] != '--cflags-end':
|
48
49
|
cflags.append(parser.rargs.pop(0))
|
49
50
|
|
51
|
+
|
50
52
|
def process_cflags_end(option, opt, value, parser):
|
51
53
|
pass
|
52
54
|
|
55
|
+
|
53
56
|
def get_preprocessor_option_group(parser):
|
54
57
|
group = optparse.OptionGroup(parser, "Preprocessor options")
|
55
58
|
group.add_option("", "--cflags-begin",
|
@@ -71,6 +74,7 @@ def get_preprocessor_option_group(parser):
|
|
71
74
|
group.add_option("-p", dest="", help="Ignored")
|
72
75
|
return group
|
73
76
|
|
77
|
+
|
74
78
|
def get_windows_option_group(parser):
|
75
79
|
group = optparse.OptionGroup(parser, "Machine Dependent Options")
|
76
80
|
group.add_option("-m", help="some machine dependent option",
|
@@ -79,13 +83,13 @@ def get_windows_option_group(parser):
|
|
79
83
|
|
80
84
|
return group
|
81
85
|
|
86
|
+
|
82
87
|
def _get_option_parser():
|
83
88
|
parser = optparse.OptionParser('%prog [options] sources')
|
84
89
|
parser.add_option('', "--quiet",
|
85
90
|
action="store_true", dest="quiet",
|
86
91
|
default=False,
|
87
|
-
help="If passed, do not print details of normal"
|
88
|
-
+ " operation")
|
92
|
+
help="If passed, do not print details of normal operation")
|
89
93
|
parser.add_option("", "--format",
|
90
94
|
action="store", dest="format",
|
91
95
|
default="gir",
|
@@ -204,6 +208,7 @@ match the namespace prefix.""")
|
|
204
208
|
def _error(msg):
|
205
209
|
raise SystemExit('ERROR: %s' % (msg, ))
|
206
210
|
|
211
|
+
|
207
212
|
def passthrough_gir(path, f):
|
208
213
|
parser = GIRParser()
|
209
214
|
parser.parse(path)
|
@@ -211,6 +216,7 @@ def passthrough_gir(path, f):
|
|
211
216
|
writer = GIRWriter(parser.get_namespace())
|
212
217
|
f.write(writer.get_xml())
|
213
218
|
|
219
|
+
|
214
220
|
def test_codegen(optstring):
|
215
221
|
(namespace, out_h_filename, out_c_filename) = optstring.split(',')
|
216
222
|
if namespace == 'Everything':
|
@@ -221,6 +227,7 @@ def test_codegen(optstring):
|
|
221
227
|
_error("Invaild namespace %r" % (namespace, ))
|
222
228
|
return 0
|
223
229
|
|
230
|
+
|
224
231
|
def process_options(output, allowed_flags):
|
225
232
|
for option in output.split():
|
226
233
|
for flag in allowed_flags:
|
@@ -229,6 +236,7 @@ def process_options(output, allowed_flags):
|
|
229
236
|
yield option
|
230
237
|
break
|
231
238
|
|
239
|
+
|
232
240
|
def process_packages(options, packages):
|
233
241
|
args = ['pkg-config', '--cflags']
|
234
242
|
args.extend(packages)
|
@@ -248,15 +256,13 @@ def process_packages(options, packages):
|
|
248
256
|
options.cpp_defines.extend(pkg_options.cpp_defines)
|
249
257
|
options.cpp_undefines.extend(pkg_options.cpp_undefines)
|
250
258
|
|
259
|
+
|
251
260
|
def extract_filenames(args):
|
252
261
|
filenames = []
|
253
262
|
for arg in args:
|
254
263
|
# We don't support real C++ parsing yet, but we should be able
|
255
264
|
# to understand C API implemented in C++ files.
|
256
|
-
if (arg
|
257
|
-
arg.endswith('.cc') or arg.endswith('.cxx') or
|
258
|
-
arg.endswith('.h') or arg.endswith('.hpp') or
|
259
|
-
arg.endswith('.hxx')):
|
265
|
+
if os.path.splitext(arg)[1] in ALL_EXTS:
|
260
266
|
if not os.path.exists(arg):
|
261
267
|
_error('%s: no such a file or directory' % (arg, ))
|
262
268
|
# Make absolute, because we do comparisons inside scannerparser.c
|
@@ -264,6 +270,7 @@ def extract_filenames(args):
|
|
264
270
|
filenames.append(os.path.abspath(arg))
|
265
271
|
return filenames
|
266
272
|
|
273
|
+
|
267
274
|
def extract_filelist(options):
|
268
275
|
filenames = []
|
269
276
|
if not os.path.exists(options.filelist):
|
@@ -274,10 +281,10 @@ def extract_filelist(options):
|
|
274
281
|
# We don't support real C++ parsing yet, but we should be able
|
275
282
|
# to understand C API implemented in C++ files.
|
276
283
|
filename = line.strip()
|
277
|
-
if (filename.endswith('.c') or filename.endswith('.cpp')
|
278
|
-
|
279
|
-
|
280
|
-
|
284
|
+
if (filename.endswith('.c') or filename.endswith('.cpp')
|
285
|
+
or filename.endswith('.cc') or filename.endswith('.cxx')
|
286
|
+
or filename.endswith('.h') or filename.endswith('.hpp')
|
287
|
+
or filename.endswith('.hxx')):
|
281
288
|
if not os.path.exists(filename):
|
282
289
|
_error('%s: Invalid filelist entry-no such file or directory' % (line, ))
|
283
290
|
# Make absolute, because we do comparisons inside scannerparser.c
|
@@ -285,6 +292,7 @@ def extract_filelist(options):
|
|
285
292
|
filenames.append(os.path.abspath(filename))
|
286
293
|
return filenames
|
287
294
|
|
295
|
+
|
288
296
|
def create_namespace(options):
|
289
297
|
if options.strip_prefix:
|
290
298
|
print """g-ir-scanner: warning: Option --strip-prefix has been deprecated;
|
@@ -313,6 +321,7 @@ see --identifier-prefix and --symbol-prefix."""
|
|
313
321
|
identifier_prefixes=identifier_prefixes,
|
314
322
|
symbol_prefixes=symbol_prefixes)
|
315
323
|
|
324
|
+
|
316
325
|
def create_transformer(namespace, options):
|
317
326
|
transformer = Transformer(namespace,
|
318
327
|
accept_unprefixed=options.accept_unprefixed)
|
@@ -334,6 +343,7 @@ def create_transformer(namespace, options):
|
|
334
343
|
|
335
344
|
return transformer
|
336
345
|
|
346
|
+
|
337
347
|
def create_binary(transformer, options, args):
|
338
348
|
# Transform the C AST nodes into higher level
|
339
349
|
# GLib/GObject nodes
|
@@ -344,7 +354,7 @@ def create_binary(transformer, options, args):
|
|
344
354
|
gdump_parser.init_parse()
|
345
355
|
|
346
356
|
if options.program:
|
347
|
-
args=[options.program]
|
357
|
+
args = [options.program]
|
348
358
|
args.extend(options.program_args)
|
349
359
|
binary = IntrospectionBinary(args)
|
350
360
|
else:
|
@@ -357,6 +367,7 @@ def create_binary(transformer, options, args):
|
|
357
367
|
gdump_parser.parse()
|
358
368
|
return shlibs
|
359
369
|
|
370
|
+
|
360
371
|
def create_source_scanner(options, args):
|
361
372
|
if hasattr(options, 'filelist') and options.filelist:
|
362
373
|
filenames = extract_filelist(options)
|
@@ -374,6 +385,7 @@ def create_source_scanner(options, args):
|
|
374
385
|
ss.parse_macros(filenames)
|
375
386
|
return ss
|
376
387
|
|
388
|
+
|
377
389
|
def write_output(data, options):
|
378
390
|
if options.output == "-":
|
379
391
|
output = sys.stdout
|
@@ -393,7 +405,7 @@ def write_output(data, options):
|
|
393
405
|
os.unlink(temp_f_name)
|
394
406
|
try:
|
395
407
|
shutil.move(main_f_name, options.output)
|
396
|
-
except OSError
|
408
|
+
except OSError as e:
|
397
409
|
if e.errno == errno.EPERM:
|
398
410
|
os.unlink(main_f_name)
|
399
411
|
return 0
|
@@ -402,14 +414,15 @@ def write_output(data, options):
|
|
402
414
|
else:
|
403
415
|
try:
|
404
416
|
output = open(options.output, "w")
|
405
|
-
except IOError
|
417
|
+
except IOError as e:
|
406
418
|
_error("opening output for writing: %s" % (e.strerror, ))
|
407
419
|
|
408
420
|
try:
|
409
421
|
output.write(data)
|
410
|
-
except IOError
|
422
|
+
except IOError as e:
|
411
423
|
_error("while writing output: %s" % (e.strerror, ))
|
412
424
|
|
425
|
+
|
413
426
|
def scanner_main(args):
|
414
427
|
parser = _get_option_parser()
|
415
428
|
(options, args) = parser.parse_args(args)
|
@@ -455,7 +468,6 @@ def scanner_main(args):
|
|
455
468
|
blocks = ap.parse(ss.get_comments())
|
456
469
|
|
457
470
|
# Transform the C symbols into AST nodes
|
458
|
-
transformer.set_annotations(blocks)
|
459
471
|
transformer.parse(ss.get_symbols())
|
460
472
|
|
461
473
|
if not options.header_only:
|
Binary file
|
Binary file
|