summaryrefslogtreecommitdiff
path: root/gi/pygi-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'gi/pygi-cache.c')
-rw-r--r--gi/pygi-cache.c82
1 files changed, 10 insertions, 72 deletions
diff --git a/gi/pygi-cache.c b/gi/pygi-cache.c
index 0c6b94c5..9793ffee 100644
--- a/gi/pygi-cache.c
+++ b/gi/pygi-cache.c
@@ -28,6 +28,7 @@
#include "pygi-marshal-cleanup.h"
#include "pygi-type.h"
#include "pygi-hashtable.h"
+#include "pygi-basictype.h"
PyGIArgCache * _arg_cache_new_for_interface (GIInterfaceInfo *iface_info,
@@ -269,51 +270,12 @@ _callback_cache_new (GIArgInfo *arg_info,
return cc;
}
-static PyGIArgCache *
+PyGIArgCache *
_arg_cache_alloc (void)
{
return g_slice_new0 (PyGIArgCache);
}
-static void
-_arg_cache_from_py_basic_type_setup (PyGIArgCache *arg_cache)
-{
- arg_cache->from_py_marshaller = _pygi_marshal_from_py_basic_type_cache_adapter;
-}
-
-static void
-_arg_cache_to_py_basic_type_setup (PyGIArgCache *arg_cache)
-{
- arg_cache->to_py_marshaller = _pygi_marshal_to_py_basic_type_cache_adapter;
-}
-
-static void
-_arg_cache_from_py_void_setup (PyGIArgCache *arg_cache)
-{
- arg_cache->from_py_marshaller = _pygi_marshal_from_py_void;
-}
-
-static void
-_arg_cache_to_py_void_setup (PyGIArgCache *arg_cache)
-{
- arg_cache->to_py_marshaller = _pygi_marshal_to_py_void;
-}
-
-static void
-_arg_cache_from_py_utf8_setup (PyGIArgCache *arg_cache,
- GITransfer transfer)
-{
- arg_cache->from_py_marshaller = _pygi_marshal_from_py_basic_type_cache_adapter;
- arg_cache->from_py_cleanup = _pygi_marshal_cleanup_from_py_utf8;
-}
-
-static void
-_arg_cache_to_py_utf8_setup (PyGIArgCache *arg_cache,
- GITransfer transfer)
-{
- arg_cache->to_py_marshaller = _pygi_marshal_to_py_basic_type_cache_adapter;
- arg_cache->to_py_cleanup = _pygi_marshal_cleanup_to_py_utf8;
-}
static PyGIArgCache*
_arg_cache_array_len_arg_setup (PyGIArgCache *arg_cache,
@@ -718,17 +680,6 @@ _arg_cache_new (GITypeInfo *type_info,
switch (type_tag) {
case GI_TYPE_TAG_VOID:
- arg_cache = _arg_cache_alloc ();
- if (arg_cache == NULL)
- break;
-
- if (direction & PYGI_DIRECTION_FROM_PYTHON)
- _arg_cache_from_py_void_setup (arg_cache);
-
- if (direction & PYGI_DIRECTION_TO_PYTHON)
- _arg_cache_to_py_void_setup (arg_cache);
-
- break;
case GI_TYPE_TAG_BOOLEAN:
case GI_TYPE_TAG_INT8:
case GI_TYPE_TAG_UINT8:
@@ -742,30 +693,17 @@ _arg_cache_new (GITypeInfo *type_info,
case GI_TYPE_TAG_DOUBLE:
case GI_TYPE_TAG_UNICHAR:
case GI_TYPE_TAG_GTYPE:
- arg_cache = _arg_cache_alloc ();
- if (arg_cache == NULL)
- break;
-
- if (direction & PYGI_DIRECTION_FROM_PYTHON)
- _arg_cache_from_py_basic_type_setup (arg_cache);
-
- if (direction & PYGI_DIRECTION_TO_PYTHON)
- _arg_cache_to_py_basic_type_setup (arg_cache);
-
- break;
case GI_TYPE_TAG_UTF8:
case GI_TYPE_TAG_FILENAME:
- arg_cache = _arg_cache_alloc ();
- if (arg_cache == NULL)
- break;
-
- if (direction & PYGI_DIRECTION_FROM_PYTHON)
- _arg_cache_from_py_utf8_setup (arg_cache, transfer);
-
- if (direction & PYGI_DIRECTION_TO_PYTHON)
- _arg_cache_to_py_utf8_setup (arg_cache, transfer);
+ arg_cache = pygi_arg_basic_type_new_from_info (type_info, arg_info, transfer, direction);
+ if (arg_cache) {
+ arg_cache->py_arg_index = py_arg_index;
+ arg_cache->c_arg_index = c_arg_index;
+ return arg_cache;
+ } else {
+ return NULL;
+ }
- break;
case GI_TYPE_TAG_ARRAY:
{
PyGISequenceCache *seq_cache =