From 9dfa0adbfb53e43d6a56ade3e1757cb4e596007c Mon Sep 17 00:00:00 2001 From: Anton Gorenko Date: Tue, 31 Aug 2010 23:01:39 +0600 Subject: [PATCH] start to write tests for 'gobject-introspection'; small fixes --- basis/glib/ffi/ffi.factor | 22 +- .../loader/loader.factor | 28 +- .../GIMarshallingTests-1.0.gir | 3600 +++++++++++++++++ .../g-i-marshalling-tests/ffi/ffi.factor | 19 + .../g-i-marshalling-tests.factor | 5 + .../tests/marshalling.factor | 295 ++ basis/gobject/ffi/ffi.factor | 2 +- 7 files changed, 3959 insertions(+), 12 deletions(-) create mode 100644 basis/gobject-introspection/tests/g-i-marshalling-tests/GIMarshallingTests-1.0.gir create mode 100644 basis/gobject-introspection/tests/g-i-marshalling-tests/ffi/ffi.factor create mode 100644 basis/gobject-introspection/tests/g-i-marshalling-tests/g-i-marshalling-tests.factor create mode 100644 basis/gobject-introspection/tests/marshalling.factor diff --git a/basis/glib/ffi/ffi.factor b/basis/glib/ffi/ffi.factor index f810348aa0..405c25025f 100644 --- a/basis/glib/ffi/ffi.factor +++ b/basis/glib/ffi/ffi.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2009 Anton Gorenko. ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien alien.c-types alien.destructors -alien.libraries alien.syntax combinators compiler.units -gobject-introspection kernel system vocabs.parser words ; +alien.libraries alien.syntax classes.struct combinators +compiler.units gobject-introspection kernel system vocabs.parser +words ; IN: glib.ffi << @@ -64,11 +65,26 @@ TYPEDEF: guint16 gunichar2 TYPEDEF: gpointer pointer -REPLACE-C-TYPE: long\sdouble double +STRUCT: fake-long-double { data char[10] } ; +REPLACE-C-TYPE: long\sdouble fake-long-double + REPLACE-C-TYPE: any gpointer IMPLEMENT-STRUCTS: GPollFD GSource GSourceFuncs ; +CONSTANT: G_MININT8 HEX: -80 +CONSTANT: G_MAXINT8 HEX: 7f +CONSTANT: G_MAXUINT8 HEX: ff +CONSTANT: G_MININT16 HEX: -8000 +CONSTANT: G_MAXINT16 HEX: 7fff +CONSTANT: G_MAXUINT16 HEX: ffff +CONSTANT: G_MININT32 HEX: -80000000 +CONSTANT: G_MAXINT32 HEX: 7fffffff +CONSTANT: G_MAXUINT32 HEX: ffffffff +CONSTANT: G_MININT64 HEX: -8000000000000000 +CONSTANT: G_MAXINT64 HEX: 7fffffffffffffff +CONSTANT: G_MAXUINT64 HEX: ffffffffffffffff + GIR: vocab:glib/GLib-2.0.gir DESTRUCTOR: g_source_unref diff --git a/basis/gobject-introspection/loader/loader.factor b/basis/gobject-introspection/loader/loader.factor index 7f0b161322..8c79e7a0b8 100644 --- a/basis/gobject-introspection/loader/loader.factor +++ b/basis/gobject-introspection/loader/loader.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors ascii combinators fry gobject-introspection.common gobject-introspection.repository -gobject-introspection.types kernel math.parser sequences +gobject-introspection.types literals kernel math.parser sequences splitting xml.data xml.traversal ; FROM: namespaces => set get ; IN: gobject-introspection.loader @@ -57,12 +57,24 @@ SYMBOL: namespace-PREFIX { "varargs" [ drop f f ] } { "callback" [ drop f "any" f type boa ] } } case ; + +CONSTANT: type-tags { + $[ "array" ] + $[ "type" ] + $[ "varargs" ] + $[ "callback" ] +} + +: child-type-tag ( xml -- type-tag ) + children-tags [ + type-tags [ swap tag-named? ] with any? + ] find nip ; : load-parameter ( param xml -- param ) [ "transfer-ownership" attr >>transfer-ownership ] - [ first-child-tag "type" attr >>c-type ] + [ child-type-tag "type" attr >>c-type ] [ - first-child-tag xml>type + child-type-tag xml>type [ [ >>array-info ] [ >>type ] bi* ] [ 2drop f ] if* ] tri ; @@ -146,7 +158,7 @@ SYMBOL: namespace-PREFIX [ "readable" attr "0" = not >>readable? ] [ "construct" attr "1" = >>construct? ] [ "construct-only" attr "1" = >>construct-only? ] - [ first-child-tag xml>type nip >>type ] + [ child-type-tag xml>type nip >>type ] } cleave ; : xml>callback ( xml -- callback ) @@ -223,12 +235,12 @@ SYMBOL: namespace-PREFIX [ "name" attr >>name ] [ "writable" attr "1" = >>writable? ] [ - first-child-tag dup name>> main>> "callback" = + child-type-tag dup name>> main>> "callback" = [ drop "gpointer" ] [ "type" attr ] if >>c-type ] [ - first-child-tag xml>type + child-type-tag xml>type [ [ >>array-info ] [ >>type ] bi* ] [ 2drop f ] if* ] } cleave ; @@ -264,8 +276,8 @@ SYMBOL: namespace-PREFIX >>c-identifier ] [ "value" attr >>value ] - [ first-child-tag "type" attr >>c-type ] - [ first-child-tag xml>type nip >>type ] + [ child-type-tag "type" attr >>c-type ] + [ child-type-tag xml>type nip >>type ] } cleave ; : xml>namespace ( xml -- namespace ) diff --git a/basis/gobject-introspection/tests/g-i-marshalling-tests/GIMarshallingTests-1.0.gir b/basis/gobject-introspection/tests/g-i-marshalling-tests/GIMarshallingTests-1.0.gir new file mode 100644 index 0000000000..56d62773c6 --- /dev/null +++ b/basis/gobject-introspection/tests/g-i-marshalling-tests/GIMarshallingTests-1.0.gir @@ -0,0 +1,3600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + an array of strings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/basis/gobject-introspection/tests/g-i-marshalling-tests/ffi/ffi.factor b/basis/gobject-introspection/tests/g-i-marshalling-tests/ffi/ffi.factor new file mode 100644 index 0000000000..3bf08bd601 --- /dev/null +++ b/basis/gobject-introspection/tests/g-i-marshalling-tests/ffi/ffi.factor @@ -0,0 +1,19 @@ +! Copyright (C) 2010 Anton Gorenko. +! See http://factorcode.org/license.txt for BSD license. +USING: alien alien.c-types alien.libraries combinators kernel +system +gobject-introspection glib.ffi gobject.ffi ; +IN: gobject-introspection.tests.g-i-marshalling-tests.ffi + +<< +"gobject-introspection.tests.g-i-marshalling-tests" { + { [ os winnt? ] [ drop ] } + { [ os macosx? ] [ drop ] } + { [ os unix? ] [ "libgirepository-gimarshallingtests-1.0.so" cdecl add-library ] } +} cond +>> + +IMPLEMENT-STRUCTS: GIMarshallingTestsSimpleStruct ; + +GIR: vocab:gobject-introspection/tests/g-i-marshalling-tests/GIMarshallingTests-1.0.gir + diff --git a/basis/gobject-introspection/tests/g-i-marshalling-tests/g-i-marshalling-tests.factor b/basis/gobject-introspection/tests/g-i-marshalling-tests/g-i-marshalling-tests.factor new file mode 100644 index 0000000000..bde6d26e4c --- /dev/null +++ b/basis/gobject-introspection/tests/g-i-marshalling-tests/g-i-marshalling-tests.factor @@ -0,0 +1,5 @@ +! Copyright (C) 2010 Anton Gorenko. +! See http://factorcode.org/license.txt for BSD license. +USING: gobject-introspection.tests.g-i-marshalling-tests.ffi ; +IN: gobject-introspection.tests.g-i-marshalling-tests + diff --git a/basis/gobject-introspection/tests/marshalling.factor b/basis/gobject-introspection/tests/marshalling.factor new file mode 100644 index 0000000000..eecf21a381 --- /dev/null +++ b/basis/gobject-introspection/tests/marshalling.factor @@ -0,0 +1,295 @@ +! Copyright (C) 2010 Anton Gorenko. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors alien.c-types alien.data alien.strings +alien.syntax arrays classes.struct destructors +gobject-introspection.tests.g-i-marshalling-tests.ffi +glib.ffi gobject.ffi io.encodings.utf8 kernel literals +sequences specialized-arrays tools.test ; +IN: gobject-introspection.tests.marshalling + +SPECIALIZED-ARRAYS: gint gshort void* +GIMarshallingTestsSimpleStruct ; + +CONSTANT: G_I_MARSHALLING_TESTS_CONSTANT_NUMBER 42 + +CONSTANT: G_I_MARSHALLING_TESTS_CONSTANT_UTF8 "const ♥ utf8" + +! gboolean + +[ t ] [ g_i_marshalling_tests_boolean_return_true ] unit-test +[ f ] [ g_i_marshalling_tests_boolean_return_false ] unit-test + +: boolean-out-true ( -- out ) + { gboolean } [ g_i_marshalling_tests_boolean_out_true ] + with-out-parameters ; +[ t ] [ boolean-out-true ] unit-test + +: boolean-out-false ( -- out ) + { gboolean } [ g_i_marshalling_tests_boolean_out_false ] + with-out-parameters ; +[ f ] [ boolean-out-false ] unit-test + +! gint8 + +[ $ G_MAXINT8 ] [ g_i_marshalling_tests_int8_return_max ] unit-test +[ $ G_MININT8 ] [ g_i_marshalling_tests_int8_return_min ] unit-test + +: int8-out-max ( -- out ) + { gint8 } [ g_i_marshalling_tests_int8_out_max ] + with-out-parameters ; +[ $ G_MAXINT8 ] [ int8-out-max ] unit-test + +: int8-out-min ( -- out ) + { gint8 } [ g_i_marshalling_tests_int8_out_min ] + with-out-parameters ; +[ $ G_MININT8 ] [ int8-out-min ] unit-test + +: int8-inout-max-min ( -- out ) + { { gint8 initial: $ G_MAXINT8 } } + [ g_i_marshalling_tests_int8_inout_max_min ] + with-out-parameters ; +[ $ G_MININT8 ] [ int8-inout-max-min ] unit-test + +! guint8 + +[ $ G_MAXUINT8 ] [ g_i_marshalling_tests_uint8_return ] unit-test + +: uint8-out ( -- out ) + { guint8 } [ g_i_marshalling_tests_uint8_out ] + with-out-parameters ; +[ $ G_MAXUINT8 ] [ uint8-out ] unit-test + +: uint8-inout ( -- out ) + { { guint8 initial: $ G_MAXUINT8 } } + [ g_i_marshalling_tests_uint8_inout ] + with-out-parameters ; +[ 0 ] [ uint8-inout ] unit-test + +! gint16 + +[ $ G_MAXINT16 ] [ g_i_marshalling_tests_int16_return_max ] unit-test +[ $ G_MININT16 ] [ g_i_marshalling_tests_int16_return_min ] unit-test + +: int16-out-max ( -- out ) + { gint16 } [ g_i_marshalling_tests_int16_out_max ] + with-out-parameters ; +[ $ G_MAXINT16 ] [ int16-out-max ] unit-test + +: int16-out-min ( -- out ) + { gint16 } [ g_i_marshalling_tests_int16_out_min ] + with-out-parameters ; +[ $ G_MININT16 ] [ int16-out-min ] unit-test + +: int16-inout-max-min ( -- out ) + { { gint16 initial: $ G_MAXINT16 } } + [ g_i_marshalling_tests_int16_inout_max_min ] + with-out-parameters ; +[ $ G_MININT16 ] [ int16-inout-max-min ] unit-test + +! guint16 + +[ $ G_MAXUINT16 ] [ g_i_marshalling_tests_uint16_return ] unit-test + +: uint16-out ( -- out ) + { guint16 } [ g_i_marshalling_tests_uint16_out ] + with-out-parameters ; +[ $ G_MAXUINT16 ] [ uint16-out ] unit-test + +: uint16-inout ( -- out ) + { { guint16 initial: $ G_MAXUINT16 } } + [ g_i_marshalling_tests_uint16_inout ] + with-out-parameters ; +[ 0 ] [ uint16-inout ] unit-test + +! gint32 + +[ $ G_MAXINT32 ] [ g_i_marshalling_tests_int32_return_max ] unit-test +[ $ G_MININT32 ] [ g_i_marshalling_tests_int32_return_min ] unit-test + +: int32-out-max ( -- out ) + { gint32 } [ g_i_marshalling_tests_int32_out_max ] + with-out-parameters ; +[ $ G_MAXINT32 ] [ int32-out-max ] unit-test + +: int32-out-min ( -- out ) + { gint32 } [ g_i_marshalling_tests_int32_out_min ] + with-out-parameters ; +[ $ G_MININT32 ] [ int32-out-min ] unit-test + +: int32-inout-max-min ( -- out ) + { { gint32 initial: $ G_MAXINT32 } } + [ g_i_marshalling_tests_int32_inout_max_min ] + with-out-parameters ; +[ $ G_MININT32 ] [ int32-inout-max-min ] unit-test + +! guint32 + +[ $ G_MAXUINT32 ] [ g_i_marshalling_tests_uint32_return ] unit-test + +: uint32-out ( -- out ) + { guint32 } [ g_i_marshalling_tests_uint32_out ] + with-out-parameters ; +[ $ G_MAXUINT32 ] [ uint32-out ] unit-test + +: uint32-inout ( -- out ) + { { guint32 initial: $ G_MAXUINT32 } } + [ g_i_marshalling_tests_uint32_inout ] + with-out-parameters ; +[ 0 ] [ uint32-inout ] unit-test + +! gint64 + +[ $ G_MAXINT64 ] [ g_i_marshalling_tests_int64_return_max ] unit-test +[ $ G_MININT64 ] [ g_i_marshalling_tests_int64_return_min ] unit-test + +: int64-out-max ( -- out ) + { gint64 } [ g_i_marshalling_tests_int64_out_max ] + with-out-parameters ; +[ $ G_MAXINT64 ] [ int64-out-max ] unit-test + +: int64-out-min ( -- out ) + { gint64 } [ g_i_marshalling_tests_int64_out_min ] + with-out-parameters ; +[ $ G_MININT64 ] [ int64-out-min ] unit-test + +: int64-inout-max-min ( -- out ) + { { gint64 initial: $ G_MAXINT64 } } + [ g_i_marshalling_tests_int64_inout_max_min ] + with-out-parameters ; +[ $ G_MININT64 ] [ int64-inout-max-min ] unit-test + +! guint64 + +[ $ G_MAXUINT64 ] [ g_i_marshalling_tests_uint64_return ] unit-test + +: uint64-out ( -- out ) + { guint64 } [ g_i_marshalling_tests_uint64_out ] + with-out-parameters ; +[ $ G_MAXUINT64 ] [ uint64-out ] unit-test + +: uint64-inout ( -- out ) + { { guint64 initial: $ G_MAXUINT64 } } + [ g_i_marshalling_tests_uint64_inout ] + with-out-parameters ; +[ 0 ] [ uint64-inout ] unit-test + +! gssize +! gsize +! gfloat +! gdouble +! time_t + +! gtype + +[ $ G_TYPE_NONE ] +[ g_i_marshalling_tests_gtype_return ] unit-test + +: gtype-out ( -- out ) + { GType } [ g_i_marshalling_tests_gtype_out ] + with-out-parameters ; +[ $ G_TYPE_NONE ] [ gtype-out ] unit-test + +: gtype-inout ( -- out ) + { { GType initial: $ G_TYPE_NONE } } + [ g_i_marshalling_tests_gtype_inout ] + with-out-parameters ; +[ $ G_TYPE_INT ] [ gtype-inout ] unit-test + +! strings + +[ $ G_I_MARSHALLING_TESTS_CONSTANT_UTF8 ] +[ g_i_marshalling_tests_utf8_none_return utf8 alien>string ] unit-test + +[ $ G_I_MARSHALLING_TESTS_CONSTANT_UTF8 ] [ + [ + g_i_marshalling_tests_utf8_full_return &g_free + utf8 alien>string + ] with-destructors +] unit-test + +: utf8-none-out ( -- out ) + { pointer: gchar } + [ g_i_marshalling_tests_utf8_none_out ] + with-out-parameters ; +[ $ G_I_MARSHALLING_TESTS_CONSTANT_UTF8 ] +[ utf8-none-out utf8 alien>string ] unit-test + +: utf8-full-out ( -- out ) + { pointer: gchar } + [ g_i_marshalling_tests_utf8_full_out ] + with-out-parameters ; +[ $ G_I_MARSHALLING_TESTS_CONSTANT_UTF8 ] [ + [ utf8-full-out &g_free utf8 alien>string ] with-destructors +] unit-test + +: utf8-dangling-out ( -- out ) + { { pointer: gchar initial: f } } + [ g_i_marshalling_tests_utf8_dangling_out ] + with-out-parameters ; +[ f ] +[ utf8-dangling-out ] unit-test + +! arrays + +[ int-array{ -1 0 1 2 } ] +[ + g_i_marshalling_tests_array_fixed_int_return + 4 >int-array +] unit-test + +[ short-array{ -1 0 1 2 } ] +[ + g_i_marshalling_tests_array_fixed_short_return + 4 >short-array +] unit-test + +: array-fixed-out ( -- out ) + { pointer: gint } + [ g_i_marshalling_tests_array_fixed_out ] + with-out-parameters ; +[ int-array{ -1 0 1 2 } ] +[ + array-fixed-out + 4 >int-array +] unit-test + +: array-fixed-out-struct ( -- out ) + { pointer: gint } + [ g_i_marshalling_tests_array_fixed_out_struct ] + with-out-parameters ; +[ { { 7 6 } { 6 7 } } ] +[ + array-fixed-out-struct + 2 + [ [ long_>> ] [ int8>> ] bi 2array ] { } map-as +] unit-test + +: array-return ( -- array length ) + { gint } + [ g_i_marshalling_tests_array_return ] + with-out-parameters ; +[ int-array{ -1 0 1 2 } ] +[ array-return >int-array ] unit-test + +: array-out ( -- array length ) + { pointer: gint gint } + [ g_i_marshalling_tests_array_out ] + with-out-parameters ; +[ int-array{ -1 0 1 2 } ] +[ array-out >int-array ] unit-test + +[ { "0" "1" "2" f } ] +[ + g_i_marshalling_tests_array_zero_terminated_return + 4 [ utf8 alien>string ] { } map-as +] unit-test + +: array-zero-terminated-out ( -- out ) + { pointer: pointer: gchar } + [ g_i_marshalling_tests_array_zero_terminated_out ] + with-out-parameters ; +[ { "0" "1" "2" f } ] +[ + array-zero-terminated-out + 4 [ utf8 alien>string ] { } map-as +] unit-test diff --git a/basis/gobject/ffi/ffi.factor b/basis/gobject/ffi/ffi.factor index 7e2c5eace6..30100de3b9 100644 --- a/basis/gobject/ffi/ffi.factor +++ b/basis/gobject/ffi/ffi.factor @@ -15,7 +15,7 @@ IN: gobject.ffi >> TYPEDEF: void* GSignalCMarshaller -TYPEDEF: void GStrv +TYPEDEF: gchar** GStrv TYPEDEF: gchar* gchararray GIR: vocab:gobject/GObject-2.0.gir