[gobject-introspection] scanner: Add c_type for callbacks
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gobject-introspection] scanner: Add c_type for callbacks
- Date: Tue, 14 Sep 2010 17:09:46 +0000 (UTC)
commit d8c4caf990642050049ba0cff7b6916e01c354da
Author: Colin Walters <walters verbum org>
Date: Tue Sep 14 13:08:50 2010 -0400
scanner: Add c_type for callbacks
We weren't doing this consistently, which broke nsname != cprefix
cases.
https://bugzilla.gnome.org/show_bug.cgi?id=629683
giscanner/girwriter.py | 2 +-
giscanner/transformer.py | 3 ++-
tests/scanner/Regress-1.0-expected.gir | 19 +++++++++++++++++++
tests/scanner/regress.h | 7 +++++++
4 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index d3b023a..80e1719 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -430,7 +430,7 @@ and/or use gtk-doc annotations. ''')
def _write_callback(self, callback):
attrs = []
if callback.namespace:
- attrs.append(('c:type', callback.c_name))
+ attrs.append(('c:type', callback.ctype or callback.c_name))
self._write_callable(callback, 'callback', attrs)
def _write_record(self, record, extra_attrs=[]):
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index f9a4ead..02942c8 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -703,7 +703,8 @@ raise ValueError."""
except TransformerException, e:
message.warn(e)
return None
- callback = ast.Callback(name, retval, parameters, False)
+ callback = ast.Callback(name, retval, parameters, False,
+ ctype=symbol.ident)
callback.add_symbol_reference(symbol)
return callback
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 16b8015..ebbcb0a 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -126,6 +126,25 @@ use it should be.</doc>
<type name="gint" c:type="int"/>
</return-value>
</callback>
+ <callback name="TestCallbackFull" c:type="RegressTestCallbackFull">
+ <return-value transfer-ownership="none">
+ <type name="gint" c:type="int"/>
+ </return-value>
+ <parameters>
+ <parameter name="foo" transfer-ownership="none">
+ <doc xml:whitespace="preserve">the investment rate</doc>
+ <type name="gint" c:type="int"/>
+ </parameter>
+ <parameter name="bar" transfer-ownership="none">
+ <doc xml:whitespace="preserve">how much money</doc>
+ <type name="gdouble" c:type="double"/>
+ </parameter>
+ <parameter name="path" transfer-ownership="none">
+ <doc xml:whitespace="preserve">Path to file</doc>
+ <type name="filename"/>
+ </parameter>
+ </parameters>
+ </callback>
<callback name="TestCallbackUserData" c:type="RegressTestCallbackUserData">
<return-value transfer-ownership="none">
<type name="gint" c:type="int"/>
diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h
index dde4e5b..ac71307 100644
--- a/tests/scanner/regress.h
+++ b/tests/scanner/regress.h
@@ -413,6 +413,13 @@ regress_test_fundamental_sub_object_new (const char *data);
typedef void (*RegressTestSimpleCallback) (void);
typedef int (*RegressTestCallback) (void);
typedef int (*RegressTestCallbackUserData) (gpointer user_data);
+/**
+ * RegressTestCallbackFull:
+ * @foo: the investment rate
+ * @bar: how much money
+ * @path: (type filename): Path to file
+ */
+typedef int (*RegressTestCallbackFull) (int foo, double bar, char *path);
void regress_test_simple_callback (RegressTestSimpleCallback callback);
int regress_test_callback (RegressTestCallback callback);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]