diff options
author | Simon Feltman <sfeltman@src.gnome.org> | 2013-08-01 19:33:27 -0700 |
---|---|---|
committer | Simon Feltman <sfeltman@src.gnome.org> | 2013-09-26 00:18:02 -0700 |
commit | dbc2cf5f1fa0f9cc046170efa6afb086b90253cb (patch) | |
tree | bd930456bffda0770960c914b0f814d291cb098e | |
parent | 87ae14b8b4a0ed9beb22f48314247e988a2e017f (diff) | |
download | pygobject-dbc2cf5f1fa0f9cc046170efa6afb086b90253cb.tar.gz |
cache refactoring: Remove continue statements from _args_cache_generate
Remove continue and goto statements from the large loop within
_args_cache_generate. This simplifies the sharing of parts of
the loop for future refactoring.
https://bugzilla.gnome.org/show_bug.cgi?id=640812
-rw-r--r-- | gi/pygi-cache.c | 126 |
1 files changed, 61 insertions, 65 deletions
diff --git a/gi/pygi-cache.c b/gi/pygi-cache.c index d69ba612..c66e72a4 100644 --- a/gi/pygi-cache.c +++ b/gi/pygi-cache.c @@ -1044,86 +1044,82 @@ _args_cache_generate (GICallableInfo *callable_info, callable_cache->n_from_py_args++; - g_base_info_unref ( (GIBaseInfo *)arg_info); + } else { - continue; - } + direction = _pygi_get_direction (callable_cache, + g_arg_info_get_direction (arg_info)); + transfer = g_arg_info_get_ownership_transfer (arg_info); + type_info = g_arg_info_get_type (arg_info); + type_tag = g_type_info_get_tag (type_info); + + if (type_tag == GI_TYPE_TAG_INTERFACE || type_tag == GI_TYPE_TAG_ARRAY) + is_caller_allocates = g_arg_info_is_caller_allocates (arg_info); + + /* must be an child arg filled in by its owner + * and continue + * fill in it's c_arg_index, add to the in count + */ + arg_cache = _pygi_callable_cache_get_arg (callable_cache, arg_index); + if (arg_cache != NULL) { + if (arg_cache->meta_type == PYGI_META_ARG_TYPE_CHILD_WITH_PYARG) { + arg_cache->py_arg_index = callable_cache->n_py_args; + callable_cache->n_py_args++; + } - direction = _pygi_get_direction (callable_cache, - g_arg_info_get_direction (arg_info)); - transfer = g_arg_info_get_ownership_transfer (arg_info); - type_info = g_arg_info_get_type (arg_info); - type_tag = g_type_info_get_tag (type_info); - - if (type_tag == GI_TYPE_TAG_INTERFACE || type_tag == GI_TYPE_TAG_ARRAY) - is_caller_allocates = g_arg_info_is_caller_allocates (arg_info); - - /* must be an child arg filled in by its owner - * and continue - * fill in it's c_arg_index, add to the in count - */ - arg_cache = _pygi_callable_cache_get_arg (callable_cache, arg_index); - if (arg_cache != NULL) { - if (arg_cache->meta_type == PYGI_META_ARG_TYPE_CHILD_WITH_PYARG) { - arg_cache->py_arg_index = callable_cache->n_py_args; - callable_cache->n_py_args++; - } + if (direction & PYGI_DIRECTION_FROM_PYTHON) { + arg_cache->c_arg_index = callable_cache->n_from_py_args; + callable_cache->n_from_py_args++; + } - if (direction & PYGI_DIRECTION_FROM_PYTHON) { - arg_cache->c_arg_index = callable_cache->n_from_py_args; - callable_cache->n_from_py_args++; - } + if (direction & PYGI_DIRECTION_TO_PYTHON) { + callable_cache->n_to_py_args++; + callable_cache->n_to_py_child_args++; + } - if (direction & PYGI_DIRECTION_TO_PYTHON) { - callable_cache->n_to_py_args++; - callable_cache->n_to_py_child_args++; - } + arg_cache->type_tag = g_type_info_get_tag (type_info); - arg_cache->type_tag = g_type_info_get_tag (type_info); + } else { - g_base_info_unref (type_info); - g_base_info_unref ( (GIBaseInfo *)arg_info); - continue; - } + if (direction & PYGI_DIRECTION_FROM_PYTHON) { + py_arg_index = callable_cache->n_py_args; + callable_cache->n_from_py_args++; + callable_cache->n_py_args++; + } - if (direction & PYGI_DIRECTION_FROM_PYTHON) { - py_arg_index = callable_cache->n_py_args; - callable_cache->n_from_py_args++; - callable_cache->n_py_args++; - } + arg_cache = + _arg_cache_new (type_info, + callable_cache, + arg_info, + transfer, + direction, + arg_index, + py_arg_index); - arg_cache = - _arg_cache_new (type_info, - callable_cache, - arg_info, - transfer, - direction, - arg_index, - py_arg_index); + if (arg_cache == NULL) { + g_base_info_unref( (GIBaseInfo *)type_info); + g_base_info_unref( (GIBaseInfo *)arg_info); + return FALSE; + } - if (arg_cache == NULL) - goto arg_err; + arg_cache->arg_name = g_base_info_get_name ((GIBaseInfo *) arg_info); + arg_cache->allow_none = g_arg_info_may_be_null(arg_info); + arg_cache->is_caller_allocates = is_caller_allocates; + + if (direction & PYGI_DIRECTION_TO_PYTHON) { + callable_cache->n_to_py_args++; - arg_cache->arg_name = g_base_info_get_name ((GIBaseInfo *) arg_info); - arg_cache->allow_none = g_arg_info_may_be_null(arg_info); - arg_cache->is_caller_allocates = is_caller_allocates; + callable_cache->to_py_args = + g_slist_append (callable_cache->to_py_args, arg_cache); + } - if (direction & PYGI_DIRECTION_TO_PYTHON) { - callable_cache->n_to_py_args++; + _pygi_callable_cache_set_arg (callable_cache, arg_index, arg_cache); + } - callable_cache->to_py_args = - g_slist_append (callable_cache->to_py_args, arg_cache); + g_base_info_unref (type_info); } - _pygi_callable_cache_set_arg (callable_cache, arg_index, arg_cache); - g_base_info_unref( (GIBaseInfo *)type_info); - g_base_info_unref( (GIBaseInfo *)arg_info); + g_base_info_unref ( (GIBaseInfo *)arg_info); - continue; -arg_err: - g_base_info_unref( (GIBaseInfo *)type_info); - g_base_info_unref( (GIBaseInfo *)arg_info); - return FALSE; } _arg_name_list_generate (callable_cache); |