gobject-introspection 2.0.2-x86-mingw32 → 2.0.3-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|