diff options
author | Colin Walters <walters@verbum.org> | 2010-07-27 06:16:37 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2010-08-31 16:05:56 -0400 |
commit | 36aa515f1036978ced8d4ffb808260844f7229e0 (patch) | |
tree | 93e06fb105a513a394365232bb632256f109dada /tests | |
parent | 552c1f1525e37a30376790151c1ba437776682c5 (diff) | |
download | gobject-introspection-36aa515f1036978ced8d4ffb808260844f7229e0.tar.gz |
Major rewrite
One of the first big changes in this rewrite is changing the Type
object to have separate target_fundamental and target_giname properties,
rather than just being strings. Previously in the scanner, it was
awful because we used heuristics around strings.
The ast.py is refactored so that not everything is a Node - that
was a rather useless abstraction. Now, only things which can have
a GIName are Node. E.g. Type and Field are no longer Node.
More things were merged from glibast.py into ast.py, since it isn't
a very useful split.
transformer.py gains more intelligence and will e.g. turn GLib.List
into a List() object earlier. The namespace processing is a lot
cleaner now; since we parse the included .girs, we know the C
prefix for each namespace, and have functions to parse both
C type names (GtkFooBar) and symbols gtk_foo_bar into their
symbols cleanly. Type resolution is much, much saner because
we know Type(target_giname=Gtk.Foo) maps to the namespace Gtk.
glibtransformer.py now just handles the XML processing from the dump,
and a few miscellaneous things.
The major heavy lifting now lives in primarytransformer.py, which
is a combination of most of annotationparser.py and half of
glibtransformer.py.
annotationparser.py now literally just parses annotations; it's
no longer in the business of e.g. guessing transfer too.
finaltransformer.py is a new file which does post-analysis for
"introspectability" mainly.
girparser.c is fixed for some introspectable=0 processing.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scanner/Annotation-1.0-expected.gir | 109 | ||||
-rw-r--r-- | tests/scanner/Bar-1.0-expected.gir | 9 | ||||
-rw-r--r-- | tests/scanner/Foo-1.0-expected.gir | 125 | ||||
-rw-r--r-- | tests/scanner/GtkFrob-1.0-expected.gir | 5 | ||||
-rw-r--r-- | tests/scanner/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 152 | ||||
-rw-r--r-- | tests/scanner/TestInherit-1.0-expected.gir | 6 | ||||
-rw-r--r-- | tests/scanner/Utility-1.0-expected.gir | 18 |
9 files changed, 276 insertions, 152 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index a86a750f..49833f10 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -14,7 +14,7 @@ BUILT_SOURCES += everything.c everything.h CLEANFILES += $(BUILT_SOURCES) everything-stamp.h everything-stamp.h: Makefile - $(AM_V_GEN) $(top_builddir)/tools/g-ir-scanner --test-codegen=Everything,everything.h,everything.c + $(AM_V_GEN) $(top_builddir)/tools/g-ir-scanner --generate-typelib-tests=Everything,everything.h,everything.c touch $@ everything.c: everything-stamp.h diff --git a/tests/scanner/Annotation-1.0-expected.gir b/tests/scanner/Annotation-1.0-expected.gir index 1d73c250..086f0639 100644 --- a/tests/scanner/Annotation-1.0-expected.gir +++ b/tests/scanner/Annotation-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -13,7 +13,8 @@ and/or use gtk-doc annotations. --> <namespace name="Annotation" version="1.0" shared-library="libannotation.so" - c:prefix="Annotation"> + c:identifier-prefixes="Annotation" + c:symbol-prefixes="annotation"> <callback name="Callback" c:type="AnnotationCallback"> <doc xml:whitespace="preserve">This is a callback.</doc> <return-value transfer-ownership="none"> @@ -74,6 +75,7 @@ and/or use gtk-doc annotations. --> </parameters> </callback> <class name="Object" + c:symbol-prefix="object" c:type="AnnotationObject" parent="GObject.Object" glib:type-name="AnnotationObject" @@ -154,7 +156,7 @@ and/or use gtk-doc annotations. --> <parameters> <parameter name="nums" transfer-ownership="none"> <doc xml:whitespace="preserve">Sequence of numbers that are zero-terminated</doc> - <array zero-terminated="0" length="2" c:type="int*"> + <array length="1" zero-terminated="0" c:type="int*"> <type name="gint"/> </array> </parameter> @@ -173,7 +175,7 @@ and/or use gtk-doc annotations. --> <parameters> <parameter name="nums" transfer-ownership="none"> <doc xml:whitespace="preserve">Sequence of numbers that are zero-terminated</doc> - <array length="2" c:type="int*"> + <array length="1" c:type="int*"> <type name="gint"/> </array> </parameter> @@ -215,7 +217,7 @@ and/or use gtk-doc annotations. --> <parameter name="func" transfer-ownership="none" scope="call" - closure="2"> + closure="1"> <doc xml:whitespace="preserve">Callback to invoke</doc> <type name="ForeachFunc" c:type="AnnotationForeachFunc"/> </parameter> @@ -365,7 +367,7 @@ each string needs to be freed.</doc> caller-allocates="0" transfer-ownership="full"> <doc xml:whitespace="preserve">Argument vector</doc> - <array length="1" c:type="char***"> + <array length="0" c:type="char***"> <type name="utf8"/> </array> </parameter> @@ -379,7 +381,7 @@ each string needs to be freed.</doc> <parameters> <parameter name="data" transfer-ownership="none"> <doc xml:whitespace="preserve">The data</doc> - <array length="2" c:type="guchar*"> + <array length="1" c:type="guchar*"> <type name="guint8"/> </array> </parameter> @@ -397,7 +399,7 @@ each string needs to be freed.</doc> <parameters> <parameter name="data" transfer-ownership="none"> <doc xml:whitespace="preserve">The data</doc> - <array length="2" c:type="gchar*"> + <array length="1" c:type="gchar*"> <type name="gint8"/> </array> </parameter> @@ -416,7 +418,7 @@ type.</doc> <parameters> <parameter name="data" transfer-ownership="none"> <doc xml:whitespace="preserve">The data</doc> - <array length="2" c:type="gpointer"> + <array length="1" c:type="gpointer"> <type name="guint8"/> </array> </parameter> @@ -448,13 +450,33 @@ type.</doc> </return-value> <parameters> <parameter name="bytes" transfer-ownership="none"> - <array c:type="guchar*"> - <type name="guint8"/> - </array> + <type name="guint8" c:type="guchar*"/> </parameter> </parameters> </method> - <method name="watch" c:identifier="annotation_object_watch_full"> + <method name="watch" + c:identifier="annotation_object_watch" + shadows="annotation_object_watch_full" + introspectable="0"> + <doc xml:whitespace="preserve">This is here just for the sake of being overriden by its +annotation_object_watch_full().</doc> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="func" transfer-ownership="none" closure="1"> + <doc xml:whitespace="preserve">The callback</doc> + <type name="ForeachFunc" c:type="AnnotationForeachFunc"/> + </parameter> + <parameter name="user_data" transfer-ownership="none"> + <doc xml:whitespace="preserve">The callback data</doc> + <type name="gpointer" c:type="gpointer"/> + </parameter> + </parameters> + </method> + <method name="watch_full" + c:identifier="annotation_object_watch_full" + shadowed-by="annotation_object_watch"> <doc xml:whitespace="preserve">Test overriding via the "Rename To" annotation.</doc> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -463,8 +485,8 @@ type.</doc> <parameter name="func" transfer-ownership="none" scope="notified" - closure="2" - destroy="3"> + closure="1" + destroy="2"> <doc xml:whitespace="preserve">The callback</doc> <type name="ForeachFunc" c:type="AnnotationForeachFunc"/> </parameter> @@ -472,7 +494,7 @@ type.</doc> <doc xml:whitespace="preserve">The callback data</doc> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="destroy" transfer-ownership="none" scope="call"> + <parameter name="destroy" transfer-ownership="none" scope="async"> <doc xml:whitespace="preserve">Destroy notification</doc> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> @@ -492,7 +514,7 @@ type.</doc> writable="1" construct="1" transfer-ownership="none"> - <type name="Callback" c:type="gpointer"/> + <type name="Callback"/> </property> <property name="string-property" version="1.0" @@ -502,7 +524,7 @@ type.</doc> construct="1" transfer-ownership="none"> <doc xml:whitespace="preserve">This is a property which is a string</doc> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </property> <field name="parent_instance"> <type name="GObject.Object" c:type="GObject"/> @@ -512,42 +534,42 @@ type.</doc> <return-value transfer-ownership="full"> <attribute name="some.annotation.foo3" value="val3"/> <doc xml:whitespace="preserve">the return value</doc> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </return-value> <parameters> - <parameter name="arg1" transfer-ownership="none"> + <parameter name="object" transfer-ownership="none"> <attribute name="some.annotation.foo1" value="val1"/> <doc xml:whitespace="preserve">a value</doc> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </parameter> - <parameter name="arg2" transfer-ownership="none"> + <parameter name="p0" transfer-ownership="none"> <attribute name="some.annotation.foo2" value="val2"/> <doc xml:whitespace="preserve">another value</doc> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </parameter> </parameters> </glib:signal> <glib:signal name="doc-empty-arg-parsing"> <doc xml:whitespace="preserve">This signal tests an empty document argument (@arg1)</doc> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> <parameters> <parameter name="object" transfer-ownership="none"> - <type name="gpointer" c:type="gpointer"/> + <type name="gpointer"/> </parameter> </parameters> </glib:signal> <glib:signal name="list-signal"> <doc xml:whitespace="preserve">This is a signal which takes a list of strings, but it's not known by GObject as it's only marked as G_TYPE_POINTER</doc> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> <parameters> - <parameter name="list" transfer-ownership="container"> + <parameter name="object" transfer-ownership="container"> <doc xml:whitespace="preserve">a list of strings</doc> - <type name="GLib.List" c:type="gpointer"> + <type name="GLib.List"> <type name="utf8"/> </type> </parameter> @@ -559,13 +581,13 @@ known by GObject as it's only marked as G_TYPE_POINTER</doc> deprecated-version="1.2"> <doc xml:whitespace="preserve">This is a signal which has a broken signal handler, it says it's pointer but it's actually a string.</doc> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> <parameters> - <parameter name="string" transfer-ownership="none"> + <parameter name="object" transfer-ownership="none"> <doc xml:whitespace="preserve">a string</doc> - <type name="utf8" c:type="gpointer"/> + <type name="utf8"/> </parameter> </parameters> </glib:signal> @@ -580,8 +602,8 @@ it says it's pointer but it's actually a string.</doc> <record name="Struct" c:type="AnnotationStruct"> <doc xml:whitespace="preserve">This is a test of an array of object in an field of a struct.</doc> <field name="objects" writable="1"> - <array zero-terminated="0" c:type="AnnotationObject*" fixed-size="10"> - <type name="Object"/> + <array zero-terminated="0" c:type="AnnotationObject" fixed-size="10"> + <type name="Object" c:type="AnnotationObject*"/> </array> </field> </record> @@ -614,13 +636,16 @@ detection, and fixing it via annotations.</doc> <parameters> <parameter name="callback" transfer-ownership="none" - scope="call" + scope="notified" closure="2" destroy="1"> <doc xml:whitespace="preserve">Destroy notification</doc> <type name="Callback" c:type="AnnotationCallback"/> </parameter> - <parameter name="destroy" transfer-ownership="none" scope="call"> + <parameter name="destroy" + transfer-ownership="none" + scope="notified" + closure="2"> <type name="NotifyFunc" c:type="AnnotationNotifyFunc"/> </parameter> <parameter name="data" transfer-ownership="none"> @@ -631,7 +656,7 @@ detection, and fixing it via annotations.</doc> <function name="get_source_file" c:identifier="annotation_get_source_file"> <return-value transfer-ownership="full"> <doc xml:whitespace="preserve">Source file</doc> - <type name="filename" c:type="char*"/> + <type name="filename"/> </return-value> </function> <function name="init" c:identifier="annotation_init"> @@ -669,7 +694,9 @@ detection, and fixing it via annotations.</doc> </parameter> </parameters> </function> - <function name="ptr_array" c:identifier="annotation_ptr_array"> + <function name="ptr_array" + c:identifier="annotation_ptr_array" + introspectable="0"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -706,7 +733,7 @@ detection, and fixing it via annotations.</doc> <parameters> <parameter name="fname" transfer-ownership="none"> <doc xml:whitespace="preserve">Source file</doc> - <type name="filename" c:type="char*"/> + <type name="filename"/> </parameter> </parameters> </function> diff --git a/tests/scanner/Bar-1.0-expected.gir b/tests/scanner/Bar-1.0-expected.gir index dee28b37..4d919fd9 100644 --- a/tests/scanner/Bar-1.0-expected.gir +++ b/tests/scanner/Bar-1.0-expected.gir @@ -2,15 +2,20 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> <include name="GLib" version="2.0"/> <include name="GObject" version="2.0"/> <package name="gobject-2.0"/> - <namespace name="Bar" version="1.0" shared-library="" c:prefix="Bar"> + <namespace name="Bar" + version="1.0" + shared-library="" + c:identifier-prefixes="Bar" + c:symbol-prefixes="bar"> <class name="Baz" + c:symbol-prefix="baz" c:type="BarBaz" parent="GObject.Object" glib:type-name="BarBaz" diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir index 003485bc..c52a9230 100644 --- a/tests/scanner/Foo-1.0-expected.gir +++ b/tests/scanner/Foo-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -15,12 +15,13 @@ and/or use gtk-doc annotations. --> <namespace name="Foo" version="1.0" shared-library="libfoo.so" - c:prefix="Foo"> + c:identifier-prefixes="Foo" + c:symbol-prefixes="foo"> <alias name="ObjectCookie" c:type="FooObjectCookie"> - <type name="gpointer"/> + <type name="gpointer" c:type="gpointer"/> </alias> <alias name="XEvent" c:type="FooXEvent"> - <type name="none"/> + <type name="gpointer" c:type="gpointer"/> </alias> <enumeration name="ASingle" c:type="FooASingle"> <member name="some_single_enum" @@ -35,7 +36,8 @@ and/or use gtk-doc annotations. --> <record name="BRect" c:type="FooBRect" glib:type-name="FooBRect" - glib:get-type="foo_brect_get_type"> + glib:get-type="foo_brect_get_type" + c:symbol-prefix="brect"> <field name="x" writable="1"> <type name="gdouble" c:type="double"/> </field> @@ -69,7 +71,8 @@ and/or use gtk-doc annotations. --> <union name="BUnion" c:type="FooBUnion" glib:type-name="FooBUnion" - glib:get-type="foo_bunion_get_type"> + glib:get-type="foo_bunion_get_type" + c:symbol-prefix="bunion"> <field name="type" writable="1"> <type name="gint" c:type="int"/> </field> @@ -94,7 +97,8 @@ and/or use gtk-doc annotations. --> <record name="Boxed" c:type="FooBoxed" glib:type-name="FooBoxed" - glib:get-type="foo_boxed_get_type"> + glib:get-type="foo_boxed_get_type" + c:symbol-prefix="boxed"> <constructor name="new" c:identifier="foo_boxed_new"> <return-value transfer-ownership="full"> <type name="Boxed" c:type="FooBoxed*"/> @@ -107,6 +111,7 @@ and/or use gtk-doc annotations. --> </method> </record> <class name="Buffer" + c:symbol-prefix="buffer" c:type="FooBuffer" parent="Object" glib:type-name="FooBuffer" @@ -121,6 +126,7 @@ and/or use gtk-doc annotations. --> </class> <record name="BufferClass" c:type="FooBufferClass" + disguised="1" glib:is-gtype-struct-for="Buffer"> </record> <callback name="Callback" c:type="FooCallback"> @@ -142,7 +148,8 @@ and/or use gtk-doc annotations. --> <record name="DBusData" c:type="FooDBusData" glib:type-name="FooDBusData" - glib:get-type="foo_dbus_data_get_type"> + glib:get-type="foo_dbus_data_get_type" + c:symbol-prefix="dbus_data"> <method name="method" c:identifier="foo_dbus_data_method"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -150,7 +157,7 @@ and/or use gtk-doc annotations. --> </method> </record> <constant name="DEFINE_SHOULD_BE_EXPOSED" value="should be exposed"> - <type name="utf8"/> + <type name="utf8" c:type="gchar*"/> </constant> <enumeration name="EnumFullname" c:type="FooEnumFullname"> <member name="one" value="1" c:identifier="FOO_ENUM_FULLNAME_ONE"/> @@ -250,6 +257,7 @@ and/or use gtk-doc annotations. --> </field> </record> <interface name="Interface" + c:symbol-prefix="interface" c:type="FooInterface" glib:type-name="FooInterface" glib:get-type="foo_interface_get_type" @@ -282,7 +290,7 @@ and/or use gtk-doc annotations. --> <type name="GObject.TypeInterface" c:type="GTypeInterface"/> </field> <field name="do_foo"> - <callback name="do_foo" c:type="do_foo"> + <callback name="do_foo"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -298,6 +306,7 @@ and/or use gtk-doc annotations. --> </field> </record> <class name="Object" + c:symbol-prefix="object" c:type="FooObject" parent="GObject.Object" glib:type-name="FooObject" @@ -314,7 +323,7 @@ and/or use gtk-doc annotations. --> uses a C sugar return type.</doc> <return-value transfer-ownership="none"> <doc xml:whitespace="preserve">The global #FooSubobject</doc> - <type name="Subobject" c:type="FooObject*"/> + <type name="Subobject"/> </return-value> </function> <function name="static_meth" c:identifier="foo_object_static_meth"> @@ -388,7 +397,7 @@ uses a C sugar return type.</doc> c:identifier="foo_object_new_cookie" introspectable="0"> <doc xml:whitespace="preserve">Not sure why this test is here...</doc> - <return-value transfer-ownership="full"> + <return-value> <type name="ObjectCookie" c:type="FooObjectCookie"/> </return-value> <parameters> @@ -460,11 +469,18 @@ uses a C sugar return type.</doc> </parameter> </parameters> </method> + <property name="hidden" + introspectable="0" + writable="1" + construct-only="1" + transfer-ownership="none"> + <type/> + </property> <property name="string" writable="1" construct="1" transfer-ownership="none"> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </property> <field name="parent_instance"> <type name="GObject.Object" c:type="GObject"/> @@ -474,14 +490,14 @@ uses a C sugar return type.</doc> </field> <glib:signal name="signal"> <return-value transfer-ownership="full"> - <type name="utf8" c:type="gchararray"/> + <type name="utf8"/> </return-value> <parameters> <parameter name="object" transfer-ownership="none"> - <type name="GObject.Object" c:type="GObject"/> + <type name="GObject.Object"/> </parameter> <parameter name="p0" transfer-ownership="none"> - <type name="gpointer" c:type="gpointer"/> + <type name="gpointer"/> </parameter> </parameters> </glib:signal> @@ -493,7 +509,7 @@ uses a C sugar return type.</doc> <type name="GObject.ObjectClass" c:type="GObjectClass"/> </field> <field name="virtual_method"> - <callback name="virtual_method" c:type="virtual_method"> + <callback name="virtual_method"> <return-value transfer-ownership="none"> <type name="gboolean" c:type="gboolean"/> </return-value> @@ -508,7 +524,7 @@ uses a C sugar return type.</doc> </callback> </field> <field name="read_fn"> - <callback name="read_fn" c:type="read_fn"> + <callback name="read_fn"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -529,12 +545,12 @@ uses a C sugar return type.</doc> </field> <field name="_reserved"> <array zero-terminated="0" c:type="GCallback" fixed-size="4"> - <type name="GObject.Callback"/> + <type name="GObject.Callback" c:type="GCallback"/> </array> </field> </record> - <constant name="PIE_IS_TASTY" value="3.14159"> - <type name="gdouble"/> + <constant name="PIE_IS_TASTY" value="3.141590"> + <type name="gdouble" c:type="gdouble"/> </constant> <record name="Rectangle" c:type="FooRectangle"> <field name="x" writable="1"> @@ -581,7 +597,7 @@ uses a C sugar return type.</doc> </method> </record> <constant name="SUCCESS_INT" value="4408"> - <type name="gint"/> + <type name="gint" c:type="gint"/> </constant> <enumeration name="Skippable" introspectable="0" c:type="FooSkippable"> <doc xml:whitespace="preserve">Some type that is only interesting from C and should not be @@ -612,9 +628,10 @@ exposed to language bindings.</doc> <type name="gint" c:type="int"/> </field> </record> - <record name="StructPrivate" c:type="FooStructPrivate"> + <record name="StructPrivate" c:type="FooStructPrivate" disguised="1"> </record> <interface name="SubInterface" + c:symbol-prefix="sub_interface" c:type="FooSubInterface" glib:type-name="FooSubInterface" glib:get-type="foo_sub_interface_get_type" @@ -631,8 +648,8 @@ exposed to language bindings.</doc> </return-value> </method> <glib:signal name="destroy-event"> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> </glib:signal> </interface> @@ -643,7 +660,7 @@ exposed to language bindings.</doc> <type name="GObject.TypeInterface" c:type="GTypeInterface"/> </field> <field name="destroy_event"> - <callback name="destroy_event" c:type="destroy_event"> + <callback name="destroy_event"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -655,7 +672,7 @@ exposed to language bindings.</doc> </callback> </field> <field name="do_bar"> - <callback name="do_bar" c:type="do_bar"> + <callback name="do_bar"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> @@ -668,6 +685,7 @@ exposed to language bindings.</doc> </field> </record> <class name="Subobject" + c:symbol-prefix="subobject" c:type="FooSubobject" parent="Object" abstract="1" @@ -699,12 +717,12 @@ exposed to language bindings.</doc> <type name="gint" c:type="int"/> </field> <field name="lines" writable="1"> - <array zero-terminated="0" c:type="char" fixed-size="80"> - <type name="gchar"/> + <array zero-terminated="0" c:type="gchar" fixed-size="80"> + <type name="gchar" c:type="char"/> </array> </field> <field name="data" writable="1"> - <type name="gpointer" c:type="guchar*"/> + <type name="guint8" c:type="guchar*"/> </field> </record> <union name="Union" c:type="FooUnion"> @@ -769,7 +787,7 @@ exposed to language bindings.</doc> <parameter name="data" transfer-ownership="none"> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="destroy" transfer-ownership="none" scope="call"> + <parameter name="destroy" transfer-ownership="none" scope="async"> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> </parameters> @@ -785,7 +803,7 @@ exposed to language bindings.</doc> </parameters> </function> <function name="enum_type_returnv" c:identifier="foo_enum_type_returnv"> - <return-value transfer-ownership="full"> + <return-value transfer-ownership="none"> <type name="EnumType" c:type="FooEnumType"/> </return-value> <parameters> @@ -794,6 +812,11 @@ exposed to language bindings.</doc> </parameter> </parameters> </function> + <function name="error_quark" c:identifier="foo_error_quark"> + <return-value transfer-ownership="none"> + <type name="GLib.Quark" c:type="GQuark"/> + </return-value> + </function> <function name="init" c:identifier="foo_init"> <return-value transfer-ownership="none"> <type name="gint" c:type="gint"/> @@ -832,6 +855,36 @@ exposed to language bindings.</doc> </parameter> </parameters> </function> + <function name="some_variant" + c:identifier="foo_some_variant" + introspectable="0"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="x" transfer-ownership="none"> + <type name="guint" c:type="guint"/> + </parameter> + <parameter name="args" transfer-ownership="none"> + <type name="va_list" c:type="va_list"/> + </parameter> + </parameters> + </function> + <function name="some_variant_ptr" + c:identifier="foo_some_variant_ptr" + introspectable="0"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="x" transfer-ownership="none"> + <type name="guint" c:type="guint"/> + </parameter> + <parameter name="args" transfer-ownership="none"> + <type name="va_list" c:type="va_list*"/> + </parameter> + </parameters> + </function> <function name="test_array" c:identifier="foo_test_array"> <return-value transfer-ownership="container"> <array name="GLib.Array" c:type="GArray*"> @@ -929,7 +982,7 @@ exposed to language bindings.</doc> <parameter name="i" transfer-ownership="none"> <type name="gint" c:type="gint"/> </parameter> - <parameter name="callback" transfer-ownership="none" scope="call"> + <parameter name="callback" transfer-ownership="none"> <type name="VarargsCallback" c:type="FooVarargsCallback"/> </parameter> </parameters> @@ -941,7 +994,7 @@ exposed to language bindings.</doc> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="callback" transfer-ownership="none" scope="call"> + <parameter name="callback" transfer-ownership="none"> <type name="VarargsCallback" c:type="FooVarargsCallback"/> </parameter> </parameters> @@ -953,10 +1006,10 @@ exposed to language bindings.</doc> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="callback" transfer-ownership="none" scope="call"> + <parameter name="callback" transfer-ownership="none"> <type name="VarargsCallback" c:type="FooVarargsCallback"/> </parameter> - <parameter name="callback2" transfer-ownership="none" scope="call"> + <parameter name="callback2" transfer-ownership="none"> <type name="VarargsCallback" c:type="FooVarargsCallback"/> </parameter> </parameters> diff --git a/tests/scanner/GtkFrob-1.0-expected.gir b/tests/scanner/GtkFrob-1.0-expected.gir index a890e95d..c8758472 100644 --- a/tests/scanner/GtkFrob-1.0-expected.gir +++ b/tests/scanner/GtkFrob-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -12,7 +12,8 @@ and/or use gtk-doc annotations. --> <namespace name="GtkFrob" version="1.0" shared-library="libgtkfrob.so" - c:prefix="Gtk"> + c:identifier-prefixes="Gtk" + c:symbol-prefixes="gtk_frob"> <function name="language_manager_get_default" c:identifier="gtk_frob_language_manager_get_default"> <return-value transfer-ownership="none"> diff --git a/tests/scanner/Makefile.am b/tests/scanner/Makefile.am index 1b5dc7f5..a30336a0 100644 --- a/tests/scanner/Makefile.am +++ b/tests/scanner/Makefile.am @@ -91,7 +91,7 @@ GtkFrob_1_0_gir_PACKAGES = gobject-2.0 GtkFrob_1_0_gir_LIBS = libgtkfrob.la GtkFrob_1_0_gir_INCLUDES = GObject-2.0 GtkFrob_1_0_gir_FILES = $(libgtkfrob_la_SOURCES) -GtkFrob_1_0_gir_SCANNERFLAGS = --strip-prefix=Gtk +GtkFrob_1_0_gir_SCANNERFLAGS = --identifier-prefix=Gtk --symbol-prefix=gtk_frob GIRS += GtkFrob-1.0.gir noinst_PROGRAMS = barapp diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index e909a2fe..d540a953 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -13,11 +13,13 @@ and/or use gtk-doc annotations. --> <namespace name="Regress" version="1.0" shared-library="libregress.so" - c:prefix="Regress"> + c:identifier-prefixes="Regress" + c:symbol-prefixes="regress"> <record name="TestBoxed" c:type="RegressTestBoxed" glib:type-name="RegressTestBoxed" - glib:get-type="regress_test_boxed_get_type"> + glib:get-type="regress_test_boxed_get_type" + c:symbol-prefix="test_boxed"> <field name="some_int8" writable="1"> <type name="gint8" c:type="gint8"/> </field> @@ -63,7 +65,7 @@ and/or use gtk-doc annotations. --> <type name="TestBoxed" c:type="RegressTestBoxed*"/> </return-value> <parameters> - <parameter name="s" transfer-ownership="full"> + <parameter name="s" transfer-ownership="none"> <type name="utf8" c:type="char*"/> </parameter> </parameters> @@ -84,7 +86,9 @@ and/or use gtk-doc annotations. --> </parameters> </method> </record> - <record name="TestBoxedPrivate" c:type="RegressTestBoxedPrivate"> + <record name="TestBoxedPrivate" + c:type="RegressTestBoxedPrivate" + disguised="1"> </record> <callback name="TestCallback" c:type="RegressTestCallback"> <return-value transfer-ownership="none"> @@ -136,13 +140,14 @@ and/or use gtk-doc annotations. --> glib:nick="flag3"/> </bitfield> <class name="TestFloating" + c:symbol-prefix="test_floating" c:type="RegressTestFloating" parent="GObject.InitiallyUnowned" glib:type-name="RegressTestFloating" glib:get-type="regress_test_floating_get_type" glib:type-struct="TestFloatingClass"> <constructor name="new" c:identifier="regress_test_floating_new"> - <return-value transfer-ownership="full"> + <return-value transfer-ownership="none"> <doc xml:whitespace="preserve">A new floating #RegressTestFloating</doc> <type name="TestFloating" c:type="RegressTestFloating*"/> </return-value> @@ -160,6 +165,7 @@ and/or use gtk-doc annotations. --> </field> </record> <class name="TestFundamentalObject" + c:symbol-prefix="test_fundamental_object" c:type="RegressTestFundamentalObject" abstract="1" glib:type-name="RegressTestFundamentalObject" @@ -234,6 +240,7 @@ and/or use gtk-doc annotations. --> </parameters> </callback> <class name="TestFundamentalSubObject" + c:symbol-prefix="test_fundamental_sub_object" c:type="RegressTestFundamentalSubObject" parent="TestFundamentalObject" glib:type-name="RegressTestFundamentalSubObject" @@ -269,6 +276,7 @@ and/or use gtk-doc annotations. --> </field> </record> <interface name="TestInterface" + c:symbol-prefix="test_interface" c:type="RegressTestInterface" glib:type-name="RegressTestInterface" glib:get-type="regress_test_interface_get_type" @@ -282,6 +290,7 @@ and/or use gtk-doc annotations. --> </field> </record> <class name="TestObj" + c:symbol-prefix="test_obj" c:type="RegressTestObj" parent="GObject.Object" glib:type-name="RegressTestObj" @@ -304,7 +313,7 @@ and/or use gtk-doc annotations. --> <parameter name="user_data" transfer-ownership="none"> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="notify" transfer-ownership="none" scope="call"> + <parameter name="notify" transfer-ownership="none" scope="async"> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> </parameters> @@ -321,6 +330,21 @@ and/or use gtk-doc annotations. --> </parameter> </parameters> </constructor> + <function name="null_out" c:identifier="regress_test_obj_null_out"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="obj" + direction="out" + caller-allocates="0" + transfer-ownership="full" + allow-none="1"> + <doc xml:whitespace="preserve">A #RegressTestObj</doc> + <type name="TestObj" c:type="RegressTestObj**"/> + </parameter> + </parameters> + </function> <function name="static_method" c:identifier="regress_test_obj_static_method"> <return-value transfer-ownership="none"> @@ -399,11 +423,6 @@ case.</doc> <type name="none" c:type="void"/> </return-value> </method> - <method name="null_out" c:identifier="regress_test_obj_null_out"> - <return-value transfer-ownership="none"> - <type name="none" c:type="void"/> - </return-value> - </method> <method name="set_bare" c:identifier="regress_test_obj_set_bare"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -487,10 +506,10 @@ case.</doc> </parameters> </method> <property name="bare" writable="1" transfer-ownership="none"> - <type name="GObject.Object" c:type="GObject"/> + <type name="GObject.Object"/> </property> <property name="boxed" writable="1" transfer-ownership="none"> - <type name="TestBoxed" c:type="RegressTestBoxed"/> + <type name="TestBoxed"/> </property> <property name="double" writable="1" transfer-ownership="none"> <type name="gdouble"/> @@ -499,7 +518,7 @@ case.</doc> <type name="gfloat"/> </property> <property name="hash-table" writable="1" transfer-ownership="container"> - <type name="GLib.HashTable" c:type="GHashTable"> + <type name="GLib.HashTable"> <type name="utf8"/> <type name="gint8"/> </type> @@ -508,7 +527,7 @@ case.</doc> <type name="gint"/> </property> <property name="list" writable="1" transfer-ownership="none"> - <type name="GLib.List" c:type="gpointer"> + <type name="GLib.List"> <type name="utf8"/> </type> </property> @@ -525,7 +544,10 @@ case.</doc> <type name="TestBoxed" c:type="RegressTestBoxed*"/> </field> <field name="hash_table"> - <type name="GLib.HashTable" c:type="GHashTable*"/> + <type name="GLib.HashTable" c:type="GHashTable*"> + <type name="gpointer" c:type="gpointer"/> + <type name="gpointer" c:type="gpointer"/> + </type> </field> <field name="list"> <type name="GLib.List" c:type="GList*"> @@ -545,17 +567,17 @@ case.</doc> <type name="utf8" c:type="char*"/> </field> <glib:signal name="test"> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> </glib:signal> <glib:signal name="test-with-static-scope-arg"> - <return-value transfer-ownership="full"> - <type name="none" c:type="void"/> + <return-value transfer-ownership="none"> + <type name="none"/> </return-value> <parameters> <parameter name="object" transfer-ownership="none"> - <type name="TestSimpleBoxedA" c:type="RegressTestSimpleBoxedA"/> + <type name="TestSimpleBoxedA"/> </parameter> </parameters> </glib:signal> @@ -567,7 +589,7 @@ case.</doc> <type name="GObject.ObjectClass" c:type="GObjectClass"/> </field> <field name="matrix"> - <callback name="matrix" c:type="matrix"> + <callback name="matrix"> <return-value transfer-ownership="none"> <type name="gint" c:type="int"/> </return-value> @@ -592,7 +614,8 @@ case.</doc> <record name="TestSimpleBoxedA" c:type="RegressTestSimpleBoxedA" glib:type-name="RegressTestSimpleBoxedA" - glib:get-type="regress_test_simple_boxed_a_get_type"> + glib:get-type="regress_test_simple_boxed_a_get_type" + c:symbol-prefix="test_simple_boxed_a"> <field name="some_int" writable="1"> <type name="gint" c:type="gint"/> </field> @@ -620,11 +643,18 @@ case.</doc> </parameter> </parameters> </method> + <function name="const_return" + c:identifier="regress_test_simple_boxed_a_const_return"> + <return-value transfer-ownership="none"> + <type name="TestSimpleBoxedA" c:type="RegressTestSimpleBoxedA*"/> + </return-value> + </function> </record> <record name="TestSimpleBoxedB" c:type="RegressTestSimpleBoxedB" glib:type-name="RegressTestSimpleBoxedB" - glib:get-type="regress_test_simple_boxed_b_get_type"> + glib:get-type="regress_test_simple_boxed_b_get_type" + c:symbol-prefix="test_simple_boxed_b"> <field name="some_int8" writable="1"> <type name="gint8" c:type="gint8"/> </field> @@ -694,15 +724,8 @@ case.</doc> </parameters> </method> </record> - <record name="TestStructC" c:type="_RegressTestStructC"> - <field name="another_int" writable="1"> - <type name="gint" c:type="gint"/> - </field> - <field name="obj" writable="1"> - <type name="GObject.Object" c:type="GObject*"/> - </field> - </record> <class name="TestSubObj" + c:symbol-prefix="test_sub_obj" c:type="RegressTestSubObj" parent="TestObj" glib:type-name="RegressTestSubObj" @@ -736,6 +759,7 @@ case.</doc> </field> </record> <class name="TestWi8021x" + c:symbol-prefix="test_wi_802_1x" c:type="RegressTestWi8021x" parent="GObject.Object" glib:type-name="RegressTestWi8021x" @@ -746,36 +770,44 @@ case.</doc> <type name="TestWi8021x" c:type="RegressTestWi8021x*"/> </return-value> </constructor> - <function name="static_method" - c:identifier="regress_test_wi_802_1x_static_method"> + <function name="get_testbool" + c:identifier="regress_test_wi_802_1x_get_testbool"> <return-value transfer-ownership="none"> - <type name="gint" c:type="int"/> + <type name="gboolean" c:type="gboolean"/> </return-value> <parameters> - <parameter name="x" transfer-ownership="none"> - <type name="gint" c:type="int"/> + <parameter name="obj" transfer-ownership="none"> + <type name="TestWi8021x" c:type="RegressTestWi8021x*"/> </parameter> </parameters> </function> - <method name="get_testbool" - c:identifier="regress_test_wi_802_1x_get_testbool"> - <return-value transfer-ownership="none"> - <type name="gboolean" c:type="gboolean"/> - </return-value> - </method> - <method name="set_testbool" - c:identifier="regress_test_wi_802_1x_set_testbool"> + <function name="set_testbool" + c:identifier="regress_test_wi_802_1x_set_testbool"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> + <parameter name="obj" transfer-ownership="none"> + <type name="TestWi8021x" c:type="RegressTestWi8021x*"/> + </parameter> <parameter name="v" transfer-ownership="none"> <type name="gboolean" c:type="gboolean"/> </parameter> </parameters> - </method> + </function> + <function name="static_method" + c:identifier="regress_test_wi_802_1x_static_method"> + <return-value transfer-ownership="none"> + <type name="gint" c:type="int"/> + </return-value> + <parameters> + <parameter name="x" transfer-ownership="none"> + <type name="gint" c:type="int"/> + </parameter> + </parameters> + </function> <property name="testbool" writable="1" transfer-ownership="none"> - <type name="gboolean" c:type="gboolean"/> + <type name="gboolean"/> </property> <field name="parent_instance"> <type name="GObject.Object" c:type="GObject"/> @@ -791,6 +823,14 @@ case.</doc> <type name="GObject.ObjectClass" c:type="GObjectClass"/> </field> </record> + <record name="_TestStructC" c:type="_RegressTestStructC"> + <field name="another_int" writable="1"> + <type name="gint" c:type="gint"/> + </field> + <field name="obj" writable="1"> + <type name="GObject.Object" c:type="GObject*"/> + </field> + </record> <function name="set_abort_on_error" c:identifier="regress_set_abort_on_error"> <return-value transfer-ownership="none"> @@ -1235,7 +1275,7 @@ is invoked.</doc> <parameter name="user_data" transfer-ownership="none"> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="notify" transfer-ownership="none" scope="call"> + <parameter name="notify" transfer-ownership="none" scope="async"> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> </parameters> @@ -1408,7 +1448,7 @@ call and can be released on return.</doc> c:identifier="regress_test_ghash_nested_everything_return"> <doc xml:whitespace="preserve">Specify nested parameterized types directly with the (type ) annotation.</doc> <return-value transfer-ownership="full"> - <type name="GLib.HashTable" c:type="GHashTable*"> + <type name="GLib.HashTable"> <type name="utf8"/> <type name="GLib.HashTable"> <type name="utf8"/> @@ -1914,12 +1954,6 @@ call and can be released on return.</doc> </parameter> </parameters> </function> - <function name="test_simple_boxed_a_const_return" - c:identifier="regress_test_simple_boxed_a_const_return"> - <return-value transfer-ownership="none"> - <type name="TestSimpleBoxedA" c:type="RegressTestSimpleBoxedA*"/> - </return-value> - </function> <function name="test_simple_callback" c:identifier="regress_test_simple_callback"> <return-value transfer-ownership="none"> @@ -2124,7 +2158,7 @@ call and can be released on return.</doc> <parameter name="user_data" transfer-ownership="none"> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="notify" transfer-ownership="none" scope="call"> + <parameter name="notify" transfer-ownership="none" scope="async"> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> <parameter name="y" @@ -2279,7 +2313,7 @@ call and can be released on return.</doc> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="in" transfer-ownership="full" allow-none="1"> + <parameter name="in" transfer-ownership="none" allow-none="1"> <type name="utf8" c:type="char*"/> </parameter> </parameters> @@ -2353,7 +2387,7 @@ call and can be released on return.</doc> <function name="test_value_get_fundamental_object" c:identifier="regress_test_value_get_fundamental_object" introspectable="0"> - <return-value transfer-ownership="full"> + <return-value> <type name="TestFundamentalObject" c:type="RegressTestFundamentalObject*"/> </return-value> diff --git a/tests/scanner/TestInherit-1.0-expected.gir b/tests/scanner/TestInherit-1.0-expected.gir index 4ed155ea..84654543 100644 --- a/tests/scanner/TestInherit-1.0-expected.gir +++ b/tests/scanner/TestInherit-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -13,8 +13,10 @@ and/or use gtk-doc annotations. --> <namespace name="TestInherit" version="1.0" shared-library="libtestinherit.so" - c:prefix="TestInherit"> + c:identifier-prefixes="TestInherit" + c:symbol-prefixes="test_inherit"> <class name="Drawable" + c:symbol-prefix="drawable" c:type="TestInheritDrawable" parent="GObject.Object" abstract="1" diff --git a/tests/scanner/Utility-1.0-expected.gir b/tests/scanner/Utility-1.0-expected.gir index f4c69092..c09c056b 100644 --- a/tests/scanner/Utility-1.0-expected.gir +++ b/tests/scanner/Utility-1.0-expected.gir @@ -2,7 +2,7 @@ <!-- This file was automatically generated from C sources - DO NOT EDIT! To affect the contents of this file, edit the original C definitions, and/or use gtk-doc annotations. --> -<repository version="1.1" +<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> @@ -12,13 +12,14 @@ and/or use gtk-doc annotations. --> <namespace name="Utility" version="1.0" shared-library="libutility.so" - c:prefix="Utility"> + c:identifier-prefixes="Utility" + c:symbol-prefixes="utility"> <alias name="Glyph" c:type="UtilityGlyph"> - <type name="guint32"/> + <type name="guint32" c:type="guint32"/> </alias> <record name="Buffer" c:type="UtilityBuffer"> <field name="data" writable="1"> - <type name="gpointer" c:type="char*"/> + <type name="gpointer"/> </field> <field name="length" writable="1"> <type name="gulong" c:type="gsize"/> @@ -61,6 +62,7 @@ and/or use gtk-doc annotations. --> <member name="c" value="4" c:identifier="UTILITY_FLAG_C"/> </bitfield> <class name="Object" + c:symbol-prefix="object" c:type="UtilityObject" parent="GObject.Object" glib:type-name="UtilityObject" @@ -77,14 +79,14 @@ and/or use gtk-doc annotations. --> <parameter name="func" transfer-ownership="none" scope="notified" - closure="3" - destroy="4"> + closure="2" + destroy="3"> <type name="FileFunc" c:type="UtilityFileFunc"/> </parameter> <parameter name="user_data" transfer-ownership="none"> <type name="gpointer" c:type="gpointer"/> </parameter> - <parameter name="destroy" transfer-ownership="none" scope="call"> + <parameter name="destroy" transfer-ownership="none" scope="async"> <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/> </parameter> </parameters> @@ -112,7 +114,7 @@ and/or use gtk-doc annotations. --> </field> <field name="data" writable="1"> <array zero-terminated="0" c:type="guint8" fixed-size="16"> - <type name="guint8"/> + <type name="guint8" c:type="guint8"/> </array> </field> </record> |